1

「running.exception=2.j=15」のようなフレーズをキャッチする単純な antlr ルールがあり、この場合は 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"

FLOAT '0.12'
フロート'.34'
INT '56'
ドット'。'
INT '78'
于 2012-12-16T13:02:25.300 に答える