1

antlr 4でファイルを解析しようとしていますが、1桁を超える整数が解析されない理由がわかりません(79:44行目入力「17」で実行可能な代替手段がありません)。

これはエンティエ文法ですhttp://pastebin.com/rxktvUBi

これがintの定義です

fragment DIGIT : [0-9] ;
integer : DIGIT+ ;

これはまったく機能しません。このバージョン

integer : ('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9')+ ;

1桁の整数に対してのみ機能します。

これは、分割されていない行の例です

 struct p_77_bound_17_or: ((bound(MEK)<=17) | (bound(MEKPP)<=17))

問題は

 simple_expression:

     (integer)+

識別子を使用する場合は注意してください

ID:
  ('a'..'z'|'A'..'Z'|'0'..'9'|'_')+;


identifier: ID;

整数の代わりに

 simple_expression:

     identifier

それは動作します。

なんで?何か案が?

4

1 に答える 1

8

integerルールはパーサールールであり、レクサールールではありません。'0'それが参照する、、などの'1'リテラルは、それぞれ1桁に一致するレクサールールに暗黙的に変換されます。代わりに、次のレクサールールを作成する必要があります。

INTEGER : '0'..'9'+;

またはANTLR4では、単にこれ:

INTEGER : [0-9]+;
于 2013-02-22T15:17:17.050 に答える