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

Материал из WikiGrapp
Перейти к навигации Перейти к поиску
(Новая страница: «Упрощенно процесс трансляции (перевода программы с одного языка на другой) можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' и фазы ''синтеза''. Первая фаза включает решение таких задач, как ''лексический, синтаксический...»)
 
Нет описания правки
 
(не показаны 3 промежуточные версии этого же участника)
Строка 1: Строка 1:
Упрощенно процесс трансляции (перевода программы с одного языка на другой) можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' и фазы ''синтеза''. Первая фаза включает решение таких задач, как ''лексический, синтаксический'' и ''контекстный'' анализ. В результате выполнения первой фазы формируется ''промежуточное представление''  (intermediate representation) исходной программы. Часть ''транслятора'' (compiler), выполняющая первую фазу, обычно называется ''первичным'' (front-end) транслятором. Часть транслятора, выполняющая вторую фазу, называется ''вторичным'' (back-end) транслятором и ''генератором кода'' (code generator), если выходным языком является машинный язык объектной ЭВМ.
Упрощенно процесс ''трансляции —'' перевода программы с одного языка на другой можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' и фазы ''синтеза'' или ''кодогенерации,'' если переводится исходный код программы с языка программирования высокого уровня на язык программирования низкого уровня, например, язык ассемблера (assembly language), объектный код (object code) или машинный код (machine code). В результате выполнения первой фазы формируется ''промежуточное представление''  (intermediate representation) исходной программы.  


Обычно объектный код, являющийся выходом генератора кода, представляет собой текст на языке ассемблера объектной ЭВМ. Таким образом, генератор кода получает на входе промежуточное представление исходной программы и переводит его в объектный код, форма которого целиком определяется объектной машиной.  
Если выходным языком ''компилятора'' (программы, реализующей процесс трансляции) является язык низкого уровня. то та часть компилятора (''вторичный'' ''компилятор''), которая выполняет вторую фазу процесса трансляции, называется ''генератором кода'' (code generator), .  


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

Текущая версия от 12:29, 29 ноября 2024

Упрощенно процесс трансляции — перевода программы с одного языка на другой можно представлять себе как последовательное выполнение двух фаз — фазы анализа и фазы синтеза или кодогенерации, если переводится исходный код программы с языка программирования высокого уровня на язык программирования низкого уровня, например, язык ассемблера (assembly language), объектный код (object code) или машинный код (machine code). В результате выполнения первой фазы формируется промежуточное представление (intermediate representation) исходной программы.

Если выходным языком компилятора (программы, реализующей процесс трансляции) является язык низкого уровня. то та часть компилятора (вторичный компилятор), которая выполняет вторую фазу процесса трансляции, называется генератором кода (code generator), .

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

Страницы в категории «Кодогенерация»

Показаны 4 страницы из 4, находящихся в данной категории.