Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по теории языков программирования.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
77.08 Кб
Скачать

Этапы создания программы на языке программирования

Любой компьютер может выполнять только команды, написанные на машинном языке.

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

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

  • Ассемблер - транслятор, у которого объектным языком является некоторая разновидность машинного языка какого-либо аппаратного компьютера, а исходным языком — символическое представление машинного языка. Исходный язык обычно называют языком ассемблера. Чаще всего каждая команда на исходном языке переводится в одну команду на объектном языке.

  • Компилятор — это транслятор, для которого исходным считается язык высокого уровня. Объектный язык очень близок к машинному языку аппаратного компьютера — им является либо язык ассемблера, либо какой-нибудь вариант машинного языка. Например, программы на языке С обычно компилируются в программы на языке ассемблера, которые ассемблер затем переводит в машинный язык.

После трансляции программу обрабатывает компоновщик (редактор связей) — инструментальная программа, которая производит компоновку («линковку»): принимает на вход один или несколько объектных модулей и собирает по ним исполнимый модуль. Для связывания модулей компоновщик использует таблицы символов, созданные компилятором в каждом из объектных модулей. Эти таблицы могут содержать символы следующих типов:

  • Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям;

  • Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя;

  • Локальные — могут использоваться внутри объектного файла для упрощения процесса настройки адресов.

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

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

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

Пример работы интерпретатора – программа на языке Visual Basic for Applications.