Документ Microsoft Word (5). Компиляция Трансляция программы на язык, близкий к машинному. Трансляция программы, составленной на исходном языке, в объектный модуль. Осуществляется компилятором. Компилировать
Скачать 19.82 Kb.
|
Компиляция — Трансляция программы на язык, близкий к машинному. Трансляция программы, составленной на исходном языке, в объектный модуль. Осуществляется компилятором. Компилировать — проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык. Виды компиляторов: Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором. Гибкий. Составлен по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов. Диалоговый. Инкрементальный. Повторно транслирует фрагменты программы и дополнения к ней без перекомпиляции всей программы. Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы. Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка. Отладочный. Устраняет отдельные виды синтаксических ошибок. Резидентный. Постоянно находится в основной памяти и доступен для повторного использования многими задачами. Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция. Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики. Виды компиляции: Пакетная. Компиляция нескольких исходных модулей в одном пункте задания. Построчная. Условная. Компиляция, при которой транслируемый текст зависит от условий, заданных в исходной программе. Так, в зависимости от значения некоторой константы, можно включать или выключать трансляцию части текста программы. Структура компилятора. Процесс компиляции состоит из следующих этапов: Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем. Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки. Оптимизация. Выполняется удаление излишних конструкций и упрощение кода с сохранением его смысла. Оптимизация может быть на разных уровнях и этапах — например, над промежуточным кодом или над конечным машинным кодом. Генерация кода. Из промежуточного представления порождается код на целевом языке. В конкретных реализациях компиляторов эти этапы могут быть разделены или совмещены в том или ином виде. Трансляция и компоновка. Важной исторической особенностью компилятора, отражённой в его названии (англ. compile — собирать вместе, составлять), являлось то, что он мог производить и компоновку (то есть содержал две части — транслятор и компоновщик). Интерпретаторы. Интерпретатор (языка программирования) — Программа или техническое средство, выполняющее интерпретацию. Вид транслятора, осуществляющего пооператорную (покомандную) обработку и выполнение исходной программы или запроса (в отличие от компилятора, транслирующего всю программу без её выполнения). Программа (иногда аппаратное средство), анализирующая команды или операторы программы и тут же выполняющая их. Языковый процессор, который построчно анализирует исходную программу и одновременно выполняет предписанные действия, а не формирует на машинном языке скомпилированную программу, которая выполняется впоследствии. Типы интерпретаторов. Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток — такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой. Интерпретатор компилирующего типа — это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора. Алгоритм работы простого интерпретатора: прочитать инструкцию; проанализировать инструкцию и определить соответствующие действия; выполнить соответствующие действия; если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2. Достоинства и недостатки интерпретаторов. Достоинства: Большая переносимость интерпретируемых программ — программа будет работать на любой платформе, на которой есть соответствующий интерпретатор. Как правило, более совершенные и наглядные средства диагностики ошибок в исходных кодах. Упрощение отладки исходных кодов программ. Меньшие размеры кода по сравнению с машинным кодом, полученным после обычных компиляторов. Недостатки: Интерпретируемая программа не может выполняться отдельно без программы-интерпретатора. Сам интерпретатор при этом может быть очень компактным. Интерпретируемая программа выполняется медленнее, поскольку промежуточный анализ исходного кода и планирование его выполнения требуют дополнительного времени в сравнении с непосредственным исполнением машинного кода, в который мог бы быть скомпилирован исходный код. Практически отсутствует оптимизация кода, что приводит к дополнительным потерям в скорости работы интерпретируемых программ. |