我有一個簡單的antlr規則來捕捉像「running.exception = 2.j = 15」這樣的短語,並且我想確定在此情況下初始化值爲2。ANTLR將INT與FLOAT混合在一起
但是,ANTLR將2.看作是一個浮點數。無論如何可以將它識別爲int嗎?
我的規則:
exception
:
(
ID*
'.exception='
INT
'.'
ID*
);
我有一個簡單的antlr規則來捕捉像「running.exception = 2.j = 15」這樣的短語,並且我想確定在此情況下初始化值爲2。ANTLR將INT與FLOAT混合在一起
但是,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 : ;
這將解析輸入"0.12 .34 56. 78"
這樣的:
FLOAT '0.12' FLOAT '.34' INT '56' DOT '.' INT '78'
完美工作:)謝謝 –
很酷,歡迎您@Syntax_Error。 –
試圖添加(( '0'。 '''''''CHAR){$ type = INT;}來浮動,但它認爲2.j是INT! –
但有時2.5是一個浮點數,但2.j是2作爲INT和j作爲ID。我之前添加到FLOAT的規則,它將2.j作爲INT。有什麼建議麼? –
啊,我明白你的意思了。看看我的答案是否能解決它。 –