Формальные языки, грамматики и основы построения трансляторов. Кревский И.Г - 103 стр.

UptoLike

103
17. ВНУТРЕННИЕ ФОРМЫ
Построение кода программы непосредственно из постфиксной записи
возможно, но такую форму записи трудно оптимизировать. Большинство
компиляторов используют внутренние формы, удобные для оптимизации,
для построения объектного кода программы. Одной из наиболее
распространенных форм внутреннего представления генерируемого кода
являются четверки.
Четверка
это объект, состоящий из четырех элементов: операции,
двух операндов и результата. Если в результате операции вычисляется
значение некоторой переменной, то такую четверку нетрудно построить.
Например, предложение
X := Y+Z
представляется четверкой
(PLUS_OP, Sy, Sz, Sx),
которая указывает, что надо сложить (PLUS_OP) переменную, определенную
ячейкой Sy таблицы символов, с переменной, определенной ячейкой
Sz, и
сохранить результат в Sx. Теперь исходное предложение оказалось
представленным самостоятельной единицей, которую генератор кода может
обрабатывать независимо от места ее размещения. Таким образом,
оптимизатор может изменять последовательность операций (четверок), не
усложняя процесса генерирования кода.
Для унарных операторов можно просто игнорировать поле второго
операнда четверки, а операции, которые требуют
более двух операндов,
можно представить в форме последовательности, состоящей из нескольких
четверок.
Например, оператор X := F(A,B,C,D) можно записать в виде группы из
трех четверок
(F1,A,B,T1)
(F2,T1,C,T2)
(F,T2,D,X)
                                                                        103
                        17.    ВНУТРЕННИЕ ФОРМЫ
      Построение кода программы непосредственно из постфиксной записи
возможно, но такую форму записи трудно оптимизировать. Большинство
компиляторов используют внутренние формы, удобные для оптимизации,
для   построения     объектного   кода   программы.   Одной   из   наиболее
распространенных форм внутреннего представления генерируемого кода
являются четверки.
      Четверка – это объект, состоящий из четырех элементов: операции,
двух операндов и результата. Если в результате операции вычисляется
значение некоторой переменной, то такую четверку нетрудно построить.
Например, предложение
      X := Y+Z
представляется четверкой
      (PLUS_OP, Sy, Sz, Sx),
которая указывает, что надо сложить (PLUS_OP) переменную, определенную
ячейкой Sy таблицы символов, с переменной, определенной ячейкой Sz, и
сохранить результат в Sx. Теперь исходное предложение оказалось
представленным самостоятельной единицей, которую генератор кода может
обрабатывать независимо от места ее размещения. Таким образом,
оптимизатор может изменять последовательность операций (четверок), не
усложняя процесса генерирования кода.
      Для унарных операторов можно просто игнорировать поле второго
операнда четверки, а операции, которые требуют более двух операндов,
можно представить в форме последовательности, состоящей из нескольких
четверок.
      Например, оператор X := F(A,B,C,D) можно записать в виде группы из
трех четверок
      (F1,A,B,T1)
      (F2,T1,C,T2)
      (F,T2,D,X)