Обзор темы [Шаблоны проектирования]

Затем: МотивацияНазначение

Пусть задан некоторый язык, интерпретатор определяет представление грамматики и интерпретатора для работы с заданным языком.

Затем: СтруктураМотивация

Если специфический вид задачи возникает достаточно часто, возможно стоит представлять элементы задачи как предложения на простом языке языке. Затем можно определить интерпретатор, который решает задачи, интерпретируя эти предложения языка.

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

Предположим, что следующая грамматика определяет регулярные выражения:

      
expression ::= literal | alternation | sequence | repetition |
                   '(' expression ')'
    alternation ::= expression  '|' expression
    sequence ::= expression '&' expression
    repetition ::= expression '*'
    literal ::= 'a' | 'b' | 'c' | ... { 'a' | 'b' | 'c' | ... }*
 

Символ expression - начальный символ, а literal – терминальный символ, определяющий простые слова.

Шаблон Интерпретатора использует класс, чтобы представить каждое правило грамматики. Символы справой стороны правила – переменные, поля класса. Данная грамматика представляется пятью классами: абстрактный класс RegularExpression и его четыре подкласса LiteralExpression, AlternationExpression, SequenceExpression и RepetitionExpression. Последние три класса определяют переменные, обрабатывающие подвыражения.

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

Представляет регулярное выражение

      
raining & (dogs | cats) *
 

Мы можем создавать интерпретатор для этих регулярных выражений определяя операциею Interpret для каждого подкласса RegularExpression. Interpret использует контекст в качестве параметра, в котором интерпретируется выражение. Контекст содержит строку ввода и информацию о том, какая часть уже была обработана. Каждый подкласс RegularExpression определяет Interpret, чтобы обработать следующую часть входной строки, основанный на текущем контексте. Например,

И так далее.

 

Затем: Составные частиСтруктура

Составные части