[英]ANTLR: Define new channel in grammar
I know it is possible to switch between the default and hidden token channels in an ANTLR grammar, but lets say I want a third channel. 我知道可以在ANTLR语法的默认令牌通道和隐藏令牌通道之间进行切换,但是可以说我想要第三个通道。 How can I define a new token channel in the gramar?
如何在gramar中定义新的令牌通道? For instance, lets say I want a channel named ALTERNATIVE.
例如,假设我想要一个名为ALTERNATIVE的频道。
They're just final int
's in the Token
class , so you could simply introduce an extra int
in your lexer like this: 它们只是
Token
类中的final int
,因此您可以像这样在词法分析器中简单地引入一个额外的int
:
grammar T;
@lexer::members {
public static final int ALTERNATIVE = HIDDEN + 1;
}
// parser rules ...
FOO
: 'foo' {$type=ALTERNATIVE;}
;
// other lexer rules ...
A related Q&A: How do I get an Antlr Parser rule to read from both default AND hidden channel 一个相关的问答: 我如何获得一个Antlr Parser规则以从默认通道和隐藏通道中读取
For the C target you can use 对于C目标,您可以使用
//This must be assigned somewhere
@lexer::context {
ANTLR3_UINT32 defaultChannel;
}
TOKEN : 'blah' {$channel=defaultChannel;};
This gets reset after every rule so if you want a channel assignment to persist across rules you may have to override nextTokenStr(). 每条规则后都会重置此设置,因此,如果您希望通道分配在所有规则中都保持不变,则可能必须覆盖nextTokenStr()。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.