Почему сгенерированный ANTLR парсер не имеет функций разбора / запуска / начала? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь сгенерировать парсер с ANTLR для минимальной c грамматики логики первого порядка c, которую можно найти в исходном коде ANTLR: https://github.com/antlr/grammars-v4/blob/master/fol/fol.g4

Странно то, что сгенерированный Parser не имеет методов parse, begin, start, которые можно увидеть в каждом уроке. Слушатель также генерируется, но мне интересно получить дерево разбора (для последующей манипуляции) и, кроме того, во многих руководствах, в которых упоминаются слушатели, в любом случае используется одна из трех упомянутых функций. Что пошло не так? Существуют ли варианты генерации синтаксического анализатора?

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

Я использую antlr 4.8.

1 Ответ

1 голос
/ 30 марта 2020

Сгенерированный класс синтаксического анализатора будет иметь методы с теми же именами, что и правила, которые вы определяете в своей грамматике. Поэтому, если в вашей грамматике есть правило с именем foobar, и вы хотите проанализировать входные данные в соответствии с этим правилом, вы должны позвонить parser.foobar(), чтобы сделать это.

Если код в вашем руководстве вызывает метод с именем parse, begin или start, тогда грамматика в этом учебном пособии почти наверняка определяет правило с таким именем.

В связанной грамматике основное правило называется condition, так что метод, который вы должны вызывать.

...