3

以下は非常に単純な文法です。

grammar test;

DIGIT : [0-9] ;
WS : [ \r\n\t]+ -> skip ;
value : DIGIT+ ;

OSX および Java バージョン 1.6 での antlr v4.0b3 の使用

次のコマンドで文法をコンパイルします。

antlr4 test.g4
javac *.java

次に、grun を使用して文法をテストしました。

grun test value -tokens

結果は次のとおりです。

grun test value -tokens
12
[eof]
[@0,0:0='1',<1>,1:0]
[@1,1:1='2',<1>,1:1]
[@2,3:2='<EOF>',<-1>,2:0]

私の質問は、1 つ ('12') ではなく 2 つのトークン ('1' と '2') を取得するのはなぜですか?

私を助けてくれる人に感謝します!!

乾杯!

4

1 に答える 1

4

DIGITに一度に1桁の数字を一致させるように要求し、それがパーサールールの値に渡されます。あなたが欲しいのは本当に

value : INT ;
INT : [0-9]+ ;

:)

テレンス

于 2012-11-30T01:06:07.113 に答える