1

私は最近ANTLRの勉強を始めました。以下は算術式の文法です。問題は、式ルールをルールに入れる(呼び出す)とterm、(9 + 8)でも正しく解析されないことです。どういうわけか、右括弧を無視しています。

ルール用語から式ルールを呼び出す代わりにルールを置くaddと、うまく機能しています。

のように:

term:
INTEGER
| '(' add ')'
;

どちらも同じであるために、なぜそれが起こっているのか誰かに教えてもらえますか?

間違った結果を出している文法

term
  :
  INTEGER
  | '(' expression ')'
  ;

mult
  :
  term ('*' term)*
  ;

add
  :
  mult ('+' mult)*
  ;

expression
  :
  add
  ;
4

1 に答える 1

2

"(8+9)"あなたの文法から生成されたパーサーで解析すると、ルールから始めて、expression次の解析ツリーが得られます。

ここに画像の説明を入力

言い換えれば、それはうまく機能します。

おそらく、文法をテストするために ANTLRWorks (または ANTLR IDE) のインタープリターを使用していますか? その場合: インタープリターは使用しないでください。バグがあるためです。代わりに ANTLRWorks のデバッガーを使用してください (イメージは ANTLRWorks のデバッガーからエクスポートされます)。

于 2012-07-25T17:55:38.750 に答える