- •Описание атрибутно-транслирующих грамматик
- •1.Грамматика раздела описания программы
- •2. Грамматика раздела описания меток
- •3. Грамматика раздела описания констант
- •4. Грамматика раздела описания типов
- •5. Грамматика раздела описания переменных
- •8. Грамматика описания операторов
- •9. Грамматика видов операторов
- •10. Грамматика операторов ввода и вывода
- •11. Грамматика оператора присваивания
- •12. Грамматика операторов цикла, условного оператора и оператора безусловного перехода
- •13. Грамматика операторов над списком
- •14. Грамматика логических выражений
- •15. Грамматика арифметических выражений
- •16. Грамматика вызовов функций
- •2. Грамматика раздела описания меток
- •3. Грамматика раздела описания констант
12. Грамматика операторов цикла, условного оператора и оператора безусловного перехода
Входные символы
Имя |
Семантика |
OManager |
Общее название операторов условия, цикла и безусловного перехода |
OGo |
Оператор безусловного перехода |
OIf |
Оператор условия |
OWh |
Оператор цикла |
CO |
Составной оператор |
MnO |
Последовательность операторов |
L |
Метка |
Condition |
Логическое выражение |
Операционные символы
Имя символа |
Семантика |
Атрибуты |
{ВЫЗОВ L}a, {ВЫЗОВV}a, {ВЫЗОВCondition}a |
Вызовы соответствующих ДМП-процессоров. Результаты их работы запоминаются как атрибут a |
a-синтезированный |
{БП} p2 |
Безусловный переход. Генерируется триадаBRLp. |
p – синтезированный |
{УПЛ}l, f |
Переход по условию f=false. Если типfнеboolean– ошибка.l– адрес метки в таблице меток. Генерируется триадаBF l f |
f – унаследованный,l -синтезированный |
{МЕТКА}k |
В таблицу меток по адресу kзаносится адрес триады, следуюшей за этой меткой |
k - синтезированный |
Правила
OManager -> OGo
OManager -> OIf
OManager -> OWh
OGo -> goto L {ВЫЗОВ L}p1 {БП}p2
p1 <- p2
OIf -> if Condition {ВЫЗОВ Condition}b then {УПЛ}l, f O {ВЫЗОВ О} {БП}m else {МЕТКА}k1 O {ВЫЗОВ О} {МЕТКА}k2
f<-b
l,m<- НоваяМетка
k1 <-l
k2 <- m
OIf -> if Condition {ВЫЗОВ Condition}b then {УПЛ}l, f O {ВЫЗОВ О} {БП}m else {МЕТКА}k1 CO {МЕТКА}k2
f<-b
l,m<- НоваяМетка
k1 <- l
k2 <- m
OIf -> if Condition {ВЫЗОВ Condition}b then {УПЛ}l, f CO {БП}m else {МЕТКА}k1 CO {МЕТКА}k2
f<-b
l,m<- НоваяМетка
k1 <-l
k2 <-m
OIf->ifCondition{ВЫЗОВCondition}bthen{УПЛ}l, f CO{БП}melse{МЕТКА}k1O{ВЫЗОВ О}{МЕТКА}k2
f<-b
l,m<- НоваяМетка
k1 <-l
k2 <-m
OIf->ifCondition{ВЫЗОВCondition}bthen{УПЛ}l , fO{ВЫЗОВ О} {МЕТКА}k
f<-b
l<- НоваяМетка
k <- l
OIf -> if Condition {ВЫЗОВ Condition}b then {УПЛ } l , f CO {МЕТКА}k
f<-b
l<-НоваяМетка
k <- l
OWh -> while{МЕТКА}k1 Condition {ВЫЗОВ Condition}b do {УПЛ}l, f O {ВЫЗОВ О} {БП}m {МЕТКА}k2
k1 <- НоваяМетка
f<-b
l <- НоваяМетка
m <- k1
k2 <- l
OWh -> while {МЕТКА}k1 Condition {ВЫЗОВ Condition}b do {УПЛ}l, f CO {БП}m {МЕТКА}k2
k1 <- НоваяМетка
f<-b
l<- НоваяМетка
m <- k1
k2 <- l
CO -> begin MnO end
CO -> begin end
MnO -> O {ВЫЗОВ О}
MnO -> MnO ; O {ВЫЗОВ О}