質問
AntLR4 Newbie、しかしそれは涼しいです。これがすでに答えられている場合は恩赦がありますが、答えが見つかりませんでした。
カスタム訪問者のエラーを扱うための良い/標準/一般的な慣習があるかどうか疑問に思います。
e.g。オブジェクトが同じタイプではない場合に失敗する必要がある2つのオブジェクトを比較するVisiteQualityExpressionがあります。
明らかに私は投げ/キャッチすることができます、しかし私はパーサーを使っているエラーリストナーのようなものを望んでいました。ErrorListenerに関するクールなことは、正確なエラーに関して本当に詳細な情報を与えることです。それは訪問者の時間をやることができますか?
私はそれが解析時にこれを追いつくのが良いと思います。例えば。キャッチ 'abc'== 123解析するときは?
解決
訪問者にList<MyErrorType>
を追加し、そのエラーが発生した場合にこのリストにエラーを追加します。エラーメッセージとともにノードまたは列/列を追加することができます。
これのように見えるかもしれません:
class MyVisitor : MyGrammarNameVisitor<object>
{
public readonly List<MyErrorType> errors = new List<MyErrorType>();
override object visitMyRuleName(MyGrammarName.MyRuleNameContext ctx){
if (erroneous)
{
errors.Add(new MyErrorType(linenumber, column, errorMessage, whateverElseMayBeUseful));
return null;
}
//...
}
}
. 所属していません StackOverflow