Систематический способ создания грамматики дерева ANTLR?

У меня есть немного большой файл грамматики синтаксического анализатора ANTLR и я хочу создать для него древовидную грамматику. Но, насколько я знаю, эта работа по созданию древовидной грамматики не может быть выполнена автоматически, т.е. я должен сгенерировать ее вручную, скопировав грамматику синтаксического анализатора, удалив некоторый ненужный код и т. Д. Я хочу знать, существует ли систематический способ генерировать файл грамматики дерева из файла грамматики синтаксического анализатора.

PS Я прочитал статью, которая настаивает на том, что " ручная прогулка по дереву лучше, чем грамматика деревьев". Это достоверная информация? Если так, то было бы лучше для меня сделать обходчик дерева вручную, чем писать файл грамматики дерева ANTLR? И затем, как мне сделать ручной обходчик дерева с моим файлом грамматики синтаксического анализатора ANTLR (он создает AST, используя правила перезаписи)?

Заранее спасибо.

1 ответ

Решение

небо написал:

Я хочу знать, существует ли систематический способ создания файла грамматики дерева из файла грамматики синтаксического анализатора

Вы уже описали систематический способ сделать это: скопируйте правила синтаксического анализатора / производства в древовидную грамматику и оставьте в ней только правила перезаписи. Это, вероятно, будет обрабатывать большую часть ваших правил, но с другими правилами синтаксического анализатора (с использованием встроенных правил перезаписи AST) это может выглядеть немного иначе. Из-за этого не существует автоматического способа генерировать древовидную грамматику.

небо написал:

PS Я прочитал статью, которая настаивает на том, что "ручная прогулка по дереву лучше, чем грамматика деревьев". Это достоверная информация?

Да, это. Обратите внимание, что Теренс Парр (создатель ANTLR) опубликовал статью в самой вики ANTLR, так что автор этой статьи (Энди Трипп) поднимает действительные баллы.

небо написал:

Если так, то было бы лучше для меня сделать обходчик дерева вручную, чем писать файл грамматики дерева ANTLR?

Как отметил в своем заключении Энди: "Решение о том, следует ли использовать" древовидную грамматику "в переводе или просто" делать это вручную ", является делом вкуса"., Итак, если вы думаете, что написание древовидной грамматики - это слишком хлопотно, идите ручным путем. Это зависит от вас: нет лучшего пути здесь.

небо написал:

И затем, как мне сделать ручной обходчик дерева с моим файлом грамматики синтаксического анализатора ANTLR (он создает AST, используя правила перезаписи)?

Ваш парсер создаст AST, который по умолчанию имеет тип CommonTree (API-документ). Вы можете использовать это дерево, чтобы получить дочерние элементы, родительский элемент, тип токена и т. Д. - все, что вам нужно для обхода дерева вручную.

РЕДАКТИРОВАТЬ

Обратите внимание, что в следующей версии ANTLR (версия 4) (скорее всего) будет возможно автоматически сгенерировать обходчик дерева с учетом грамматики комбинированного или синтаксического анализатора.

Увидеть:

Другие вопросы по тегам