Генерация кода
Наконец, по оптимизированной версии промежуточного представления генерируется объектная программа. Эту задачу решает фаза генерации кода(code generator). В лекции 14 мы изучим основные свойства целевой платформы .NETи рассмотрим процесс генерации кода для этой платформы. В лекции 15 мы рассмотрим более сложные алгоритмы генерации, использующие методику восходящего переписывания деревьев (BURS). Во многих случаях такой подход может значительно улучшить качество порождаемого кода.
Помимо собственно генерации кода, на этом этапе необходимо решить множество сопутствующих проблем, например:
распределение памяти, т.е. отображение имен исходной программы в адреса памяти
распределение регистров, т.е. определение для каждой точки программы множества переменных, которые должны быть размещены в регистрах
выбор такой последовательности записи значений в регистры, которая избавила бы от необходимости частой выгрузки значений из регистров, а затем повторной загрузки
Практически все эти задачи решаются окружением времени исполнения .NETи потому остались за пределами данного курса. Тем не менее, для полноты картины мы рассмотрим проблемы управления памятью в лекции 12.
- Лекция 3. Основы компиляторов
- Основные задачи компиляторов
- Интерпретатор
- Компилятор
- Объектная программа
- Трансляция в ассемблер
- T-диаграммы
- Методики создания компилятора
- Метод раскрутки
- Кросс-транслятор
- Виртуальная машина
- Компиляция "на лету"
- Фазы компиляции
- Лексический анализ
- Синтаксический анализ
- Видозависимый анализ
- Оптимизация кода
- Генерация кода
- Внешний и внутренний интерфейсы
- Просмотры
- Техника "заплат"
- Литература к лекции