Категория:Кодогенерация: различия между версиями

Перейти к навигации Перейти к поиску
нет описания правки
Нет описания правки
Нет описания правки
 
Строка 1: Строка 1:
Упрощенно процесс перевода (translation) программы с одного языка на другой можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' (analysis) и фазы ''синтеза'' (synthesis). Первая фаза включает решение таких задач, как ''[[Лексический анализ|лексический]]'' (lexical)'', [[Синтаксический анализ|синтаксический]]'' (syntax) и ''семантический'' (semantic) (или ''[[Контекстный анализ|контекстный]]'') анализ. В результате выполнения первой фазы формируется ''промежуточное представление''  (intermediate representation) исходной программы.   
Упрощенно процесс ''трансляции —'' перевода программы с одного языка на другой можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' и фазы ''синтеза'' или ''кодогенерации,'' если переводится исходный код программы с языка программирования высокого уровня на язык программирования низкого уровня, например, язык ассемблера (assembly language), объектный код (object code) или машинный код (machine code). В результате выполнения первой фазы формируется ''промежуточное представление''  (intermediate representation) исходной программы.   


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


Таким образом, генератор кода получает на входе промежуточное представление исходной программы и переводит его в объектный код, форма которого целиком определяется объектной машиной. Хотя имеется большая зависимость кодогенерации от объектного языка и операционной системы, такие вопросы как управление памятью, выбор команд, распределение регистров и порядок вычисления присущи почти всем проблемам кодогенерации.
Таким образом, генератор кода получает на входе промежуточное представление исходной программы и переводит его в объектный код, форма которого целиком определяется объектной машиной. Хотя имеется большая зависимость кодогенерации от объектного языка и операционной системы, такие вопросы как управление памятью, выбор команд, распределение регистров и порядок вычисления присущи почти всем проблемам кодогенерации.
 
Реализация процесса трансляции описанным выше способом, как правило, приводит к получению программ, существенно уступающих ручным программам по качеству использования предоставляемых вычислительной системой ресурсов, таких как время, память и т. д. Поэтому часто универсальный способ трансляции дополняется специальными приемами и методами, направленными на улучшение качества выходной программы и получивших название [[Оптимизация программ|''оптимизации'' ''программ'']] (program optimization, compiler optimization).

Навигация