Antlr 3からAntlr 4にアップグレードしました。このコードを使用して、このコードを使用して例外をキャッチしていました。しかし、これはANTLR 4.実行時にAntlr4のパーサによって与えられたエラーを収集する方法
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);
}
}
のために働いていませんこれは、入力ストリームで発生したエラーを蓄積の予想方法は何かANTLR 4では
'Parser.ReportError(Antlr4.Runtime.RecognitionException)': no suitable method found to override
を表示されるエラーです。私はネット上でこれを達成する方法を見つけることができませんでした。私にいくつかのガイドラインを教えてください。
EDIT:あなたは、私が言及したクラスのいずれかを使用して、このパーサクラスを拡張することができます言ったように私は
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);
}
}
以下のようXParserを実装している
。しかし、私はこのリスナーを登録することができませんでした。メインプログラムでは、引数を渡すことと混同しています。listener
。登録のお手伝いをしてください。
これらのクラスがわかるように、より意味のあるエラーメッセージを生成する能力はありますか?
私の編集を見てください。私はいくつかの混乱と説明をしています。仕事を通して大いに助けてくれてありがとう。それをたくさんありがとう。 –
@Diode投稿を更新しました。 :) –
@ 290Z28ありがとうございます。なぜ私はレクサーに同じことをすることができません。私は別のクラスを作成し、 'IAntlrErrorListener'から実装することによって、パーサのために行ったことを真似しようとしました。レクサーのインスタンスには、メソッドの「AddErrorListener」があります。 –