Общая схема компиляции

Рассмотрим общую схему компиляции и последовательность оптимизирующих преобразований.

Компилятор строится по многопроходной схеме .

Такая схема, в частности, выбрана для того, чтобы обеспечить промежуточные представления исходной программы наилучшим образом, удовлетворяющим выбранным алгоритмам оптимизационных преобразований. В данном случае нас будут интересовать следующие фазы компиляции: фаза генерации триплетов, фаза распределения В/Т регистров, фазы генерации псевдокода, фаза перестановки псевдокоманд и фаза распределения основных регистров.

Этим фазам компиляции соответствует следующая последовательность оптимизационных преобразований.

1) планирование по балансу,

2) распределение В/Т регистров,

3) перестановка псевдокоманд,

4) распределение A/S регистров.

На входе фазы генерации триплетов поступает исходная программа в промежуточном представлении. Семантическая информация хранится в словаре. В результате работы данной фазы выполняется планирование по балансу и собирается дополнительная информация, необходимая для фазы распределения В/Т регистров.

В компиляторе предусмотрена возможность совместной компиляции пакета п/п. Все необходимые для этого работы вы полняются предыдущими фазами. Таким образом, если задана совместная компиляция с открытой подстановкой подпрограмм, то на входе данной фазы имеется уже собранная единая программа.

На входе данной фазы программа представляет собой лес деревьев — триплетов.

Данное представление после распределения промежуточных регистров и памяти поступает на вход генератора псевдокода. Результатом его работы является последовательность псевдокоманд. Она отличается от команд, прежде всего тем, что вместо основных регистров в псевдокомандах содержатся виртуальные основные регистры. Окончательное распределение основных регистров выполняется фазой (4).

Метки: , , ,

Связанные записи