Почему Antrl4 ErrorListener не запускает метод SyntaxError? - PullRequest
0 голосов
/ 13 мая 2018

У меня есть грамматика на Antlr4.Я пытаюсь реализовать пользовательские прослушиватели ошибок (чтобы захватить все синтаксические ошибки в элементе управления пользовательского интерфейса).

Я следовал рекомендациям по реализации:

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 никогда не вызывается.

В моей грамматике слово "запись" идентифицируется как правило лексера ...

TWO_ARG_KEYWORD :   
        'write'
    ;   

Я просмотрел и выполнил Как собирать ошибки во время выполнения, заданные анализатором в Antlr4 , но безуспешно.

Чего мне не хватает?

...