ANTLR将INT与FLOAT混合

时间:2012-12-16 11:40:49

标签: floating-point int antlr

我有一个简单的antlr规则来捕获像“running.exception = 2.j = 15”这样的短语,我想确定在这种情况下初始化为2的值。

然而,ANTLR将2.视为浮动。反正有没有把它识别为int?

我的规则:

exception
    :
    (
    ID*
    '.exception='
    INT
    '.'
    ID*
    );

1 个答案:

答案 0 :(得分:3)

尝试这样的事情:

grammar T;

parse
 : (t=. {System.out.printf("\%-10s '\%s'\n", tokenNames[$t.type], $t.text);})* EOF
 ;

FLOAT
 : DIGIT+ ( ('.' DIGIT)=> '.' DIGIT+
          | {$type=INT;}
          )
 | '.' DIGIT+
 ;

DOT
 : '.'
 ;

SPACE
 : ' ' {skip();}
 ;

fragment DIGIT : '0'..'9';
fragment INT : ;

将解析输入"0.12 .34 56. 78",如下所示:

FLOAT      '0.12'
FLOAT      '.34'
INT        '56'
DOT        '.'
INT        '78'