2013-06-24 1 views
0

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

Например, предположим, что у меня есть следующий AST (From this question):

enter image description here

Если я хочу appened FUNDEF Идентификаторы всем своим идентификаторами VARDECL, мой подход, чтобы сделать обход дерева, чтобы найти все VARDECL внутри BLOCK и добавьте нового ребенка с (FUNDEF id + old_name) и удалите старый.

Является ли это правильным подходом или каким-то образом шаблон посетителя работает лучше всего? Если шаблон посетителя, каков будет пример кода в этом конкретном случае?

Заранее благодарен!

ответ

1

Сомневаюсь, что шаблон посетителя поможет здесь. Он используется, когда у вас есть структура данных и переносите это на каждый узел для изменений. Типичный случай для этого, как описано в «Head First Design Patterns» от Freeman & Freeman заказывает кофе. Это ваш объект, который посещает каждого композитора для получения дополнительной информации (молока, сахара).

Ваше первоначальное представление об использовании дерева для модификации АСТ, вероятно, является наилучшим вариантом.