Главная Обратная связь

Дисциплины:






Компиляция и интерпретация. Основные этапы компиляции.



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

Компиляция - преобразование объектов (данных и операций над ними) с входного языка в объекты на другом языке для всей программы в целом с последующим выполнением полученной программы в виде отдельного шага.

Интерпретация - анализ отдельного объекта на входном языке с одновременным выполнением (интерпретацией).

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

Если посмотреть на эти различия несколько с другой стороны, то можно заметить, что интерпретатор непосредственно выполняет действия, связанные с определением или преобразованием объектов программы, а компилятор - переводит их на другой (не обязательно машинный язык). Отсюда можно сделать несколько выводов:

*для выполнения программы, написанной на определенном формальном языке после ее компиляции необходим интерпретатор, выполняющий эту программу, но уже записанную на выходном языке компилятора;

*процессор и память любого компьютера (а в широком смысле и вся программная среда, создаваемая операционной системой, является интерпретатором машинного кода);

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

Трансляция (лат. translatio — перевод) - преобразование программы с одного языка программирования на другой, который понятен процессору или программе-интерпретатору.

Транслятор - программа или техническое средство (процессор), выполняющее трансляцию программы.

Язык, на котором представлена входная программа, называется исходным языком, а сама программа - исходным кодом. Выходной язык называется целевым языком или объектным кодом.

Исходный код => Транслятор => Объектный код.

Компиляция - трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера).



Интерпретация - пооператорный (покомандный, построчный) анализ, обработка и тут же выполнение исходной программы или запроса (в отличие от компиляции, при которой программа транслируется до её выполнения целиком).

Трансляторы:

Интерпретатор - программа или аппаратное средство, выполняющее интерпретацию.

Компилятор - программа или аппаратное средство, выполняющее компиляцию.

Компилировать - проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык.

Виды компиляторов

*Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.

*Гибкий. Сконструирован по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.

*Диалоговый. См.: диалоговый транслятор.

*Инкрементальный. Повторно транслирует фрагменты программы и дополнения к ней без перекомпиляции всей программы.

*Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.

*Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.

*Отладочный. Устраняет отдельные виды синтаксических ошибок.

*Резидентный. Постоянно находится в оперативной памяти и доступен для повторного использования многими задачами.

*Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.

*Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики.

Процесс компиляции обычно принято делить на три основных этапа :

1.предварительная обработка, анализ и синтез .

Предварительная обработка предусматривает выполнение так

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

2.Этап анализа включает в себя три фазы .

1) Лексический анализ ;

2) Синтаксический анализ ;

3) Семантический анализ .

3.Этап синтеза состоит из следующих фаз .

1) Генерация машинно-независимого кода ;

2) Оптимизация машинно-независимого кода ;

3) Распределение памяти ;

4) Генерация машинного кода;

5) Оптимизация машинного кода .

 





sdamzavas.net - 2019 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...