diy*_*da_ 6 antlr antlr3 c#-4.0 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是出现的错误
'Parser.ReportError(Antlr4.Runtime.RecognitionException)': no suitable method found to override
Run Code Online (Sandbox Code Playgroud)
在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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所说,我可以使用任何提到的类来扩展此解析器类.但是我无法注册这个监听器,在主程序中我对传递参数感到困惑listener.请帮我注册.
正如我所看到的,这些类能够产生更有意义的错误消息吗?
Sam*_*ell 10
你需要实施IAntlrErrorListener<IToken>.如果您想要的只是报告上面的错误,那么您应该专注于该SyntaxError方法.如果要扩展一个基类,可以使用几个基类.
错误侦听器通过调用附加到解析器实例parser.AddErrorListener(listener).
编辑:您需要创建一个实现错误侦听器接口的新类.然后,将侦听器附加到解析器.解析器本身不会实现错误侦听器接口.
| 归档时间: |
|
| 查看次数: |
3935 次 |
| 最近记录: |