Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсач по ТАФЯ.doc
Скачиваний:
49
Добавлен:
22.05.2015
Размер:
243.2 Кб
Скачать

5 Общие сведения о трансляции

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

Объектный язык обычно является машинным языком некоторой вычислительной машины, причем программу в этом случае можно сразу же выполнять.

Транслятор можно представить как сложный вычислительный процесс, включающий отдельные более простые блоки. На рисунке 1 представлена упрощенная схема транслятора, который содержит:

- лексический блок;

- синтаксический блок;

- генератор кода;

- таблицы.

Рисунок 1 Упрощенная схема транслятора

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

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

Например, цепочка символов может быть такой:

if (b1>9) x=5;

Лексический блок устанавливает, что цепочка представляет слово if, за которым следует левая скобка ( переменная b1, знак >, число 9, переменная x , знак присвоения =, число 5 и точка с запятой ;. Таким образом, 12 символов преобразуются в 9 новых единиц.

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

Так b1 принадлежит классу "переменная" и имеет значение, которое служит указателем на элемент таблицы имен для b1. Этот указатель на таблицу имен фактически является внутренним именем переменной b1.

Лексема 9 принадлежит классу "константа" и имеет в качестве значения набор битов, изображающих число 9.

Знак равенства относится к классу "знак отношения", а его значение указывает, какое именно отношение.

Лексема if принадлежит классу "if" (служебное слово) и информирования о ее значении не требуется.

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

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

Например, если в программе написано a+b∙c - это значит, что числа, представляемые идентификаторами b, c, будут перемножены и к результату будет прибавлено число, представляемое идентификатором а.

Указанные выражения можно перевести так:

УМНОЖИТЬ (b, c, r1),

СЛОЖИТЬ (a, r1, r2),

где первое выражение идентифицируется как "умножить b на с и запомнить результат по адресу r1", а второе - "сложить а и значение по адресу r1 и запомнить результат по адресу r2".

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

Преимуществом здесь является то, что последовательность атомов отражает порядок, в котором должны выполняться действия. Предположим, как и раньше, что каждый атом состоит из класса и значения. Тогда атом УМНОЖИТЬ (b, c, r1) принадлежит классу "УМНОЖИТЬ" и имеет значение, состоящее из 3-х указателей на элемент таблицы: для b, c и r1 соответственно.

Внутри транслятора атом будет представлен целым числом, обозначающим "УМНОЖИТЬ" и тремя указателями, обозначающими его значение.

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

Генератор кода. Этот блок "развертывает" атомы, построенные СБ, в последовательность команд вычислительной машины, которые выполняют соответствующие действия.

Точный характер этого развертывания зависит от многих признаков. Например, от типа операторов (b, c) с фиксированной или плавающей точкой, от используемых регистров машины и др.

Та часть работы транслятора, которая связана со смысловым значением лексем, называется семантической обработкой.

Семантика идентификатора может включать его тип, а в случае, если это массив, то его размерность.

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

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

Будет рассмотрено два вида действия транслятора:

- лексическая обработка;

- синтаксическая обработка.

За основу языка высокого уровня транслятора был взят язык программирования, разработанный в среде Microsoft Visual Studio 2010, С #.. Он был упрощен, а часть правил изменена или отсутствует.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]