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