ANTLR位置特定标记

时间:2014-01-24 06:26:15

标签: token antlr4

我们想要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;

1 个答案:

答案 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;