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

3. Грамматика раздела описания констант

Входные символы:

Имя символа

Семантика

Атрибуты

ConsDesc

Раздел описания констант

ManyConsDef

Последовательность определений констант

ConsDef

Одно определение константы

Idname

Идентификатор. Атрибут соответствует входному символу

name -синтезированный

Операционные символы:

Имя символа

Семантика

Атрибуты

{ВЫЗОВ EQ}a, {ВЫЗОВ Condition}a

Вызовы соответствующих ДМП-процессоров. Результаты их работы запоминаются как атрибут a

a-синтезированный

{ЗАПИСАТЬ ИДЕНТИФИКАТОР} id, adr

Вписывает в таблицу идентификаторов новый идентификатор с именем id по адресу adr. Графы «значение» и «тип» не заполняются. Если идентификатор с именем id уже присутствует в таблице идентификаторов, то синтаксическая ошибка

id – унаследованный, adr- синтезированный

{ОПРЕДЕЛИТЬ ТИП}d, adr

В таблице идентификаторов находит идентификатор по адресу adr и вписывает в поле «тип» значение типа по адресу d в таблице промежуточных значений (обычно это integer, real, boolean)

d, adr - унаследованные

{ПРИСВОИТЬ} left, flag, right

В таблице идентификаторов ищется переменная по адресу left. Значение по адресу right ищется в таблице идентификаторов, если flag = 1 или в таблице промежуточных значений, если flag = 0. Если имя типа переменной и имя типа найденного значения не совпадают, то синтаксическая ошибка.

Если переменная по адресу left помечена как «константа» или «метка», то синтаксическая ошибка. Иначе в поле «значение» переменной записывается содержимое поля «значение» по адресу right.

left, right - унаследованные

{ЗАКРЕПИТЬ}name

B таблице идентификаторов идентификатор с именем name помечается как «неизменяемый»

name -унаследованный

Правила:

ConsDesc -> const ManyConsDef

ManyConsDef -> ConsDef

ManyConsDef -> ManyConsDef ; ConsDef

ConsDef -> Idname := EQ {ВЫЗОВ EQ}c {ЗАПИСАТЬ ИДЕНТИФИКАТОР}name1, adr {ОПРЕДЕЛИТЬ ТИП}d, adr {ПРИСВОИТЬ} left, flag, right {ЗАКРЕПИТЬ}name2

d, right <- c

adr <- НовыйИдентификатор

adr1 <- adr

name1, left, name2 <- name

flag <- 0

ConsDef->Ida:=Condition{ВЫЗОВ Condition}c{ЗАПИСАТЬ ИДЕНТИФИКАТОР}name1, adr {ОПРЕДЕЛИТЬ ТИП}d, adr {ПРИСВОИТЬ} left, flag, right {ЗАКРЕПИТЬ}name2

d, right <- c

adr <- НовыйИдентификатор

adr1 <- adr

name1, left, name2 <- name

flag <- 0