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

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

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

Имя символа

Семантика

Атрибуты

VarDesc

Раздел описания переменной

ManyVarDef

Перечень определений

VarDef

Определение ряда переменных одного типа

VarNamesbeg, move

Перечень имен переменных. Атрибутbeg– адрес первой переменной в перечне. Атрибутmove – количество переменных в перечне

beg, move - синтезированные

Idname

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

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

integername, realname, booleanname

Ключевое слово – имя типа. Атрибут соответствует входному символу

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

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

Имя символа

Семантика

Атрибуты

{ТИП ПЕРЕМЕННОЙ} typename,beg, move

Устанавливает имя типа typenameдля перечня переменных, расположенных подряд в таблице идентификаторов,beg– адрес первой переменной в перечне,move– количество переменных (Каждой переменной соответствует строка в таблице идентификаторов). Если имя типа отсутствует в таблице пользовательских типов – синтаксическая ошибка

typename, beg, move – синтезированные

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

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

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

Правила:

VarDesc->varManyVarDef

VarDef->VarNamesbeg, move :Idname{ТИП ПЕРЕМЕННОЙ}typename,beg1, move1

typename <- name

beg1 <- beg

move1 <- move

VarDef -> VarNamesbeg, move : integername {ТИП ПЕРЕМЕННОЙ}typename, beg1, move1

typename <- name

beg1 <- beg

move1 <- move

VarDef -> VarNamesbeg, move : realname {ТИП ПЕРЕМЕННОЙ}typename, beg1, move1

typename <- name

beg1 <- beg

move1 <- move

VarDef -> VarNamesbeg, move : booleanname {ТИП ПЕРЕМЕННОЙ}typename, beg1, move1

typename <- name

beg1 <- beg

move1 <- move

ManyVarDef -> VarDef

ManyVarDef -> ManyVarDef ; VarDef

VarNamesbeg, move -> Idname {ЗАПИСАТЬ ИДЕНТИФИКАТОР}id, adr

id <- name

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

beg <- adr

move <- 1

VarNames beg, move -> VarNamesbeg1, move1 , Idname {ЗАПИСАТЬ ИДЕНТИФИКАТОР}id, adr

id<- name

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

beg <- beg1

move <- move1 +1

  1. Грамматика меток

Символы грамматики

Имя символа

Семантика

Атрибуты

Lb

Метка с адресом bв таблице меток

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

Idname

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

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

Intname

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

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

{GETLABEL}id, a

Из таблицы меток берется адрес a метки с именем id.

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

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

Правила

Lb -> Idname {GETLABEL}id, a

id <- name

b <-a

Lb -> Intname {GETLABEL}id, a

id <- name

b <-a

  1. Грамматика переменных

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

Имя

Семантика

Атрибуты

Vc

Переменная с адресом cв таблице идентификаторов

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

Fp

Поле переменной с адресом pв таблице идентификаторов

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

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

Имя символа

Семантика

Атрибуты

{GETID}id, a

Получить адрес aидентификатораcименемidв таблице идентификаторов

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

{ПОЛЕ ЗАПИСИ}q,r,res

По адресам qпеременной иrимени поля в таблице пользовательских типов получить поле записи переменной и записать результат в поле таблицы промежуточных значений с адресомres

q,r– унаследованные,res- синтезированный

Правила

Vc->Fp

c<-p

Fp -> Idname {GETID}id, a

id <- name

p <- a

Fp1 -> Fp2 . Idname {GETID}id, a {ПОЛЕ ЗАПИСИ}q, r, res

id <- name

q <- p2

r <- a

res <- НоваяТриада

p1 <-res