Antlr4 Testrig работает, но я не получаю вывод - PullRequest
0 голосов
/ 07 ноября 2018

Я новичок в ANTLR4. Я следовал инструкции по установке на github и успешно запустил пример. Таким образом, установка, кажется, в порядке. Затем я скачал файл грамматики, который хочу использовать, запустил antlr4 и скомпилировал результирующие файлы с javac. Затем я попробовал пример, подобный этому:

C:> grun GrammerName tokens examplefile

Это выполняется в течение пары секунд и возвращается, но ответа нет. Я пытался использовать -tree и -ps, но я ничего не получаю ни с одним из них. Если я предоставляю неверное имя файла, то получаю поток сообщений об ошибках «файл не найден», поэтому он что-то делает ... но если я предоставляю файл случайных данных, я также не получаю ответа. Что наводит меня на мысль, что мой файл примера не рассматривается как действительный пример рассматриваемого грамматика. Но почему я не получаю сообщение об ошибке?

По сути, мой вопрос: как мне заставить TestRig предоставить отзыв о файле примера, который я предоставил?

Я пытался читать страницы справочника на сайте antlr.org, но здесь слишком много терминологии, с которой я еще не знаком.

1 Ответ

0 голосов
/ 07 ноября 2018

Если вы указали tokens в качестве имени правила запуска, это скажет grun вообще не вызывать анализатор и только запускать токенизатор. Обычно это полезно только в сочетании с флагом -tokens, который печатает токены. В противном случае вы увидите только возможные ошибки токенизации.

Опции -tree, -ps или -gui отображают результат анализатора. Поэтому, если парсер не выполняется, они вообще ничего не делают.

Если вы хотите увидеть дерево разбора, вам следует заменить tokens на имя правила, которое вы хотите использовать. Если вы хотите увидеть список сгенерированных токенов, вы должны добавить флаг -tokens.

Что наводит меня на мысль, что мой пример файла не рассматривается как действительный пример рассматриваемого грамматика.

На самом деле все наоборот. Если grun обнаружит ошибки, он выведет их на консоль. Таким образом, если нет вывода, grun не обнаружил ошибок (однако при использовании tokens он будет искать только лексические ошибки, а не синтаксические). При вызове grun с допустимым вводом и без флагов, таких как -tree или -tokens, ожидаемым результатом будет отсутствие вывода.

...