Санкт-Петербургский государственный университет
телекоммуникаций имени профессора М.А. Бонч-Бруевича
Курсовая работа
по дисциплине Информатика
на тему:
Трансляция, линкование, компиляция, интерпретация
Выполнила:студентка 1 курса
ЦарыгинаК.О.
Преподаватель:Левчук Ю.П.
2009 год
Содержание
Введение
Трансляция,компиляция, интерпретация, линкование
1.Трансляция. Компиляция. Интерпретация
2.Линкование
Заключение
Используемаялитература
Введение
Большая часть работы программистов связана с написаниемисходного кода, тестированием и отладкой программ на одном из языковпрограммирования. Различные языки программирования поддерживают различные стилипрограммирования. Единственный язык, напрямую выполняемый процессором — это машинныйязык (также называемый машинным кодом). Изначально все программистыпрорабатывали программы в машинном коде, но сейчас эта трудная работа уже неделается. Вместо этого программисты пишут исходный код на языкепрограммирования высокого уровня, и компьютер (используя компилятор,интерпретатор или ассемблер) транслирует его, в один или несколько этапов,уточняя все детали, в машинный код, готовый к исполнению на целевом процессоре.Запись исходных текстов программ при помощи языков программирования облегчаетпонимание и редактирование человеком. Этому, в частности, помогают комментарии,допустимые в синтаксисе большинства языков. Для выполнения на компьютереготовый текст программы преобразуется (компилируется) в машинный код. Некоторыеязыки программирования позволяют обходиться без предварительной компиляциипрограммы и переводят её в инструкции машинного кода непосредственно во времяисполнения. Этот процесс называется динамической компиляцией, и он позволяетдобиться большей переносимости программ между разными аппаратными ипрограммными платформами при сохранении многих плюсов компиляции.
Интерпретируемыепрограммы, для которых, как правило, не применяется процесс компиляции икоторые интерпретируются операционный системой или специальнымипрограммами-интерпретаторами, называются скриптами или «сценариями».
Технология программирования задачразличается для операторных и функциональных языков программирования.Ограничимся рассмотрением вопроса для операторных языков. Тогда этот этапразбивается на два последовательных шага – разработку алгоритма и отладку программы.
Отладка программы – этосамый трудоемкий этап. Его цель – проверка синтаксической и логическойправильности программы, а также определение того, что программа функционируетна всем диапазоне допустимых данных.
В процессе отладки программы выделяютсяэтапы:
1. трансляцияисходного текста программы;
2. компоновкапрограммы;
3. выполнениепрограммы с целью определения логических ошибок;
4. тестированиепрограммы
Трансляция, компиляция,интерпретация, линкование
1.Трансляция. Компиляция. Интерпретация
Трансляция программы — преобразование программы, представленной наодном из языков программирования, в программу на другом языке и, в определённомсмысле, равносильную первой. При трансляциивыполняется перевод программы, понятной человеку, наязык, понятный компьютеру. Выполняется специальными программнымисредствами (транслятором).
Трансляторы реализуются в виде компиляторов илиинтерпретаторов. С точки зрения выполнения работы компилятор и интерпретаторсущественно различаются. Если цель трансляции –преобразование всего исходного текста на внутренний язык компьютера (т.е.получение некоторого нового кода) и только, то такая трансляция называетсятакже компиляцией.Исходный текст называется также исходной программой или исходным модулем, а результат компиляции– объектным кодом или объектным модулем. Если же трансляции подвергаются отдельные операторы исходныхтекстов и при этом полученные коды сразу выполняются, такая трансляцияназывается интерпретацией. Поскольку трансляция выполняется специальными программнымисредствами (трансляторами), последние носят название компилятора илиинтерпретатора, соответственно.
Цельтрансляции — преобразовать текст с одного языка на другой, который понятенадресату текста. В случае программ-трансляторов, адресатом является техническоеустройство (процессор) или программа-интерпретатор.
Виды трансляторов
Трансляторыподразделяют на:
· Адресный. Функциональноеустройство, преобразующее виртуальный адрес в реальный адрес
· Диалоговый. Обеспечиваетиспользование языка программирования в режиме разделения времени.
· Многопроходной. Формирует объектныймодуль за несколько просмотров исходной программы.
· Обратный. То же, что детранслятор(декомпилятор, дизассемблер).
· Однопроходной. Формирует объектныймодуль за один последовательный просмотр исходной программы.
· Оптимизирующий. Выполняет оптимизациюкода в создаваемом объектном модуле.
· Синтаксически-ориентированный(синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка итекст на описанном языке, который и транслируется в соответствии с заданнымописанием.
· Тестовый. Набор макрокоманд языкаассемблера, позволяющих задавать различные отладочные процедуры в программах,составленных на языке ассемблера
Компиляция — преобразованиепрограммой-компилятором исходного текста программы, написанного на языкевысокого уровня в машинный язык, в язык, близкий к машинному, или в объектныймодуль. Результатом компиляции является объектный файл с необходимыми внешнимиссылками для компоновщика.
Компиляторчитает всю программу целиком, делает ее перевод и создает законченный вариантпрограммы на машинном языке, который затем и выполняется.
Виды компиляции
· Пакетная. Компиляция несколькихисходных модулей в одном пункте задания.
· Построчная. То же, что иинтерпретация.
· Условная. Компиляция, при которойтранслируемый текст зависит от условий, заданных в исходной программе. Так, взависимости от значения некоторой константы, можно включать или выключать трансляциючасти текста программы.
/>
Рисунок 1.Компиляция размеченного документа
Интерпретация—процесс непосредственного покомандного выполнения программы без предварительнойкомпиляции, «на лету»; в большинстве случаев интерпретация намного медленнееработы уже скомпилированной программы, но не требует затрат на компиляцию, чтов случае небольших программ может повышать общую производительность.
Типы интерпретаторов
Простойинтерпретатор анализирует и тут же выполняет (собственно интерпретация)программу покомандно (или построчно), по мере поступления её исходного кода навход интерпретатора. Его достоинство — мгновенная реакция. Недостаток — такойинтерпретатор обнаруживает ошибки в тексте программы только при попыткевыполнения команды (или строки) с ошибкой.
Интерпретаторкомпилирующего типа — это система из компилятора, переводящего исходный код программыв промежуточное представление, например, в байт-код или p-код, и собственноинтерпретатора, который выполняет полученный промежуточный код (так называемаявиртуальная машина). Его достоинство – большее быстродействие выполненияпрограмм (за счёт выноса анализа исходного кода в отдельный, разовый проход, иминимизации этого анализа в интерпретаторе). Недостатки — большее требование кресурсам и требование на корректность исходного кода.
Алгоритм работы простого интерпретатора
1. прочитатьинструкцию;
2. проанализироватьинструкцию и определить соответствующие действия;
3. выполнитьсоответствующие действия;
4. еслине достигнуто условие завершения программы, прочитать следующую инструкцию иперейти к пункту 2.
/>
Рисунок 2.Схема интерпретации текста Ю. Лотмана
2. Линкование
Линкование(компоновка) — это процесс, при котором все «недокомпилированные»части программы доводятся до конца и связываются между собой в исполняемый файл(или файлы) формата, понятного данной операционной системе. В итоге, мыполучаем исполняемую программу.
Линкованиеважно, так как при разработке больших проектов код обычно вырастает настолько,что приходится его для повышения надежности раскидывать по разным файлам.
Длясвязывания модулей компоновщик использует таблицы имён, созданные компиляторомв каждом из объектных модулей. Такие имена могут быть двух типов:
· Определённые или экспортируемыеимена — функции и переменные, определённые в данном модуле и предоставляемыедля использования другим модулям
· Неопределённые или импортируемыеимена — функции и переменные, на которые ссылается модуль, но не определяет ихвнутри себя
Работакомпоновщика заключается в том, чтобы в каждом модуле разрешить ссылки нанеопределённые имена. Для каждого импортируемого имени находится егоопределение в других модулях, упоминание имени заменяется на его адрес.
/>
Рисунок 3.Наглядная схема линкования
Существуетдва способа создания линкования:
/>
/>
Рисунок 4. Схема «Кольцо»
Рисунок 5. Схема «Елочка»
Заключение
Упрощая,можно сказать, что при компилировании перевод программы в понятную для машиныформу осуществляется сразу же после её создания. То есть из исходного текста наязыке высокого уровня получается машинный код, пригодный для исполнения наданном процессоре. Если необходимо выполнить программу на другом типепроцессора с несовместимой системой команд, то необходима перекомпиляцияисходной программы на языке высокого уровня для данного типа процессора.
Программаже на интерпретируемом языке транслируется в машинные коды лишь при еёвыполнении. Делается это, по мере поступления команд, следующим образом. Каждойкоманде интерпретируемого языка в коде интерпретатора соответствуетподпрограмма, созданная с использованием поддерживаемых аппаратной частьюкомпьютера средств. Когда эта команда встречается в коде, связанная с нейподпрограмма запускается, и необходимые действия выполняются. Так какособенности реализации интерпретируемых языков скрыты, кажется, что имеющиеся вних команды проделываются напрямую компьютером. Поэтому соответствующиеинтерпретаторы называют виртуальными компьютерами (или, чаще, виртуальнымимашинами). Для переноса программы на другую аппаратную базу (другой процессор)необходимо лишь наличие интерпретатора данного языка программирования для данноготипа процессора.
Используемая литература
· РобертУ. Себеста. Основные концепции языков программирования
· ВольфенгагенВ. Э.Конструкции языков программирования.