ANTLR:在语法中定义新通道
我知道在ANTLR语法中可以在默认和隐藏令牌通道之间切换,但假设我想要第三个通道。如何在gramar中定义新的令牌通道?例如,假设我想要一个名为ALTERNATIVE的频道。它们只是中的ANTLR:在语法中定义新通道,antlr,token,grammar,antlr3,Antlr,Token,Grammar,Antlr3,我知道在ANTLR语法中可以在默认和隐藏令牌通道之间切换,但假设我想要第三个通道。如何在gramar中定义新的令牌通道?例如,假设我想要一个名为ALTERNATIVE的频道。它们只是中的最终int,因此您可以简单地在lexer中引入一个额外的int,如下所示: grammar T; @lexer::members { public static final int ALTERNATIVE = HIDDEN + 1; } // parser rules ... FOO : 'foo
最终int
,因此您可以简单地在lexer中引入一个额外的int
,如下所示:
grammar T;
@lexer::members {
public static final int ALTERNATIVE = HIDDEN + 1;
}
// parser rules ...
FOO
: 'foo' {$type=ALTERNATIVE;}
;
// other lexer rules ...
一个相关的Q&A:用于您可以使用的C目标
//This must be assigned somewhere
@lexer::context {
ANTLR3_UINT32 defaultChannel;
}
TOKEN : 'blah' {$channel=defaultChannel;};
这会在每个规则之后重置,因此如果您希望通道分配在规则之间保持不变,则可能必须重写nextTokenStr()