「running.exception=2.j=15」のようなフレーズをキャッチする単純な antlr ルールがあり、この場合は 2 に初期化される値を識別したいと考えています。
ただし、ANTLR は 2. をフロートとして見ています。intとして識別させる方法はありますか?
私のルール:
exception
:
(
ID*
'.exception='
INT
'.'
ID*
);
「running.exception=2.j=15」のようなフレーズをキャッチする単純な antlr ルールがあり、この場合は 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 : ;
これは次のように入力を解析します"0.12 .34 56. 78"
:
FLOAT '0.12' フロート'.34' INT '56' ドット'。' INT '78'