Странное поведение парсера при попытке пробной грамматики - PullRequest
0 голосов
/ 08 декабря 2009

Я пытаюсь получить представление о antlr3, и я вставил Оценщик выражений в окно ANTLRWorks (последняя версия) и скомпилировал его. Он успешно скомпилирован и запущен, но есть две проблемы:

  • Попытка использовать вход 1+2*4/3; привела к фактическому вводу для синтаксического анализатора, равному 1+2*43.
  • Одна из ошибок, отображаемых в графическом дереве синтаксического анализатора, MissingTokenException(0!=0).

Поскольку я новичок в antlr, кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 08 декабря 2009

Мы часто получаем

MissingTokenException(0!=0)

когда мы совершаем ошибки. Я думаю, это означает, что он не может найти токен, который ищет, и может быть создан с помощью неверного токена. Парсер может иногда «восстанавливаться» в зависимости от грамматики.

Помните также, что LEXER работает до синтаксического анализатора, и вы должны проверить, какие токены действительно передаются синтаксическому анализатору. Отладчик AntlrWorks может быть очень полезен здесь.

1 голос
/ 08 декабря 2009

Пример, на который вы ссылаетесь, не поддерживает деление (просто посмотрите на код, вы заметите, что здесь нет деления:

expr returns [int value]
    :   e=multExpr {$value = $e.value;}
        (   '+' e=multExpr {$value += $e.value;}
        |   '-' e=multExpr {$value -= $e.value;}
        )*
...