Скачиваний:
8
Добавлен:
01.05.2014
Размер:
130.56 Кб
Скачать

Семантические процедуры

{переход}A

Если А отсутствует в таблице меток, добавить её туда и проинициализировать нулями.

Сгенерировать триаду jmp A.адрес.

Если A.адрес == 0, добавить адрес сгенерированной триады в A.список_триад.

{переход_0}A1,A2

Аналогично {переход}, только генерировать триаду jz A1,A2

{метка}A

Если A отсутствует в таблице меток, добавить её туда.

Если A уже есть в таблице иA.адрес == 0, установитьA.адрес в адрес текущей триады и исправить на выходной ленте все триады из списка триад, требующих уточнения.

Исключительная ситуация:

В таблице меток уже есть метка с данным именем и A.адрес не ноль.

{выход}A

Сгенерировать ret A.

Исключительная ситуация:

A имеет тип, отличный от int.

{ввод}A

Если A – переменная типа int, сгенерировать триаду rdi A.

Если A – переменная типа double, сгенерировать триаду rdd A.

Если A – переменная типа vector[n], сгенерировать триады

rdd A+i } для всех i от 0 до n-1

Исключительная ситуация:

A – не простая переменная или вектор.

{вывод}A

Если A – переменная типа int, сгенерировать триаду wri A.

Если A – переменная типа double, сгенерировать триаду wrd A.

Если A – переменная типа vector[n], сгенерировать триады

wrd A+i } для всех i от 0 до n-1

Исключительная ситуация:

A – не простая переменная или вектор.

{уид}R

R = уникальный идентификатор.

Приложение 1. Таблицы лексем

класс

индекс

атрибут

const

0

else

0

goto

0

if

0

input

0

len

0

limited

0

output

0

return

0

typedef

0

vector

0

while

0

[

0

]

0

{

0

}

0

(

0

)

0

..

0

!

0

=

0

аддитивные

0

+

1

-

мультипликативные

0

*

1

/

отношения

0

<

1

>

2

<=

3

>=

4

==

5

!=

&&

0

||

0

e

(выражение)

0

значение выражения (тип и адрес или значение)

dec

(описания)

0

класс

индекс

атрибут

type

(тип)

0

int

1

double

...

пользовательские типы

idv

(переменная, не вектор)

...

индекс типа

ivc

(вектор)

...

индекс типа

con

(константа)

...

индекс типа и значение

lab

...

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

адрес помеченной триады (0, если метка ещё не объявлена)

список триад перехода, требующих уточнения

Тип хранится в следующем виде:

поле

тип поля

комментарий

размерность массива

целое

= 0, если это не массив

границы массива

массив из 16 целых

игнорируется, если это не массив

тип элементов

целое

0 int, 1double,2  limited, 3vector

диапазон

два целых

игнорируется, если не limited

размерность вектора

целое

если это не вектор, поле игнорируется

спец.

целое

1const, 2  typedef

Например, следующему объявлению:

vector[3] basis[3];

соответствует тип {0, 1, {3, 0, …, 0}, 2, 3}.

Соседние файлы в папке Курсовая работа