- •2. Основы компиляции.
- •2.1. Введение.
- •2.2. Информационные таблицы.
- •2.3. Сканер
- •2.4. Синтаксический и семантический анализаторы
- •2.5. Внутреннее представление исходной программы
- •2.6. Подготовка к генерации команд
- •2.7. Генерация команд
- •2.8. Метод операторного предшествования
- •2.9. Рекурсивный спуск
- •2.10. Промежуточная форма представления программы.
- •2.10.1. Польская запись.
- •2.10.2. Метод четверок.
2.10. Промежуточная форма представления программы.
2.10.1. Польская запись.
Для представления арифметических и логических выражений часто используется польская запись, которая просто и точно указывает порядок выполнения операций. Кроме того, она не требует скобок. В этой записи, впервые примененной польским логиком Я. Лукашевичем, операторы следуют непосредственно за операндами. Поэтому ее иногда называют постфиксной записью. Классическая форма записи, как мы обычно пишем, называется инфиксной.
A*B --> AB*
A*B+C-->AB*C+ A*(B+C/D)-->ABCD/+* A*B+C*D-->AB*CD*+
Правила представления в польской записи: 1) Идентификаторы следуют в том же порядке, что и в инфиксной записи 2) Операторы следуют в том же порядке, в каком они должны вычисляться(слева направо) 3) Операторы располагаются непосредственно за своими операндами.
Перевод из постфиксную запись осуществляется при помощи стека.
2.10.2. Метод четверок.
Каждая четверка записывается в виде
операция, op1, op2, результат,
где операция - это выполняемая объектным кодом функция
op1, op2 - операнды этой операции
Например, (-a+b)*(c+d) будет соответствовать такой последовательности четверок
- a, 1
+ 1, b 2
+ c, d 3
* 2, 3, 4
Из сформированных четверок нетрудно сгенерировать машинный код.
Для примера можно посмотреть программу простейшего интерпретатора Паскаля - подобного языка, который может реализовать только арифметические операции и оператор Case, при чем все числа находятся в шестнадцатиричной системе счисления.