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.