1

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

但是,ANTLR 将 2. 视为浮点数。反正有没有让它识别为int?

我的规则:

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

1 回答 1

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"像这样解析输入:

浮动'0.12'
浮动'.34'
INT'56'
点'。
INT'78'
于 2012-12-16T13:02:25.300 回答