Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Вопрос 12. Компиляция и связывание



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

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

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

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

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

Наибольшее распространение получили трансляторы второго типа – компиляторы; создание программ на их языках полностью соответствует схеме из вышеперечисленных четырех этапов. Компилятор - транслятор, выполняющий компиляцию: преобразование программы, составленной на исходном языке, в программу на машинном языке. Достоинства компиляторов:

1) высокая скорость выполнения готовой программы

2) независимость исполняемого кода от среды программирования

3) возможность распространять программы без исходных текстов

Основные фазы компиляции:

1) Процесс компиляции разбивается на несколько этапов (фаз), на каждом из которых решаются вполне независимые задачи

2) Входными данными для первой фазы является исходная программа

3) Результат работы каждой фазы является входными для последующих фаз

4) Результатом работы последней фазы является исполняемая программа

Этапы компиляции:

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

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

Семантический (контекстный) анализ. Основная задача семантического анализа – определить свойства (атрибуты) объектов и убедиться в правильности их использования. В основе большинства алгоритмов семантического анализа лежат атрибутные грамматики.

Основными атрибутами объектов являются:

1) Тип данных

2) Область видимости

Основные виды проверок:

1) Проверка соответствия типов

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

3) Проверка передачи управления

Во время семантического анализа синтаксическое дерево программы может быть дополнено неявными преобразованиями. Результатом семантического анализа является атрибутированное синтаксическое дерево.

Генерация промежуточного представления. Выполняется для упрощения последующих этапов.

Оптимизация. Модификация внутреннего представления программы с целью получения более эффективного результирующего кода.

Критерии оптимизации:

1) быстродействие

2) объем машинного кода

3) объем используемой памяти и т. п.

Глобальная оптимизация анализирует (и преобразовывает) структуру всей программы. Локальная оптимизация анализирует (и преобразовывает) небольшие фрагменты программы.





Дата публикования: 2014-11-28; Прочитано: 812 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...