Floating point 带浮点数的ANTLR混合整数
我有一个简单的antlr规则来捕获一个短语,比如“running.exception=2.j=15”,我想标识在本例中初始化为2的值 然而,ANTLR正在研究2。作为一个浮动。有没有办法让它识别为int 我的规则: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 '\
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。有什么建议吗?啊,我明白你的意思了。看看我的答案是否能解决这个问题。