Category Archives: Выполнение задач и представление результатов в PHP

Проблемы шаблона Interpreter

Как только вы подготовите основные классы для реализации шаблона Interpreter, то расширить его будет легко. Цена, которую за это приходится платить, — только количество классов, которые нужно создать. Поэтому шаблон Interpreter более применим для относительно небольших языков. А если вам нужен полноценный язык программирования, то лучше поискать для этой цели инструмент от сторонних фирм.

Шаблон Interpreter. Реализация

Наш язык состоит из выражений, вместо которых подставляются некоторые значения. Как видно из таблицы1, даже в таком небольшом языке, как MarkLogic, необходимо отслеживать множество элементов.

Элементы грамматики языка MarkLogic

Описание Имя EBNF Имя класса Пример
Переменная variable VariableExpression $input
Строковый литерал <stringLiteral> LiteralExpression «четыре»
Булево «И» andExpr BooleanftndExpression $input equals ‘ 4 ‘ and $otherequals ’6′
Булево «Или» orExpr BooleanOrExpression $ input equals ‘ 4 ‘ or $other equals  ‘ 6 ‘
Проверка равенства equalsExpr EgualsExpression $input equals  ‘ 4 ‘

Шаблон Interpreter

Компиляторы и интерпретаторы языков программирования пишут на других языках (по крайней мере, так было сначала). Например, РНР написан на языке С. Точно так же, как это ни покажется странным, с помощью РНР можно определить и создать компилятор собственного языка. Конечно, любой язык, который мы создадим, будет работать медленно и окажется в некоторой степени ограниченным.