-
Notifications
You must be signed in to change notification settings - Fork 3
Interpreter
Pandas edited this page Jun 19, 2017
·
1 revision
Для заданного языка определяет представление его грамматики, а также интерпретатор предложений этого языка.
Используйте паттерн интерпретатор, когда есть язык для интерпретации, предложения которого можно представить в виде абстрактных синтаксических деревьев. Лучше всего этот паттерн работает, когда:
- грамматика проста. Для сложных грамматик иерархия классов становится слишком громоздкой и неуправляемой. В таких случаях лучше применять генераторы синтаксических анализаторов, поскольку они могут интерпре тировать выражения, не строя абстрактных синтаксических деревьев, что экономит память, а возможно, и время;
- эффективность не является главным критерием. Наиболее эффективные интерпретаторы обычно не работают непосредственно с деревьями, а снача ла транслируют их в другую форму. Так, регулярное выражение часто пре образуют в конечный автомат. Но даже в этом случае сам транслятор мож но реализовать с помощью паттерна интерпретатор.
- 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 в каждом узле используют контекст для сохранения и доступа к состоянию интерпретатора.
У паттерна интерпретатор есть следующие достоинства и недостатки:
- грамматику легко изменять и расширять.
- простая реализация грамматики.
- сложные грамматики трудно сопровождать.
- добавление новых способов интерпретации выражений.
