небо писал:
Я хочу знать, существует ли систематический способ создания файла грамматики дерева из файла грамматики синтаксического анализатора
Вы уже описали систематический способ сделать это: скопируйте правила синтаксического анализа / производства в древовидной грамматике и оставьте в ней только правила перезаписи. Это, вероятно, будет обрабатывать большую часть ваших правил, но с другими правилами синтаксического анализатора (с использованием встроенных правил перезаписи AST) это может выглядеть немного иначе. Из-за этого не существует автоматического способа генерировать древовидную грамматику.
небо писал:
P.S. Я прочитал статью, в которой настаивает, что «Ручная прогулка по дереву лучше, чем грамматика деревьев» . Это достоверная информация?
Да, это так. Обратите внимание, что Теренс Парр (создатель ANTLR) опубликовал статью в самой вики ANTLR, так что автор этой статьи (Энди Трипп) поднимает действительные баллы.
небо писал:
Если это так, было бы лучше для меня сделать ручной обходчик дерева, чем писать файл грамматики дерева ANTLR?
Как Энди упомянул в своем заключении: «Решение о том, использовать ли« древовидную грамматику »для перевода вместо простого« ручного выполнения », зависит от вкуса». . Итак, если вы думаете, что написание древовидной грамматики - это слишком хлопотно, идите ручным путем. Это зависит от вас: здесь нет лучшего пути.
небо писал:
А потом, как мне сделать ручной обходчик дерева с моим файлом грамматики синтаксического анализатора ANTLR (он создает AST с использованием правил перезаписи)?
Ваш анализатор создаст AST, который по умолчанию имеет тип CommonTree
(API-doc) . Вы можете использовать это дерево, чтобы получить дочерние элементы, родительский элемент, тип токена и т. Д. - все, что вам нужно для обхода дерева вручную.
EDIT
Обратите внимание, что в следующей версии ANTLR (версия 4) (скорее всего) будет возможно автоматически сгенерировать обходчик дерева с учетом грамматики комбинированного или синтаксического анализатора.
См: