Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+SPO.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
142.85 Кб
Скачать

Системное программное обеспечение

1. Трансляторы, компиляторы, интерпретаторы.

Трансляторы, компиляторы, интерпретаторы. Этапы и фазы трансляции. Схема работы транслятора.

Трансляторы - программа или устройство, переводящее входную строку из одного языка в другой без потери списка.

aA bB

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

Компиляторы - переводит целиком( это транслятор, переводящий текст программы в машинный код).

Этапы трансляции. Общая схема работы транслятора

Н а рисунке ниже представлена общая схема работы компилятора. Из нее видно, что в целом процесс компиляции состоит из двух основных этапов синтеза и анализа.

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

Кроме того, в составе компилятора присутствует часть, ответственная за анализ и исправление ошибок, которая при наличии ошибки в тексте исходной

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

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

Рассмотрим основные фазы (части) компиляции:

Лексический анализ (сканер) – это часть компилятора, которая читает литеры программы на исходном языке и строит из них слова (лексемы) исходного

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

Синтаксический разбор – это основная часть компилятора на этапе

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

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

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

Кроме непосредственно проверки, семантический анализ должен выполнять

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

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

Подготовка к генерации кода – это фаза, на которой компилятором выполняются предварительные действия, непосредственно связанные с синтезом тек-

ста результирующей программы, но еще не ведущие к порождению текста на

выходном языке. Обычно сюда входят действия, связанные с идентификацией

элементов языка, распределением памяти и т. п.

Генерация кода – это фаза, непосредственно связанная с порождением команд, составляющих предложения выходного языка и в целом текст результирующей программы. Это основная фаза на этапе синтеза результирующей программы. Кроме непосредственного порождения текста результирующей программы, генерация обычно включает в себя также оптимизацию – процесс, связанный с обработкой уже порожденного текста. Иногда оптимизацию выделяют

в отдельную фазу компиляции, так как она оказывает существенное влияние на

качество и эффективность результирующей программы.

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