1

Я изучаю шаблоны GoF и пример шаблона интерпретатора из статьи в Википедии, привлек мое внимание: http://en.wikipedia.org/wiki/Interpreter_pattern (Я специально изучаю фрагмент кода Java). Это похоже на абстрактное синтаксическое дерево для простого выражения! Итак, шаблон интерпретатора о внедрении обработки данных в форме АСТ?Является интерпретатором шаблона формы абстрактного дерева синтаксиса

+0

Похож на это. Еще раз: «Давайте изобретать новый словарь для описания известных идей». Устные переводчики существуют с начала 1950-х годов. –

+0

@IraBaxter всей цели книги GoF было каталогизировать известные идеи и дать им новые имена –

ответ

0

Структурно шаблон интерпретатора GoF (и почти никакого другого использования интерпретатора в CS) аналогичен AST.

У шаблона интерпретатора обычно есть только одно действие, которое оценивает выражение, представленное АСТ, тогда как многие реализации АСТ предоставляют другие средства для перемещения по дереву. Часто в реализации OO AST обход объединяет шаблон посетителя и двойную отправку. В LISP AST проходит через операторы списка. Обычно AST ничего не делает, но шаблон интерпретатора GoF имеет некоторое «интерпретируемое» действие, которое оценивает дерево.

Модель GoF сочетает в себе комбайны и AST и переводчик в одно и то же, что менее гибко, чем более распространенные подходы AST, но иногда это все, что вам нужно.

«Expression Tree» - это то, что он обычно называется, как до, так и после того, как GoF записал его с плохо выбранным именем - шаблон является самооцензирующим деревом, в интерпретаторе GoF интерпретатора нет интерпретатора.

+0

Отлично. Возьмите известные идеи, сузите их, чтобы быть менее эффективными, чем оригинал, а затем дать результат другим именем, чем оригинал. Это прогресс? –

+0

Итак, в основном идея состоит в том, чтобы определить простой язык, специфичный для домена? Любой хороший пример правильного применения шаблона интерпретатора? – ig12115

+0

Я использовал деревья выражений несколько раз для оценки выражений, где полномасштабный интерпретатор не требуется. Им требуется интерфейс синтаксического анализатора/свободного интерфейса, чтобы создать их, чтобы стать внешним/внутренним DSL. Мне не нравится называть их «шаблоном интерпретатора». –

Смежные вопросы