Категория:Кодогенерация

Материал из WikiGrapp
Перейти к навигации Перейти к поиску

Упрощенно процесс перевода (translation) программы с одного языка на другой можно представлять себе как последовательное выполнение двух фаз — фазы анализа (analysis) и фазы синтеза (synthesis). Первая фаза включает решение таких задач, как лексический (lexical), синтаксический (syntax) и семантический (semantic) (или контекстный) анализ. В результате выполнения первой фазы формируется промежуточное представление (intermediate representation) исходной программы.

Компилятор (compiler) — это компьютерная программа (транслятор), которая переводит компьютерный код, написанный на входном языке программирования (source language), на выходной язык (target language). Название «компилятор» в основном используется для программ, которые переводят исходный код с языка программирования высокого уровня на язык программирования низкого уровня (например, язык ассемблера (assembly language), объектный код (object code) или машинный код (machine code)) для создания исполняемой программы ( executable program). Часть компилятора, выполняющая первую фазу, обычно называется первичным компилятором (front-end compiler). Часть компилятора, выполняющая вторую фазу, называется вторичным компилятором (back-end compiler) или генератором кода (code generator), если выходным является язык низкого уровня.

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

Реализация процесса трансляции описанным выше способом, как правило, приводит к получению программ, существенно уступающих ручным программам по качеству использования предоставляемых вычислительной системой ресурсов, таких как время, память и т. д. Поэтому часто универсальный способ трансляции дополняется специальными приемами и методами, направленными на улучшение качества выходной программы и получивших название оптимизации программ (program optimization, compiler optimization).