- •Высокоуровневый язык программирования
- •Переносимость программ
- •Новые тенденции
- •Обзор языков программирования
- •Ассемблер
- •Фортран
- •Паскаль
- •Виды трансляторов
- •Реализации
- •Транслятор
- •Содержание
- •Смешение понятий трансляции и интерпретации
- •Компилятор
- •Содержание
- •Виды компиляторов[2]
- •Виды компиляции[2]
- •Структура компилятора
- •Генерация кода Генерация машинного кода
- •Генерация байт-кода
- •Динамическая компиляция
- •Декомпиляция
- •Раздельная компиляция
Смешение понятий трансляции и интерпретации
Трансляция и интерпретация — разные процессы: трансляция занимается переводом программ с одного языка на другой, а интерпретация отвечает за исполнение программ. Однако, поскольку, целью трансляции, как правило, является подготовка программы к интерпретации, то эти процессы обычно рассматриваются вместе. Например, языки программирования часто характеризуются как «компилируемые» или «интерпретируемые», в зависимости от того, что преобладает при использовании языка: компиляция или интерпретация. Причём, практически все языки программирования низкого уровня и третьего поколения, вроде ассемблера, Си или Модулы-2, являются компилируемыми, а более высокоуровневые языки, вроде Python или SQL, — интерпретируемыми.
С другой стороны, существует взаимопроникновение процессов трансляции и интерпретации: интерпретаторы могут быть компилирующими (в том числе с динамической компиляцией), а в трансляторах может требоваться интерпретация для конструкций метапрограммирования (например, для макросов в языке ассемблера, условной компиляции в Си или шаблонов в C++).
Более того, один и тот же язык программирования может и транслироваться, и интерпретироваться, и в обоих случаях должны присутствовать общие этапы анализа и распознавания конструкций и директив исходного языка. Это относится и к программным реализациям, и к аппаратным — так, процессоры семейства x86 перед исполнением инструкций машинного языка выполняют их декодирование, выделяя в опкодах поля операндов (регистров, адресов памяти, непосредственных значений), разрядности и т. п., а в процессорах Pentium с архитектурой NetBurst тот же самый машинный код перед сохранением во внутреннем кэше дополнительно транслируется в последовательность микроопераций.
Компилятор
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 15 июля 2013; проверки требуют 4 правки.
Компиля́тор — программа или техническое средство, выполняющее компиляцию.[1][2][3]
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера).[2][3][4] Входной информацией для компилятора (исходный код) является описание алгоритма или программа на проблемно-ориентированном языке, а на выходе компилятора — эквивалентное описание алгоритма на машинно-ориентированном языке (объектный код).[5]
Компилировать — проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык.[3]
Содержание
1 Виды компиляторов[2]
2 Виды компиляции[2]
3 Структура компилятора
4 Генерация кода
4.1 Генерация машинного кода
4.2 Генерация байт-кода
4.3 Динамическая компиляция
4.4 Декомпиляция
5 Раздельная компиляция
6 Интересные факты
7 См. также
8 Примечания
9 Литература
Виды компиляторов[2]
Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.
Гибкий. Сконструирован по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.
Диалоговый. См.: диалоговый транслятор.
Инкрементальный. Повторно транслирует фрагменты программы и дополнения к ней без перекомпиляции всей программы.
Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.
Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.
Отладочный. Устраняет отдельные виды синтаксических ошибок.
Резидентный. Постоянно находится в оперативной памяти и доступен для повторного использования многими задачами.
Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.
Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики.
