[英]Antlr 4 - C#: Raise Custom Events on Parsing Errors
我将Antlr 4和C#用作目标,并且想在发生语法错误时引发一个事件。
我的语法
/*
* Parser Rules
*/
text : term+ EOF
;
term : a1 a2 a3
;
a1: ....
...
...
发生错误时,我希望解析器的行为忽略输入文本,直到找到下一项为止。 引发的事件应获取整个被忽略的文本,错误位置的行和列以及错误消息。
我扩展了基类BaseErrorListener:
public class DictionaryErrorListener : Antlr4.Runtime.BaseErrorListener
{
public event EventHandler<ParsingErrorEventArgs> ParsingErrorOccured;
protected void OnParsingErrorOccured(int line, int column, string errorMessage, string text)
{
EventHandler<ParsingErrorEventArgs> handler = ParsingErrorOccured;
if (handler != null)
{
handler(this, new ParsingErrorEventArgs(line, column, errorMessage, text));
}
}
public override void SyntaxError(Antlr4.Runtime.IRecognizer recognizer, Antlr4.Runtime.IToken offendingSymbol, int line, int charPositionInLine, string msg, Antlr4.Runtime.RecognitionException e)
{
OnParsingErrorOccured(line, charPositionInLine, msg, ignoredText);
}
}
我的问题是:
IAntlrErrorListener
接口用于报告错误(以及与解析器性能有关的某些其他非错误条件)。 IAntlrErrorStrategy
接口负责错误处理/恢复。 该接口的默认实现是DefaultErrorStrategy
。 通常,这是运行时的更高级功能之一。 我已经在Java运行时的DefaultErrorStrategy
的文档中提供了合理的详细程度,但是绝对很难做到。
通常,我不会尝试使用更好的错误处理程序,而是采用不同的语法策略:
如果您以“严格”语法(仅允许使用您的语言的确切语法)开头,那么轻松的过程将包括允许使用其他语法,同时在后解析阶段添加语义错误以解决特定的错误您允许的语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.