c#-4.0 - 如何在 Antlr4 中的解析器给出的运行时收集错误

标签 c#-4.0 antlr antlr3 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) 将错误监听器附加到解析器实例。 .

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

    关于c#-4.0 - 如何在 Antlr4 中的解析器给出的运行时收集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18484869/

    相关文章:

    model-view-controller - MVC View : Type arguments Html helper DisplayFor cannot be inferred from the usage

    parsing - 帮助解析日志文件 (ANTLR3)

    antlr - Antlr 3.2重写规则

    c# - 如何在 Windows 中使用 C# 检测进程开始和结束?

    c# - c#语言中的事件处理程序

    Silverlight 4 的 ListView 控件?

    java - 允许空白部分 ANTLR4

    antlr - 在 Nemerle 中使用 cs2n 工具

    java - ANTLR打印树

    java - Antlr 3.4.0 生成的解析器的输入不匹配,而不是在解释器中