0

antlr3 の感触をつかもうとしていて、式エバリュエーターを ANTLRWorks ウィンドウ (最新バージョン) に貼り付けてコンパイルしました。正常にコンパイルされて起動しましたが、2 つの問題があります。

  • の入力を使用しようとすると1+2*4/3;、パーサーの実際の入力は になりました1+2*43
  • グラフィカル パーサー ツリーに表示されるエラーの 1 つはMissingTokenException(0!=0).

私はantlrを初めて使用するので、誰か助けてもらえますか?

4

2 に答える 2

1

私たちはしばしば得る

MissingTokenException(0!=0)

間違いをしたとき。探しているトークンが見つからず、間違ったトークンによって生成された可能性があることを意味していると思います。文法によっては、パーサーが「回復」する場合があります。

LEXERはパーサーの前で動作するため、実際にパーサーに渡されるトークンを確認する必要があることにも注意してください。ここでは、AntlrWorksデバッガーが非常に役立ちます。

于 2009-12-08T00:45:41.933 に答える
1

リンク先の例は除算をサポートしていません (コードを見てください。ここには除算がないことに気付くでしょう:

expr returns [int value]
    :   e=multExpr {$value = $e.value;}
        (   '+' e=multExpr {$value += $e.value;}
        |   '-' e=multExpr {$value -= $e.value;}
        )*
于 2009-12-08T00:34:45.153 に答える