4.1. Интерпретация ОПЗ |
||
В случае, если речь идет об интерпретировании, то применяют алгоритм интерпретации программы для соответствующего второго внутреннего представления. В качестве примера рассмотрем задачу интерпретации ОПЗ. Интерпретация арифметических выражений в ОПЗ. Алгоритм интерпретации арифметических выражений в постфиксной форме достаточно прост. Строка анализируется слева направо. Если текущий символ – операнд, то он помещается в стек, если текущий символ – операция, то из стека извлекается количество операндов в соответствие с арностью операции, после чего операция выполняется и результат помещается в стек. По окончанию анализа в стеке будет результат выполнения выражения. Пример. (5+3)*7-2*6/3+2*4 5 3 + 7 * 2 6 * 3 / - 2 4 * + Содержимое стека: 5 3 8 7 56 2 6 56 12 3 56 4 52 2 4 52 8 60 Легко видеть, что алгоритм обладает линейно относительно длины цепочки трудоемкостью. Именно, наличие такого алгоритма и делает ОПЗ универсальной формой представления алгоритмических конструкций, но задача состоит, чтобы приспособить данный подход и к расширенному понятию ОПЗ.
Переменные, константы и присваивание Очевидно, что операцию присваивания легко вписать в приведенный выше алгоритм, если будет разработана логика выполнения данной операции. Для этого, вводим таблицы значений констант различных типов (инициализируются из файла значений констант, полученных на этапе ЛА), а также таблицы значение идентификаторов различных типов, точнее речь идет о выделяемых для хранения констант и переменных областях памяти. Информация о типах должна быть установлена на этапе КА и является значимой, так как именно типом определяется объем памяти, требуемый для хранения значения переменной, а также способы интерпретации хранимых значений. В этом случае, выполнении е присваивания фактически означает копирование в соответствующую область памяти значение выражения. При этом никакого результата в стек не вносится Пример. A:=3+4; A 3 4 + @ Содержимое стека: A 3 4 A 7 пусто В результате выполнения последней операции по соответствующему адресу в соответствующей области памяти будет помещено значение 7.
|
||