ANTLR AST и шаблон посетителей

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

Например, предположим, что у меня есть следующий AST (Из этого вопроса):

введите здесь описание изображения

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

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

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


person Andy M    schedule 24.06.2013    source источник


Ответы (1)


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

Ваша первоначальная идея использовать обход дерева для модификации AST, вероятно, является лучшим вариантом, который у вас есть.

person Mike Lischke    schedule 25.06.2013