Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО ЛЕКЦИИ.docx
Скачиваний:
25
Добавлен:
27.09.2019
Размер:
160.65 Кб
Скачать

2.1.2. Формальное определение компилятора

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

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

Результирующая программа компилятора называется объектной программой или объектным кодом, или объектным модулем, а файл, содержащий объектный код – объектным файлом. При этом надо иметь в виду, что объектный код (объектный модуль) никакого отношения к «объекту» с точки зрения объектно-ориентированного программирования не имеет. Это совершенно различные по смыслу термины, хотя при компиляции программ, написанных на объектно-ориентированных языках, тоже получится объектный файл.

Само слово «компилятор» означает «составитель», «компоновщик». (Про некоторых ученых говорят «он представил скомпилированную работу». Хорошо это или плохо не нам судить).

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

Однако, даже в том случае, когда результирующая программа порождается на языке машинных команд между объектным файлом и исполняемой программой (исполняемым файлом) есть существенная разница. Порожденная компьютером программа не может непосредственно выполняться на компьютере. Это связано с тем, что исходная программа в общем случае состоит из многих модулей. Поскольку компилятор обрабатывает только один конкретный модуль, он не может должным образом обработать те части этого модуля, в которых запрограммированы обращения к данным или процедурам, определенным в другом модуле. Такие обращения называются внешними ссылками. Те места в объектном модуле, где содержатся внешние ссылки, транслируются в некоторую промежуточную форму, подлежащую дальнейшей обработке. Говорят, что объектный модуль представляет собой программу на машинном языке с неразрешенными внешними ссылками. Разрешение внешних ссылок обеспечивается Редактором Связей. Результатом работы Редактора Связей является загрузочный (исполняемый) модуль – программный модуль, представленный в форме, пригодной для загрузки в оперативную память для выполнения.

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

Вычислительная система, на которой выполняется объектная программа, созданная компилятором, называется целевой вычислительной системой (ЦВС). В понятие ЦВС входит не только архитектура аппаратных средств компьютера, но и операционная система, а зачастую и набор динамически подключаемых библиотек, которые необходимы для выполнения объектной программы.

ЦВС не всегда является той же, на которой работает сам компилятор. Часто они совпадают, но бывает, что компилятор работает под управлением вычислительной системы одного типа, а формирует объектные программы для ЦВС другого типа.

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

Вопрос слушателям. Как можно назвать программу, с помощью которой исходную программу на одном ЯВУ можно преобразовать в результирующую программу на другом ЯВУ?