МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
И.Л. Еланцева, И.А.Полетаева
Языки программирования и методы трансляции.
Раздел «Методы трансляции»
Конспект лекций
Новосибирск
2007
Рецензенты:
канд. техн. наук, ст. преподаватель
кафедры автоматики НГТУ Е.Л.Веретельникова
д-р техн. наук, проф. кафедры
прикладной математики НГТУ Д.В. Лисицин
Еланцева И.Л., Полетаева И.А.
Языки программирования и методы трансляции. Раздел «Методы трансляции». Конспект лекций. – Новосибирск: Изд-во НГТУ, 2007. – 113 с.
Данный конспект лекций предназначен студентам ФПМИ, изучающим курс «Языки программирования и методы трансляции». Конспект лекций содержит описание методов проектирования сканера, синтаксических анализаторов нисходящего и восходящего типов, методов генерирования кодов.
Данный конспект лекций предназначен студентам ФПМИ, изучающим курс «Языки программирования и методы трансляции». Конспект лекций содержит описание методов проектирования сканера, синтаксических анализаторов нисходящего и восходящего типов, методов генерирования кодов.
1. ТРАНСЛЯТОРЫ
Любую программу, которая переводит произвольный текст на некотором входном языке в текст на другом языке, называют транслятором. В частности, исходным текстом может быть входная программа. Транслятор переводит ее в выходную или объектную программу. Программа, полученная после обработки транслятором, либо непосредственно исполняется на машине, либо подвергается обработке другим транслятором.
Обычно процессы трансляции и исполнения программы разделены по времени. Сначала вся программа транслируется, а затем исполняется. Трансляторы, работающие в таком режиме, называются трансляторами компилирующего типа. Принцип, альтернативный компилированию, реализуется в программах, обычно называемых интерпретаторами. Интерпретатор – это программа, которая в качестве входа допускает программу на входном языке и по мере распознавания конструкций входного языка реализует их, выдавая на выходе результаты вычислений, предписанные исходной программой. Транслятор, использующий в качестве входного языка язык, близкий к машинному (автокод или ассемблер), традиционно называют ассемблером.
Назначение компилятора заключается в том, чтобы из исходного кода выработать выполнимый. В некоторых случаях компилятор выдает только код строки (ассемблера) для определенной машины, а окончательная выработка машинного кода осуществляется другой программой, называемой ассемблером. Код ассемблера аналогичен машинному коду, но в нем для команд и адресов используется мнемоника, метки, которые могут применяться в качестве адресов перехода. Компилятор должен транслировать сложные конструкции языка высокого уровня в относительно простой машинный код или код сборки соответствующей машины.
Поэтому в работу компилятора вовлекаются два языка и, кроме них, язык, на котором написан сам компилятор. В простейших случаях это машинный код той ЭВМ, на которой он будет выполняться.
Процесс трансляции можно представить структурной схемой, изображенной на рисунке 1. Из перечисленных на рисунке 1 фаз компиляции обязательными являются лексический, синтаксический анализ и генерация кода.
В состав любого компилятора входят три основных компонента:
– лексический анализатор (блок сканирования);
– синтаксический анализатор;
– генератор кода.
На фазе лексического анализа исходный текст программы разбивается на единицы языка. Единица языка – константа, идентификатор, ключевое слово, разделитель, знак операции. Лексема – неделимая единица языка и ее атрибуты. Множество атрибутов определяется типом единицы языка и может включать: имя, значение, тип, параметры (для функций). Лексемы сохраняются в соответствующих таблицах лексем.
Одной из важнейших функций компилятора является запись используемых в исходной программе идентификаторов и сбор информации о различных атрибутах каждого идентификатора. Эти атрибуты предоставляют сведения об отведенной идентификатору памяти, его типе, области видимости (в какой части программы он может применяться). При использовании имен процедур атрибуты говорят о количестве и типе их аргументов, методе передачи каждого аргумента (например, по ссылке) и типе возвращаемого значения, если таковое имеется. Вся эта информация составляет лексему.
Рис.1. Фазы компиляции
Таблица символов представляет собой структуру данных, содержащую записи о каждом идентификаторе с полями для его атрибутов. Данная структура позволяет найти информацию о любом идентификаторе и внести необходимые изменения.
Когда идентификатор считан из исходной программы, требуется определить, не появлялся ли этот идентификатор ранее. Если лексическим анализатором в исходной программе обнаружен новый идентификатор, он записывается в таблицу символов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.