考虑ANTLR4中的以下词法分析器规则:
ID: [a-z]+;
INT: [0-9]+;
ARRAY: ID '[' INT ']';
是否可以在我可以访问ctx.ARRAY()
(其中ctx
是ParserRuleContext
的子类,由解析器规则生成)的树行走方案中获取文本词法分析器ID
和INT
的表示?
我目前使用ctx.ARRAY().getText()
获取整个文本表示,并使用正则表达式解析ID
和INT
的内容,并且只是想知道ANTLR提供的“清洁”开箱即用解决方案。
注意:由于外部依赖关系使得ARRAY
解析器规则不是一个选项。
提前感谢您提供有意义的答案。
答案 0 :(得分:3)
ANTLR 4中的Lexer规则不能分解为多个部分。这是一个设计决策,我们作为ANTLR 4词法分析器的ANTLR 4词法分子的大量速度和内存改进的一部分。 ANTLR 3词法分析器是递归下降识别器,具有许多与解析器相同的功能。在ANTLR 4中,词法分析器只不过是支持语义谓词的DFA识别器,因此根本不会跟踪令牌的各个组件之间的界限。
当您需要分解令牌的文本时,您必须使ARRAY
成为解析器规则,或单独解析getText()
的结果。