我们想要ANTLR语法,其中第一个位置的“0”与其他位置的处理方式不同。
示例输入
0 Test
World 0
无论如何都要识别位置或上下文特定的令牌?
目前我们正在编写代码以更改令牌类型。
语法
// Define a grammar called Hello
grammar Hello;
r : (r2 | r1)+ ;
r2 : 'World' Num ;
r1 : keyZero 'Test';
keyZero : {_input.LT(1).getCharPositionInLine() == 0}? Num ;
Num : [0-9]+ ;
Ws : [ ] -> skip;
Eol : [\r\n]->skip;
答案 0 :(得分:1)
可以在词法分析器中处理:
grammar Hello;
r : (r2 | r1)+ EOF;
r2 : 'World' NUM ;
r1 : KEY_ZERO 'Test';
KEY_ZERO : {getCharPositionInLine() == 0}? [0-9]+;
NUM : [0-9]+;
SPACE : [ \r\n] -> skip;