2

考虑 ANTLR4 中的以下词法分析器规则:

ID: [a-z]+;
INT: [0-9]+;
ARRAY: ID '[' INT ']';

在我可以访问ctx.ARRAY()(从解析器规则生成ctx的子类在哪里)的树行走场景中是否有可能获取词法分析器规则的文本表示和?我目前使用正则表达式获取整个文本表示并解析其内容并使用正则表达式,我只是想知道是否有 ANTLR 提供的开箱即用解决方案。ParserRuleContextIDINTctx.ARRAY().getText()IDINT

注意:由于外部依赖关系,ARRAY无法选择解析器规则。

在此先感谢您提供有意义的答案。

4

1 回答 1

3

ANTLR 4 中的 Lexer 规则不能分解为多个部分。这是我们为 ANTLR 4 词法分析器比 ANTLR 3 词法分析器大幅提高速度和内存而做出的设计决策。ANTLR 3 词法分析器是递归下降识别器,具有许多与解析器相同的特性。在 ANTLR 4 中,词法分析器只不过是支持语义谓词的 DFA 识别器,因此根本不跟踪标记的各个组件之间的边界。

您必须制定ARRAY解析器规则,或者单独解析getText()需要分解令牌文本时的结果。

于 2013-05-03T12:58:20.110 回答