ANTLR lexer动作将信息推送到解析器?

时间:2014-10-27 17:02:00

标签: antlr antlr4

我是ANTLR4的新手,想了解将词法分析器操作信息推送到解析器的最佳方法。

我有以下内容:

LINE_DIRECTIVE: '#line' [ \t]+ INTEGER [ \t]+ STRING_LITERAL { System.out.println(getText()); skip(); }
          ;

基本上我想将getText()推送到解析器。

为行指令设置解析器规则不是一个选项,因为这样的行指令可以在任何地方发生......

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

从词法分析者到解析器的通信不可能以你想要的方式进行(如果我理解正确的话)。

您可以做的是将您的LINE_DIRECTIVE放在另一个频道上( skip令牌!)。有DEFAULT(或DEFAULT_CHANNEL)和HIDDEN个频道,您可以引入更多 1 。解析器只从DEFAULT通道读取令牌,但您可以在运行时 2 更改它。

1 https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Lexer+Rules#LexerRules-channel()

2 Access Channels in ANTLR 4 and Parse them separately