Читайте также: |
|
Используйте паттерн интерпретатор, когда есть язык для интерпретации, предложения которого можно представить в виде абстрактных синтаксических деревьев. Лучше всего этот паттерн работает, когда:
Паттерн Interpreter
а грамматика проста. Для сложных грамматик иерархия классов становится слишком громоздкой и неуправляемой. В таких случаях лучше применять генераторы синтаксических анализаторов, поскольку они могут интерпретировать выражения, не строя абстрактных синтаксических деревьев, что экономит память, а возможно, и время;
а эффективность не является главным критерием. Наиболее эффективные интерпретаторы обычно не работают непосредственно с деревьями, а сначала транслируют их в другую форму. Так, регулярное выражение часто преобразуют в конечный автомат. Но даже в этом случае сам транслятор можно реализовать с помощью паттерна интерпретатор.
Структура |
Участники
a AbstractExpression (RegularExpression) - абстрактное выражение:
- объявляет абстрактную операцию Interpret, общую для всех узлов в аб
страктном синтаксическом дереве;
a TerminalExpression (LiteralExpression) - терминальное выражение:
- реализует операцию Interpret для терминальных символов грамматики;
- необходим отдельный экземпляр для каждого терминального символа
в предложении;
Q NonterminaIExpression(AlternationExpression,RepetitionExpression, SequenceExpressions) - нетерминальное выражение:
- по одному такому классу требуется для каждого грамматического прави
ла R:: = Rl R2... Rп;
- хранит переменные экземпляра типа AbstractExpression для каждо
го символа от Rl до Rп;
- реализует операцию Interpret для нетерминальных символов грамма
тики. Эта операция рекурсивно вызывает себя же для переменных, пред
ставляющих./?,,... /?п;
р Context - контекст:
- содержит информацию, глобальную по отношению к интерпретатору;
Дата добавления: 2015-09-11; просмотров: 69 | Поможем написать вашу работу | Нарушение авторских прав |