6

Antlr 3 から Antlr 4 にアップグレードしました。このコードを使用して、このコードを使用して例外をキャッチしていました。しかし、これは Antlr 4 では機能しません。

partial class XParser
{
    public override void ReportError(RecognitionException e)
    {
        base.ReportError(e);
        Console.WriteLine("Error in Parser at line " + ":" + e.OffendingToken.Column + e.OffendingToken.Line + e.Message);
    }
}

これが表示されるエラーです

'Parser.ReportError(Antlr4.Runtime.RecognitionException)': no suitable method found to override

Antlr 4 では、入力ストリームで発生するエラーを蓄積する予想される方法は何ですか。ネットでこれを達成する方法を見つけることができませんでした。ガイドラインを教えてください。

編集:

以下のようにXParserを実装しました

partial class XParser : IAntlrErrorListener<IToken>
{
    public void SyntaxError(IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)
    {
        Console.WriteLine("Error in parser at line " + ":" + e.OffendingToken.Column + e.OffendingToken.Line + e.Message);
    }
}

あなたが言ったように、言及されたクラスのいずれかを使用してこのパーサー クラスを拡張できます。しかし、私はこのリスナーを登録できませんでした.メインプログラムでは、引数を として渡すことに混乱していlistenerます. 登録のお手伝いをお願いします。

ご覧のとおり、これらのクラスには、より意味のあるエラー メッセージを生成する機能がありますね。

4

1 に答える 1

12

を実装する必要がありますIAntlrErrorListener<IToken>。上記のようなエラーを報告するだけなら、SyntaxErrorメソッドに集中する必要があります。1 つを拡張したい場合は、いくつかの基本クラスを利用できます。

エラー リスナーは、 を呼び出すことによってパーサー インスタンスにアタッチされますparser.AddErrorListener(listener)

編集:エラーリスナーインターフェースを実装する新しいクラスを作成する必要があります。次に、リスナーをパーサーにアタッチします。パーサー自体は、エラー リスナー インターフェイスを実装しません。

于 2013-08-28T11:18:59.897 に答える