Языки программирования и методы трансляции. Раздел «Методы трансляции»: Конспект лекций

Страницы работы

Фрагмент текста работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

И.Л. Еланцева, И.А.Полетаева

Языки программирования и методы трансляции.

Раздел «Методы трансляции»

Конспект лекций

Новосибирск

2007


Рецензенты:

канд. техн. наук, ст. преподаватель

кафедры автоматики НГТУ               Е.Л.Веретельникова

д-р техн. наук, проф. кафедры

прикладной математики НГТУ         Д.В. Лисицин

Еланцева И.Л., Полетаева И.А.

          Языки программирования и методы трансляции. Раздел «Методы трансляции». Конспект лекций. – Новосибирск: Изд-во НГТУ, 2007. – 113 с.

Данный конспект лекций предназначен студентам ФПМИ, изучающим курс «Языки программирования и методы трансляции».  Конспект лекций содержит описание методов проектирования сканера, синтаксических анализаторов нисходящего и восходящего типов, методов генерирования кодов.


Введение

Данный конспект лекций предназначен студентам ФПМИ, изучающим курс «Языки программирования и методы трансляции».  Конспект лекций содержит описание методов проектирования сканера, синтаксических анализаторов нисходящего и восходящего типов, методов генерирования кодов.

1. ТРАНСЛЯТОРЫ

1.1. Назначение, классификация

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

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

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

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

1.2. Основные компоненты трансляции

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

В состав любого компилятора входят три основных компонента:

– лексический анализатор (блок сканирования);

– синтаксический анализатор;

– генератор кода.

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

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

 


Рис.1. Фазы компиляции

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

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

Похожие материалы

Информация о работе