antlr が表示するエラー メッセージを改善しようとしていますが、構文述語が不適切なエラー メッセージの原因であることに気付きました。
これは私が現在取り組んでいるものです。文法の構造の例を次に示します。申し訳ありませんが、実際の文法を提供することはできません。うまくいけば、これは要点を示しています。
defs
: (a) => a | b
;
a
: A B c
;
//b is actually much further down the chain and due to ordering can't be moved up.
b
: A c
;
問題は、たとえばトークン「AB D」がある場合です。表示されるエラー メッセージは、'b' ルールによるものです。エラーメッセージを「a」ルールからのものにしたい。「A B」が一致する場合、「c」が一致しない場合はエラーが必要です。
私はあなたがこれを行うことができるかもしれないと思った
a
: (A B) => A B c | {EmitErrorMessage("error");}
;