Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компиляторы.doc
Скачиваний:
100
Добавлен:
04.11.2018
Размер:
5.13 Mб
Скачать

6.1.1. Польская инверсная запись

Вместо традиционного инфиксного представления арифметических и логических выражений в различных вычислителях часто используется польская инверсная запись (ПОЛИЗ), которая просто и точно указывает порядок выполнения операций без использования скобок. В этой записи, впервые примененной польским математиком Я. Лукашевичем, операторы располагаются непосредственно за операндами над которыми они выполняются в порядке их выполнения. Поэтому иногда ПОЛИЗ называют суффиксной, или постфиксной записью. Например, AB записывается как AB, ABC – как ABC, A(BCD) – как ABCD, а ABCD – как ABCD.

В разделах 6.2, 6.4 будут обсуждаться методы перевода инфиксной записи в ПОЛИЗ с использованием синтаксического анализатора и семантических подпрограмм. Пока остановимся на простейших правилах, которые позволяют переводить в ПОЛИЗ вручную:

1). Идентификаторы и константы в ПОЛИЗе следуют в том же порядке, что и в инфиксной записи.

2). Операторы в ПОЛИЗе следуют в том порядке, в каком они должны вычисляться (слева направо).

3). Операторы располагаются непосредственно за своими операндами.

Таким образом, мы могли бы записать следующие синтаксические правила:

операндидентификаторконстантаоперандоперандоператор

оператор

Унарный минус и другие унарные операторы можно представить двумя способами: либо записывать их бинарными операторами, то есть вместо B писать 0B, либо для унарного минуса можно ввести новый специальный символ, например @, и использовать еще одно синтаксическое правило операндоперанд@. Таким образом выражение A(BCD) мы могли бы записать AB@CD.

С равным успехом мы могли бы ввести префиксную запись, где операторы стоят перед операндами. Таким образом, арифметическое выражение, а далее мы покажем, что не только его, но и любую управляющую конструкцию, можно представить в трех формах записи: префиксной, инфиксной (обычная запись, где операторы располагаются между операндами, а круглые скобки позволяют изменять приоритет операций) и постфиксной. Человек традиционно использует инфиксную запись, тогда как для автоматического вычисления выражений самым удобным способом представления является постфиксная запись или ПОЛИЗ. В разделе 6.1.2 будет показано, как проводятся такие вычисления, но прежде пополним ПОЛИЗ новыми операторами.

ПОЛИЗ расширяется достаточно просто. Нужно только придерживаться правила, что за операндами следует соответствующий им оператор. Так присваивание переменнаявыражение в ПОЛИЗе примет вид переменнаявыражение. Например, присваивание АBCD100 запишется в ПОЛИЗе как АBCD100. О специфике вычисления данной бинарной операции будет сказано в разделе 6.1.2.

Индексированную переменную в ПОЛИЗе, а точнее вычисление ее адреса можно представить в виде:

идентификаториндексные выраженияконстанта[ ,

где [ обозначает знак операции вычисления индекса, идентификатор – имя (базовый адрес) индексированной переменной, а константа – количество индексов (мерность массива). Так переменную A[i,j+k] можно представить в виде Аijk+2[ .

Условный оператор