ANTLR:获取子词法分析器规则的文本表示

时间:2013-05-03 08:50:16

标签: parsing antlr4

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

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

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

注意:由于外部依赖关系使得ARRAY解析器规则不是一个选项。

提前感谢您提供有意义的答案。

1 个答案:

答案 0 :(得分:3)

ANTLR 4中的Lexer规则不能分解为多个部分。这是一个设计决策,我们作为ANTLR 4词法分析器的ANTLR 4词法分子的大量速度和内存改进的一部分。 ANTLR 3词法分析器是递归下降识别器,具有许多与解析器相同的功能。在ANTLR 4中,词法分析器只不过是支持语义谓词的DFA识别器,因此根本不会跟踪令牌的各个组件之间的界限。

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