ПОЛИЗ КАК ПРОМЕЖУТОЧНЫЙ ЯЗЫК

АЛГОРИТМ ПЕРЕВОДА НА ПРОМЕЖУТОЧНЫЙ ЯЗЫК

 

Выберем в качестве языка для представления промежуточной программы постфиксную запись (ее часто называют ПОЛИЗ - польская инверсная запись).

Для перевода в ОПЗ обычно применяют метод стека с приоритетами, разработанный известным ученым Е.Дейкстрой для простых выражений. В этом методе операциям и ограничителям, входящим в выражение, ставятся в соответствие целые числа – приоритеты. Для операции приоритете тем выше, чем старше операция. Стек играет роль своеобразного «отстойника» для операции с более низким приоритетом, чем очередная операция. Особая обработка круглых скобок позволяет избавиться от них.

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

1. действия, описываемые в ПОЛИЗ, можно выполнять (или программировать) в процессе ее одностороннего безвозвратного просмотра слева направо, т.к. операнды в ПОЛИЗ всегда предшествуют знаку операции

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

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

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

Например, обычной (инфиксной) записи выражения

a*(b+c)-(d-e)/f

соответствует такая постфиксная запись:

abc+*de-f/-.

Замечание: обратите внимание на то, что в ПОЛИЗе порядок операндов остался таким же, как и в инфиксной записи, учтено старшинство операций, а скобки исчезли.

Теперь необходимо разработать ПОЛИЗ для операторов входного языка. Каждый оператор языка программирования может быть представлен как n-местная операция с семантикой, соответствующей семантике этого оператора.