我正在使用 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);
}
}
我的问题是:
- 我走对了吗?
- 如何获取被忽略的文本?