Является ли шаблон интерпретатора формой абстрактного синтаксического дерева
Я изучаю шаблоны GoF, и пример шаблона интерпретатора из статьи в Википедии привлек мое внимание: http://en.wikipedia.org/wiki/Interpreter_pattern (я специально изучаю фрагмент кода Java). Это выглядит как абстрактное синтаксическое дерево для простого выражения! Так есть ли шаблон интерпретатора для реализации обработки данных в форме AST?
1 ответ
Конструктивно шаблон интерпретатора GoF (и почти никакого другого использования интерпретатора в CS) похож на AST.
Обычно шаблон интерпретатора имеет только одно действие, которое оценивает выражение, представленное AST, тогда как многие реализации AST предоставляют другие средства для обхода дерева. Часто в реализациях OO AST обход сочетает в себе шаблон посетителя и двойную диспетчеризацию. В LISP AST просматривается с помощью операторов списка. Обычно AST ничего не делает, но шаблон интерпретатора GoF имеет некоторое "интерпретирующее" действие, которое оценивает дерево.
Шаблон GoF объединяет в себе и AST, и интерпретатор в одно и то же, что менее гибко, чем более распространенные подходы AST, но иногда это все, что вам нужно.
" Дерево выражений" - это то, что обычно называется как до, так и после того, как GoF записал его с плохо выбранным именем - шаблон является самооценочным деревом, в шаблоне интерпретатора GoF нет интерпретатора.