質問

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;
        }

        //...
    }


}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top