作成しているJavaツールで論理式を解析するためにANTLRを使用していますが、生成されたANTLRレクサーとパーサーに無効な入力文字列を渡しても例外が発生しないため、問題が発生しています。予想どおり、RecognitionExceptionをスローする代わりに、生成されたファイルはエラーメッセージをコンソールに出力し、エラーが発生しなかったかのように返します。これにより、後で空のデータが発生したときにプログラムがクラッシュします。
ANTLRWorksバージョン1.4.3を使用してファイルを生成しました。コンソールに出力するのではなく、実際にエラーをスローするための何らかのオプションがあるはずですが、何も見つかりませんでした。ANTLRに実際にエラーメッセージをスローさせる方法を知っている人はいますか?C#でのこの同じ問題は、古いバージョンのANTLRを使用することで解決されたことがわかりましたが、それは私がする必要があることですか?
編集:バートが私が探していた方向に私を向けた後、私はこのページを見つけました
https://theantlrguy.atlassian.net/wiki/display/ANTLR3/Migrating+from+ANTLR+2+to+ANTLR+3
その「エラー処理」セクションには、私が望むことをより正確に実行するコードが含まれていました。ANTLRが例外をキャッチする方法を変更するには、文法ファイルで次のように言うことができます。
@rulecatch {
catch (RecognitionException e) {
throw e;
}
}
これにより、ANTLRは例外を処理して回復するのではなく、例外をスローします。そのセクションには、すべての可能な例外がスローされることを確認するために、不一致および回復関数をオーバーライドすることについてのいくつかのこともあります。