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

Общая структура решения.

 

 

AbstractExpression – абстрактное выражение: объявляет абстрактную операцию Interpret, общую для всех узлов в абстрактном синтаксическом дереве.

TerminalExpression – терминальное выражение: реализует операцию Interpret для терминальных символов грамматики;  необходим отдельный экземпляр этого класса для каждого терминального символа в предложении.

NonterminalExpression – нетерминальное выражение: по одному такому классу требуется для каждого грамматического правила R::=R1R2...Rn; хранит переменные экземпляра типа AbstractExpression для каждого символа от R1 до Rn; реализует операцию Interpret для нетерминальных символов грамматики. Эта операция вызывает операцию Interpret для переменных, представляющих R1, ..., Rn.

Context – контекст: содержит информацию, глобальную по отношению к интерпретатору.

Client – клиент: строит или получает в готовом виде абстрактное синтаксическое дерево, представляющее отдельное предложение на языке с данной грамматикой.

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

В каждом узле вида NonterminalExpression через операцию Interpret этого узла вызывается операция Interpret для каждого подвыражения. Для класса TerminalExpression операция Interpret определяет базу рекурсии.

Операции Interpret в каждом узле используют контекст для сохранения и доступа к состоянию интерпретатора.