Разработка компиляторов. Ишакова Е.Н. - 29 стр.

UptoLike

Составители: 

29
2.6 Генерация внутреннего представления программы
Результатом СиА должно быть некоторое внутреннее представление ис-
ходной цепочки лексем, которое отражает ее синтаксическую структуру. Про-
грамма в таком виде может либо транслироваться в объектный код, либо ин-
терпретироваться.
Выделяют следующие общепринятые способы внутреннего представле-
ния программы:
1)
постфиксная запись;
2)
многоадресный код с явно именуемым результатом (тетрады);
3)
многоадресный код с неявно именуемым результатом (триады);
4)
синтаксические деревья;
5)
машинные команды или ассемблерный код.
В качестве языка для представления промежуточной программы выберем
постфиксную записьПОЛИЗ (польская инверсная запись).
Перевод в ПОЛИЗ выражений
В ПОЛИЗе операнды записаны слева направо в порядке использования.
Знаки операций следуют таким образом, что знаку операции непосредственно
предшествуют его операнды.
Пример 2.13. Для выражения в обычной (инфиксной записи)
a*(b+c)-(d-e)/f ПОЛИЗ будет иметь вид: abc+*de-f/-.
Справедливы следующие формальные определения.
Определение 2.5. Если Е является единственным операндом, то ПОЛИЗ
выражения Еэто этот операнд.
Определение 2.6. ПОЛИЗ выражения Е
1
θ
Е
2
, где
θ
- знак бинарной опе-
рации, Е
1
и Е
2
операнды для θ, является запись
θ
21
EE , где
21
, EE - ПОЛИЗ
выражений Е
1
и Е
2
соответственно.
Определение 2.7. ПОЛИЗ выражения
θ
Е, где
θ
- знак унарной операции,
а Еоперанд
θ
, есть запись
θ
1
E , где
E
- ПОЛИЗ выражения Е.
Определение 2.8. ПОЛИЗ выражения (Е) есть ПОЛИЗ выражения Е.
Перевод в ПОЛИЗ операторов
Каждый оператор языка программирования может быть представлен как
n-местная операция с семантикой, соответствующей семантике оператора.
Оператор присваивания I:=E в ПОЛИЗе записывается:
I
E:=,
где «:=» - двуместная операция,
I, Eоперанды операции присваивания;
Iозначает, что операндом операции «:=» является адрес переменной
I, а не ее значение.
     2.6 Генерация внутреннего представления программы

      Результатом СиА должно быть некоторое внутреннее представление ис-
ходной цепочки лексем, которое отражает ее синтаксическую структуру. Про-
грамма в таком виде может либо транслироваться в объектный код, либо ин-
терпретироваться.
      Выделяют следующие общепринятые способы внутреннего представле-
ния программы:
      1) постфиксная запись;
      2) многоадресный код с явно именуемым результатом (тетрады);
      3) многоадресный код с неявно именуемым результатом (триады);
      4) синтаксические деревья;
      5) машинные команды или ассемблерный код.
      В качестве языка для представления промежуточной программы выберем
постфиксную запись – ПОЛИЗ (польская инверсная запись).

                        Перевод в ПОЛИЗ выражений
     В ПОЛИЗе операнды записаны слева направо в порядке использования.
Знаки операций следуют таким образом, что знаку операции непосредственно
предшествуют его операнды.
     Пример 2.13. Для выражения в обычной (инфиксной записи)
a*(b+c)-(d-e)/f ПОЛИЗ будет иметь вид: abc+*de-f/-.
     Справедливы следующие формальные определения.
     Определение 2.5. Если Е является единственным операндом, то ПОЛИЗ
выражения Е – это этот операнд.
     Определение 2.6. ПОЛИЗ выражения Е1 θ Е2, где θ - знак бинарной опе-
рации, Е и Е – операнды для θ, является запись E ′ E ′θ , где E ′ , E ′ - ПОЛИЗ
        1    2                                     1 2         1   2
выражений Е1 и Е2 соответственно.
       Определение 2.7. ПОЛИЗ выражения θЕ, где θ - знак унарной операции,
а Е – операнд θ, есть запись E ′θ , где E ′ - ПОЛИЗ выражения Е.
                             1
     Определение 2.8. ПОЛИЗ выражения (Е) есть ПОЛИЗ выражения Е.
                        Перевод в ПОЛИЗ операторов
     Каждый оператор языка программирования может быть представлен как
n-местная операция с семантикой, соответствующей семантике оператора.
     Оператор присваивания I:=E в ПОЛИЗе записывается:

            IE:=,

     где «:=» - двуместная операция,
         I, E – операнды операции присваивания;
         I – означает, что операндом операции «:=» является адрес переменной
            I, а не ее значение.

                                                                             29