2012-05-02 9 views
1

私はANTLR文法に問題があり、今は1時間以上それを把握しようとしています。私はこの単純な文法までの私の問題を剥奪:ANTLR文法の問題

 grammar TestGrammar; 

     options { 
      language = Java; 
      k=2; 
     } 

     compu_method : '/begin COMPU_METHOD' NAME NAME NAME NAME 
       (
       (formula) 
       |('COEFFS' realnumber realnumber realnumber realnumber realnumber realnumber) 
      )* 
       '/end COMPU_METHOD'; 

      formula : '/begin FORMULA' (.)* '/end FORMULA'; 

      realnumber: (INT | FLOAT); 

     NAME : LETTER (LETTER|'0'..'9'|'['|']'|'.')* ; 
     fragment LETTER : 'A'..'Z' | 'a'..'z' | '_' ; 

     INT : MINUS? ('0' | '1'..'9' '0'..'9'*) ; 
     FLOAT : MINUS? ('0'..'9')+ '.' ('0'..'9')* Exponent? | MINUS? '.' ('0'..'9')+ Exponent? | MINUS? ('0'..'9')+ Exponent ; 
     MINUS : '-' ; 
     fragment Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ; 

     WS : ('\r\n'|'\n'|' '|'\r'|'\t'|'\u000C') { $channel=HIDDEN;}; 

そして、私は一致しようとしています入力は次のとおりです。

/begin COMPU_METHOD 
     foo 
     foo 
     foo 
     foo 
     COEFFS 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 
/end COMPU_METHOD 

インタプリタはいつも私に「不一致入力 『COEFFS』期待して 『\ u0005』を与えます"

なぜですか?

私の文法で(式)と( 'COEFFS' ...)の順序を変更しても問題ないのですか?

答えて

1

compu_methodに無効なNトークンがあり、formulaルールの後にセミコロンを忘れた場合は、入力の解析に問題はありません。私は、デバッガを使用

enter image description here

注意、およびでない(バグがある)通訳:私は、次の構文解析ツリーを取得します。だからあなたの問題はおそらくあなたが通訳を使ったことでしょう。

+0

インタープリタの代わりにデバッガを正確に使用するにはどうすればよいですか? – metacircle

+0

ANTLRWorksを使用していると仮定して、 'CTRL + D'を押します。 Eclipse用のANTLRプラグインを使用している場合(ANTLRWorks、AFAIKのインタプリタとデバッガコンポーネントを使用):わかりません。 –