Floating point 带浮点数的ANTLR混合整数

Floating point 带浮点数的ANTLR混合整数,floating-point,int,antlr,Floating Point,Int,Antlr,我有一个简单的antlr规则来捕获一个短语,比如“running.exception=2.j=15”,我想标识在本例中初始化为2的值 然而,ANTLR正在研究2。作为一个浮动。有没有办法让它识别为int 我的规则: exception : ( ID* '.exception=' INT '.' ID* ); 试着这样做: grammar T; parse : (t=. {System.out.printf("\%-10s '\

我有一个简单的antlr规则来捕获一个短语,比如“running.exception=2.j=15”,我想标识在本例中初始化为2的值

然而,ANTLR正在研究2。作为一个浮动。有没有办法让它识别为int

我的规则:

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

试着这样做:

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 : ;
FLOAT '0.12' FLOAT '.34' INT '56' DOT '.' INT '78' 这将解析输入
“0.12.34 56.78”
,如下所示:

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 : ;
FLOAT '0.12' FLOAT '.34' INT '56' DOT '.' INT '78' 浮动“0.12” 浮动“.34” 国际'56' 点“.”
INT'78'试图将(('0'..'9')'.'CHAR){$type=INT;}添加到float中,但它认为2.j是INT!但有时2.5是一个浮点,但2.j是2作为INT,j作为ID。我之前添加到浮点的规则捕获了2.j作为INT。有什么建议吗?啊,我明白你的意思了。看看我的答案是否能解决这个问题。