Пример из Steven Muchnick. Advanced Compiler Design and Implementation
/ Morgan Kaufmann. 1997.
Операции производятся с регистрами ЭВМ
или непосредственно с памятью с произвольным доступом
Операции производятся с содержимым стека - операнды извлекаются из вершины стека, и на их место помещается результат
Внутренние формы представления: Тетрады и триады
Внутренние формы представления: Польская инверсная запись (постфиксная нотация)
(:=, 0, , s) // s = 0
(:=, 0, , i) // i = 0
L1: (<, i, 10, t0) // t0 = i<10
(JZ, t0, L2,) // if (t0 == 0) goto L2
(+, ar, i, t1) // t1 = ar+i
(**, t1, , t2) // t2=*t1, разыменование
(+, s, t2, s) // s=s+t2
(+, i, 1, i) // i=i+1
(JMP, L1, ,) // goto L1
L2:
Основной недостаток тетрад - большое количество временных переменных
Тетрада
Исходный код
Последовательность тетрад
Триада
(<оператор>,<операнд1>,<операнд2>)
Исходный код
a*b+c*d
Последовательность триад
1: (*, a, b)
2: (*, c, d)
3: (+,(1),(2))
Достоинства тетрад и триад - простота оптимизации внутренней формы представления программы
Постфиксная (a b +)
2 3 + 7 * 4 2 / +
5 7 * 4 2 / +
35 4 2 / +
35 2 +
37
Вычисление выражения вручную
Исходное выражение:
(2+3)*7+4/2
Польская инверсная запись:
2 3 + 7 * 4 2 / +
Пример записи арифметических выражений в ПОЛИЗе
Пример записи фрагмента программы в ПОЛИЗе
Операция обращения по индексу
Для одномерных массивов: <имя_массива> <индекс> [
Для многомерных массивов : <имя_массива><индекс1>…<индексN> N [
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть