我是ANTLR4
的新手,想了解将词法分析器操作信息推送到解析器的最佳方法。
我有以下内容:
LINE_DIRECTIVE: '#line' [ \t]+ INTEGER [ \t]+ STRING_LITERAL { System.out.println(getText()); skip(); }
;
基本上我想将getText()
推送到解析器。
为行指令设置解析器规则不是一个选项,因为这样的行指令可以在任何地方发生......
感谢您的帮助!
答案 0 :(得分:0)
从词法分析者到解析器的通信不可能以你想要的方式进行(如果我理解正确的话)。
您可以做的是将您的LINE_DIRECTIVE
放在另一个频道上(不 skip
令牌!)。有DEFAULT
(或DEFAULT_CHANNEL
)和HIDDEN
个频道,您可以引入更多 1 。解析器只从DEFAULT
通道读取令牌,但您可以在运行时 2 更改它。
1 https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Lexer+Rules#LexerRules-channel()