1207
правок
KVN (обсуждение | вклад) (Новая страница: «Упрощенно процесс трансляции (перевода программы с одного языка на другой) можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' и фазы ''синтеза''. Первая фаза включает решение таких задач, как ''лексический, синтаксический...») |
KVN (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
Упрощенно процесс трансляции (перевода программы с одного языка на другой) можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' и фазы ''синтеза''. Первая фаза включает решение таких задач, как ''лексический, синтаксический'' и ''контекстный'' анализ. В результате выполнения первой фазы формируется ''промежуточное представление'' (intermediate representation) исходной программы. Часть ''транслятора'' (compiler), выполняющая первую фазу, обычно называется ''первичным'' (front-end) транслятором. Часть транслятора, выполняющая вторую фазу, называется ''вторичным'' (back-end) транслятором и ''генератором кода'' (code generator), если выходным языком является машинный язык объектной ЭВМ. | Упрощенно процесс трансляции (перевода программы с одного языка на другой) можно представлять себе как последовательное выполнение двух фаз — фазы ''анализа'' и фазы ''синтеза''. Первая фаза включает решение таких задач, как ''лексический, синтаксический'' и ''контекстный'' анализ. В результате выполнения первой фазы формируется ''промежуточное представление'' (intermediate representation) исходной программы. Часть ''транслятора'' (compiler), выполняющая первую фазу, обычно называется ''первичным'' (front-end) транслятором. Часть транслятора, выполняющая вторую фазу, называется ''вторичным'' (back-end) транслятором и ''генератором кода'' (code generator), если выходным языком является машинный язык объектной ЭВМ. | ||
Обычно объектный код, являющийся выходом генератора кода, представляет собой текст на языке ассемблера объектной ЭВМ. Таким образом, генератор кода получает на входе промежуточное представление исходной программы и переводит его в объектный код, форма которого целиком определяется объектной машиной. | Обычно объектный код, являющийся выходом генератора кода, представляет собой текст на языке ассемблера объектной ЭВМ. Таким образом, генератор кода получает на входе промежуточное представление исходной программы и переводит его в объектный код, форма которого целиком определяется объектной машиной. Хотя имеется большая зависимость кодогенерации от объектного языка и операционной системы, такие вопросы как управление памятью, выбор команд, распределение регистров и порядок вычисления присущи почти всем проблемам кодогенерации. | ||
Реализация процесса трансляции описанным выше способом, как правило, приводит к получению программ, существенно уступающих ручным программам по качеству использования предоставляемых вычислительной системой ресурсов, таких как время, память и т. д. Поэтому часто универсальный способ трансляции дополняется специальными приемами и методами, направленными на улучшение качества выходной программы и получивших название ''оптимизации'' ''программ'' (program optimization). Проблема построения оптимальной программы алгоритмически не разрешима, и поэтому основная задача оптимизации состоит в удалении неоптимальностей из выходной программы, возникающих в ней из-за универсального способа трансляции. При этом основные способы оптимизации транслируемой программы заключаются в удалении вычислений или объектов из процессов выполнений программы или в замене в них сложных вычислений на более простые. Многие оптимизации можно реализовать, применяя так называемую ''смешанную стратегию'' (mixed strategy) программирования. Суть этого метода состоит в том, что для программирования семантически богатой конструкции входного языка (такой, как цикл или процедура) транслятор использует помимо универсального способа перевода целый ряд специализированных, ориентированных на конкретные, но зато часто встречающиеся в реальных программах варианты использования этой конструкции. Однако обычно оптимизирующие трансляторы используют метод ''оптимизирующих преобразований (''optimizing transformations), который в отличие от смешанной стратегии обладает достаточной языковой независимостью. | Реализация процесса трансляции описанным выше способом, как правило, приводит к получению программ, существенно уступающих ручным программам по качеству использования предоставляемых вычислительной системой ресурсов, таких как время, память и т. д. Поэтому часто универсальный способ трансляции дополняется специальными приемами и методами, направленными на улучшение качества выходной программы и получивших название ''оптимизации'' ''программ'' (program optimization). Проблема построения оптимальной программы алгоритмически не разрешима, и поэтому основная задача оптимизации состоит в удалении неоптимальностей из выходной программы, возникающих в ней из-за универсального способа трансляции. При этом основные способы оптимизации транслируемой программы заключаются в удалении вычислений или объектов из процессов выполнений программы или в замене в них сложных вычислений на более простые. Многие оптимизации можно реализовать, применяя так называемую ''смешанную стратегию'' (mixed strategy) программирования. Суть этого метода состоит в том, что для программирования семантически богатой конструкции входного языка (такой, как цикл или процедура) транслятор использует помимо универсального способа перевода целый ряд специализированных, ориентированных на конкретные, но зато часто встречающиеся в реальных программах варианты использования этой конструкции. Однако обычно оптимизирующие трансляторы используют метод ''оптимизирующих преобразований (''optimizing transformations), который в отличие от смешанной стратегии обладает достаточной языковой независимостью. |