为什么Antrl4 ErrorListener没有触发SyntaxError方法?

时间:2018-05-13 06:48:58

标签: c# antlr4

我在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,但没有运气。

我错过了什么?

0 个答案:

没有答案