我在Antlr4上有一个语法。 我正在尝试实现自定义错误侦听器(以获取UI控件的所有语法错误)。
我遵循指南实施:
class ReaderErrorListener : IAntlrErrorListener<IToken>
{
public void SyntaxError(IRecognizer recognizer, IToken offendingSymbol, int line, int charPositionInLine, string msg, RecognitionException e)
{
System.Diagnostics.Debug.WriteLine("Invalid Expressions: line {0}:{1} - {2}", line, charPositionInLine, msg);
}
}
并在我的解析器上注册了监听器:
string str = "writqwee(path.subnode.field, 0xa5)";
var lexer = new ReaderLexer(new AntlrInputStream(str));
var tokens = new CommonTokenStream(lexer);
var parser = new ReaderParser(tokens);
parser.RemoveErrorListeners();
parser.AddErrorListener(new ReaderErrorListener());
var tree = parser.root();
我的解析器的有效输入是write(path.subnode.field, 0xa5)
所以上面的输入应该是语法错误。
tree
变量为空(如预期的那样),但永远不会调用SyntaxError
方法。
在我的语法中,&#34;写&#34;单词被识别为词法分析器规则......
TWO_ARG_KEYWORD :
'write'
;
我已经审核并关注How to collect errors during run time given by a parser in Antlr4,但没有运气。
我错过了什么?