
Лекция 11. Постфиксная запись.ppt
- Количество слайдов: 15
Языки программирования и методы трансляции Лекция 11. Промежуточные формы представления программ. Постфиксная запись
Общая структура языкового процессора Входная очередь Промежуточная форма Дерево разбора Обратная польская запись Лексический анализатор Синтаксический анализатор Таблицы символов Синтаксический транслятор Семантический транслятор Тетрадная форма Блоки оптимизации и генерации объектного кода Объектный код Интерпретатор
Преимущества использования промежуточной формы • Перевод в промежуточную форму позволяет не учитывать особенности целевого языка, на который делается перевод • Упрощается перенос на другие целевые машины (требуется реализовать только перевод с промежуточной формы на язык новой целевой машины) • К программе в промежуточной форме можно применять алгоритмы машинно-независимой оптимизации
Польская запись Предпосылки: • Выражение может быть описано только рекурсивной грамматикой, т. к. включает парные скобки, следовательно – рекурсивно. • Выражение содержит операции, имеющие различной число операндов и выполняющиеся в определенном порядке с учетом приоритетов. • Выражение может содержать операнды различного типа, что требует дополнительного анализа при переводе.
Префиксная форма (Я. Лукашевич) 1. Всякая переменная или константа есть выражение. 2. Если - знак унарной (одноместной) операции, а - выражение, то является выражением. 3. Если - знак бинарной (двуместной) операции, а и - выражения, то является выражением. 4. Если - знак n-местной операции, 1, 2, …, n – выражения, то 1 2 … n является выражением. 5. Других выражений не существует.
Пример Выражение в обычной форме: * (A+B)*C**(D/(E+F)) * + A B ** C / D + E F ** + Выражение в префиксной форме: A B / C D + E F
Постфиксная форма (обратная польская запись) 1. Всякая переменная или константа есть выражение. 2. Если - знак унарной (одноместной) операции, а - выражение, то является выражением. 3. Если - знак бинарной (двуместной) операции, а и - выражения, то является выражением. 4. Если - знак n-местной операции, 1, 2, …, n – выражения, то 1 2 … n является выражением. 5. Других выражений не существует.
Пример Символ Тип Стек A Операнд A B Операнд BA + Оператор t=B+A C Операнд Ct D Операнд DCt E Операнд EDCt F Операнд FEDCt + Оператор s=F+E D C t / Оператор u=D/s C t ** Оператор v=C**u t * Оператор w=t*v Выражение в обычной форме: (A+B)*C**(D/(E+F)) Выражение в постфиксной форме: A B + C D E F + / ** *
Свойства обратной польской записи 1. Действия, записанные в ОПЗ, можно выполнять (или программировать) в процессе просмотра слева направо без возвратов. 2. Операнды в ОПЗ расположены в том же порядке, что и в исходном (инфиксном) выражении. 3. Для любого правильного выражения из n элементов сумма весов всех элементов равна единице, а сумма весов любого числа элементов, начиная с первого, положительна. Вес элемента ОПЗ:
Элементы массивов. Операция вычисления адреса Выражение: (a+b[I, j+1])*c+d + Обратная польская запись: * a b i j 1 + 3 SUBS + c * d + 3 SUBS – 3 -местная операция вычисления адреса компоненты двумерного массива. Операнды (от вершины стека): второй индекс первый индекс массив d + c 3 SUBS a b + i j 1
Вызов функций Выражение: a+f(i, j+1) + Обратная польская запись: a f i j 1 + 3 CALL – 3 -местная операция вызова функции с двумя параметрами. Операнды (от вершины стека): второй параметр первый параметр указатель функции a 3 CALL f + i j 1
Условные выражения x+(a>b? 1: 2) ALGOL-60: x+(if a>b then 1 else 2) С++: Дополнительные операции: ОПЗ: A m BF – условный переход к метке m, если значение А равно false m BRL – безусловный переход к метке m m DFL – определение метки x a b > m 1 BF 1 m 2 BRL m 1 DFL 2 m 2 DFL + + x > a BF b m 1 1 BRL DFL m 2 m 1 2 DFL m 2
Оператор присваивания A[j, k+1]: =sqrt(m[ j ])/2 : = / 3 SUBS A j 2 CALL + k 1 2 2 SUBS sqrt m j A j k 1 + 3 SUBS sqrt m j 2 SUBS 2 CALL 2 / : =
Оператор цикла for i: =<выражение_1> to <выражение_2> do <оператор> Равносильная форма: i: =<выражение_1>; M 1: if i <= <выражение_2> then begin <оператор>; i: =i+1; goto M 1 Обратная польская запись: endif; i <выражение_1> : = M 4: M 1 DFL i <выражение_2> <= M 4 BF <оператор> i i 1 + : = M 1 BRL M 4 DFL
Основные операции в ОПЗ Код Операнды Семантика n SUBS A, i 1, i 2, …, in-1 Вычисление адреса элемента массива А n CALL F, x 1, x 2, …, xn-1 Вызов функции F с параметрами xi : = a, b Присваивание b: =a DFL M Определение метки М BRL M Безусловный переход на метку M BF r, M Условный переход на метку M при r=false BLBEG Начало блока BLEND Конец блока BRET M 1, M 2, A Безусловный переход на M 1 с возвратом по команде RET на метку M 2; A – вспомогательная переменная RET A Возврат на метку, записанную в А