Antlr4中的解析器给出了如何在运行时收集错误



我已从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进行传递感到困惑。请帮我登记。

正如我所看到的,这些类能够生成更有意义的错误消息,不是吗?

您需要实现IAntlrErrorListener<IToken>。如果你只想像上面那样报告错误,那么你应该专注于SyntaxError方法。如果您想扩展一个基类,可以使用几个基类。

  • ConsoleErrorListener
  • BaseErrorListener
  • DiagnosticErrorListener

错误侦听器通过调用parser.AddErrorListener(listener)附加到解析器实例。

编辑:您需要创建一个实现错误侦听器接口的新类。然后将侦听器附加到解析器。解析器本身不会实现错误侦听器接口。

相关内容

  • 没有找到相关文章

最新更新