【发布时间】:2011-08-20 20:06:03
【问题描述】:
我知道可以在 ANTLR 语法中的默认和隐藏令牌通道之间切换,但假设我想要第三个通道。如何在语法中定义新的令牌通道?例如,假设我想要一个名为 ALTERNATIVE 的频道。
【问题讨论】:
标签: antlr token grammar antlr3
我知道可以在 ANTLR 语法中的默认和隐藏令牌通道之间切换,但假设我想要第三个通道。如何在语法中定义新的令牌通道?例如,假设我想要一个名为 ALTERNATIVE 的频道。
【问题讨论】:
标签: antlr token grammar antlr3
它们只是Token class
中的final int,因此您可以像这样在您的词法分析器中简单地引入一个额外的int:
grammar T;
@lexer::members {
public static final int ALTERNATIVE = HIDDEN + 1;
}
// parser rules ...
FOO
: 'foo' {$type=ALTERNATIVE;}
;
// other lexer rules ...
相关问答:How do I get an Antlr Parser rule to read from both default AND hidden channel
【讨论】:
对于 C 目标,您可以使用
//This must be assigned somewhere
@lexer::context {
ANTLR3_UINT32 defaultChannel;
}
TOKEN : 'blah' {$channel=defaultChannel;};
这会在每条规则之后重置,因此如果您希望通道分配在规则之间保持不变,您可能必须覆盖 nextTokenStr()。
【讨论】: