間違った入力テキストを文法にフィードしようとしていると考えてください(たとえば、不明なトークンを含むテキスト)。ANTLRWorks
解釈中、グラフで表示さNoViableAltException
れます。
UPD:この例外が発生する場合は2つあります。
1)既知のトークンの予期しない使用。この場合、次のようなものを受け取ります。line 5:36 no viable alternative at input ','
2)不明なトークンタイプを使用します。たとえば、文法は@
記号で始まるトークンについて何も知りません。そして、そのようなトークンを含むテキストを文法にフィードしようとしています。
残念ながら、(2)の場合、この例外はANTLRWorks
デバッガーでも生成されたJavaコードでもスローされません。しかし、それはANTLRWorks
通訳者の結果グラフにのみ見られます。
また、次の標準コードを文法に追加しようとしました。
@parser::members {
private IErrorReporter errorReporter = null;
public void setErrorReporter(IErrorReporter errorReporter) {
this.errorReporter = errorReporter;
}
public void emitErrorMessage(String msg) {
errorReporter.reportError(msg);
}
}
@lexer::members {
... the same code as above ...
}
この構造は、タイプ(1)の解析エラー(トークンの予期しない使用に関するエラーなど)を正常にキャッチしますline 5:36 no viable alternative at input ','
。ただし、トークンが不明な実行不可能な入力の場合、パーサーはエラー報告なしchildren == null
で最上位のオブジェクトを生成します。CommonTree
私はを使用してantlr 3.5
います。
質問:NoViableAltException
生成されたJavaコードで記述された状況を把握することは可能ですか?