Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП. / готовый курсовик.doc
Скачиваний:
36
Добавлен:
01.05.2014
Размер:
1.2 Mб
Скачать

4.3.3 Представление основных операторов(описанных в разделе семантики) с помощью тетрад

Оператор

Формат оператора

Код операции

Операнд1

Операнд2

Результат

if<выражение>

<составной оператор1>

else

<составной оператор2> ;

<выражение>(результат вt)

BF

Lelse

t

<составной оператор1>

BRL

Lend

DEFL

Lelse

<составной оператор2>

DEFL

Lend

(<логическое выражение>)?

< выражение1>:

< выражение2 >

<логическое выражение >(результат в t)

BF

Lelse

t

=

<выражение1>

t1

BRL

Lend

DEFL

Lelse

=

<выражение2>

t1

DEFL

Lend

for(<оператор присваиванияН>;

<логическое выражение>;

<оператор присваиванияК>)

{<составной оператор>}

<оператор присваиванияH>

i

i

DEFL

Lbegin

<логическое выражение >(результат в t)

BF

Lend

t

<составной оператор>

<оператор присваиванияK>

i

i

BF

Lbegin

t

DEFL

Lend

goto <метка>

BRL

метка

<оператор присваивания>

=

t2

t1

4.4.4 Взаимодействие атг с имеющимися таблицами лексического анализатора

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

Таблица идентификаторов(№ 24) – это уже будет таблица идентификаторов синтаксического анализатора

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

Индекс

Идентификатор

Тип

Значение

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

Для проверки совместимости типов хранимых в таблице значений, сначала сравниваются значения полей «Тип». Если эти значения (имена типов) одинаковые, то значения имеют один. Если же они имена типов разные, то это не значит, что переменные не совместимы. В этом случае выполняется сравнение соответствующих записей в таблице типов. Если же и они разные, то значения безусловно имеют разные типы, но всё-таки возможно совместимые (например integer и real или строки разной длины).

Примем для векторов следующее допущение. Пусть на этапе лексического анализа(то есть составления таблицы идентификаторов) под n-размерный вектор выделяется n+1 строк.

Например, для вектора а[3]=[2.0, 3.0 , 4,1] (элементы вектора хранятся в таблице вещественных констант)

Индекс

Идентификатор

Тип

Значение

0

a

vector

1

a1

Указатель на 2.0 в таблице вещественных констант

2

a2

Указатель на 3.0 в таблице вещественных констант

3

a3

Указатель на 4.1 в таблице вещественных констант

Таблица меток(№27)

Структура таблицы меток не требует изменений и останется прежней.

Имя

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