Skip to content

Interpreter

Pandas edited this page Jun 19, 2017 · 1 revision

Назначение

Для заданного языка определяет представление его грамматики, а также интерпретатор предложений этого языка.

Применимость

Используйте паттерн интерпретатор, когда есть язык для интерпретации, предложения которого можно представить в виде абстрактных синтаксических деревьев. Лучше всего этот паттерн работает, когда:

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

Структура

Imgur

Участники

  • AbstractExpression (RegularExpression) – абстрактное выражение: – объявляет абстрактную операцию Interpret, общую для всех узлов в абстрактном синтаксическом дереве;
  • TerminalExpression (LiteralExpression) – терминальное выражение: – реализует операцию Interpret для терминальных символов грамматики; – необходим отдельный экземпляр для каждого терминального символа в предложении;
  • NonterminalExpression(AlternationExpression,RepetitionExpression, SequenceExpressions) – нетерминальное выражение: – по одному такому классу требуется для каждого грамматического правила R::=R1 R2 ...Rn; – хранит переменные экземпляра типа AbstractExpression для каждого символа от R1 до Rn; – реализует операцию Interpret для нетерминальных символов грамматики. Эта операция рекурсивно вызывает себя же для переменных, представляющих R1, ... Rn;
  • Context – контекст: – содержит информацию, глобальную по отношению к интерпретатору;
  • Client – клиент: – строит (или получает в готовом виде) абстрактное синтаксическое дерево, представляющее отдельное предложение на языке с данной грамматикой. Дерево составлено из экземпляров классов NonterminalExpression и TerminalExpression; – вызывает операцию Interpret.

Отношения

  • клиент строит(или получает в готовом виде)предложение в виде абстрактного синтаксического дерева, в узлах которого находятся объекты классов NonterminalExpression и TerminalExpression. Затем клиент инициализирует контекст и вызывает операцию Interpret;
  • в каждом узле вида NonterminalExpression через операции Interpret определяется операция Interpret для каждого подвыражения. Для класса TerminalExpression операция Interpret определяет базу рекурсии;
  • операции Interpret в каждом узле используют контекст для сохранения и доступа к состоянию интерпретатора.

Результаты

У паттерна интерпретатор есть следующие достоинства и недостатки:

  • грамматику легко изменять и расширять.
  • простая реализация грамматики.
  • сложные грамматики трудно сопровождать.
  • добавление новых способов интерпретации выражений.

Clone this wiki locally