09.04.2016 Views

Priemioop

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Паттерн Interpreter<br />

а грамматика проста. Для сложных грамматик иерархия классов становится<br />

слишком громоздкой и неуправляемой. В таких случаях лучше применять<br />

генераторы синтаксических анализаторов, поскольку они могут интерпретировать<br />

выражения, не строя абстрактных синтаксических деревьев, что<br />

экономит память, а возможно, и время;<br />

а эффективность не является главным критерием. Наиболее эффективные<br />

интерпретаторы обычно не работают непосредственно с деревьями, а сначала<br />

транслируют их в другую форму. Так, регулярное выражение часто преобразуют<br />

в конечный автомат. Но даже в этом случае сам транслятор можно<br />

реализовать с помощью паттерна интерпретатор.<br />

Структура<br />

Участники<br />

a AbstractExpression (RegularExpression) - абстрактное выражение:<br />

- объявляет абстрактную операцию Interpret, общую для всех узлов в абстрактном<br />

синтаксическом дереве;<br />

a TerminalExpression (LiteralExpression) - терминальное выражение:<br />

- реализует операцию Interpret для терминальных символов грамматики;<br />

- необходим отдельный экземпляр для каждого терминального символа<br />

в предложении;<br />

Q NonterminaIExpression(AlternationExpression,RepetitionExpression,<br />

SequenceExpressions) - нетерминальное выражение:<br />

- по одному такому классу требуется для каждого грамматического правила<br />

R :: = R l<br />

R 2<br />

... R п<br />

;<br />

- хранит переменные экземпляра типа AbstractExpression для каждого<br />

символа от R l<br />

до R п<br />

;<br />

- реализует операцию Interpret для нетерминальных символов грамматики.<br />

Эта операция рекурсивно вызывает себя же для переменных, представляющих<br />

./?,,... /? п<br />

;<br />

р Context - контекст:<br />

- содержит информацию, глобальную по отношению к интерпретатору;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!