- •Описание атрибутно-транслирующих грамматик
- •1.Грамматика раздела описания программы
- •2. Грамматика раздела описания меток
- •3. Грамматика раздела описания констант
- •4. Грамматика раздела описания типов
- •5. Грамматика раздела описания переменных
- •8. Грамматика описания операторов
- •9. Грамматика видов операторов
- •10. Грамматика операторов ввода и вывода
- •11. Грамматика оператора присваивания
- •12. Грамматика операторов цикла, условного оператора и оператора безусловного перехода
- •13. Грамматика операторов над списком
- •14. Грамматика логических выражений
- •15. Грамматика арифметических выражений
- •16. Грамматика вызовов функций
- •2. Грамматика раздела описания меток
- •3. Грамматика раздела описания констант
8. Грамматика описания операторов
Входные символы:
Имя символа |
Семантика |
OperDesc |
Раздел описания операторов |
ManyOperDef |
Последовательность помеченных операторов |
LabOper |
Один помеченный оператор (возможно, составной) |
Oper |
Один непомеченный оператор (возможно, составной) |
O |
Один непомеченный несоставной оператор |
Операционные символы:
Имя символа |
Семантика |
Атрибуты |
{ВЫЗОВO} |
Вызов соответствующего ДМП-процессоров |
|
{ВЫЗОВ L}a |
Вызовы соответствующего ДМП-процессоров. Результаты его работы запоминаются как атрибут a |
a-синтезированный |
{МЕТКА}k |
В таблицу меток по адресу kзаносится адрес триады, следуюшей за этой меткой |
k - синтезированный |
Правила:
OperDesc->ManyOperDef
ManyOperDef -> ManyOperDef ; LabOper
ManyOperDef -> LabOper
LabOper -> L {ВЫЗОВ L}p : {МЕТКА}q Oper
q <- p
LabOper -> Oper
Oper -> begin ManyOperDef end
Oper -> O{ВЫЗОВO}
9. Грамматика видов операторов
Символы грамматики:
Имя символа |
Семантика |
O |
Непомеченный оператор |
OIO |
Операторы ввода и вывода |
OEq |
Оператор присваивания |
OManager |
Операторы условия, цикла и безусловного перехода |
{ВЫЗОВOIO}, {ВЫЗОВOEq}… |
Вызов соответствующих ДМП-процессоров |
Правила:
O -> OIO {ВЫЗОВ OIO}
O -> OEq {ВЫЗОВ OEq}
O -> OManager{ВЫЗОВOManager}
O -> OList{ВЫЗОВOList}
10. Грамматика операторов ввода и вывода
Входные символы:
Имя |
Семантика |
OIO |
Операторы ввода и вывода |
OOu |
Оператор вывода |
OIn |
Оператор ввода |
MD |
Последовательность данных для вывода |
D |
Единица данных для вывода |
EQ |
Арифметическое выражение |
Condition |
Логическое выражение |
V |
Переменная |
Операционные символы:
Имя символа |
Семантика |
Атрибуты |
{ВЫЗОВ EQ}a, {ВЫЗОВ V}a, {ВЫЗОВ Condition}a |
Вызовы соответствующих ДМП-процессоров. Результаты их работы запоминаются как атрибут a |
a-синтезированный |
{ВВЕСТИ}q |
Генерируется триада RD q |
q - унаследованный |
{ВЫВЕСТИ}p |
Генерируется триада WR p |
p -унаследованный |
Правила:
OIO -> OOu
OIO -> OIn
OOu -> wri ( MD )
MD -> MD , D
MD -> D
D -> EQ {ВЫЗОВ EQ}b {ВЫВЕСТИ}p
p <- b
D -> Condition {ВЫЗОВ Condition}с {ВЫВЕСТИ}p
p <- c
OIn -> rea ( V {ВЫЗОВ V}a ) {ВВЕСТИ}q
q <- a
11. Грамматика оператора присваивания
Входные символы:
Имя |
Семантика |
OEq |
Оператор присваивания |
V |
Переменная |
EQ |
Арифметическое выражение |
Condition |
Логическое выражение |
Операционные символы:
Имя символа |
Семантика |
Атрибуты |
{ВЫЗОВ EQ}a, {ВЫЗОВV}a, {ВЫЗОВCondition}a |
Вызовы соответствующих ДМП-процессоров. Результаты их работы запоминаются как атрибут a |
a-синтезированный |
{ПРИСВОИТЬ} left, flag, right |
В таблице идентификаторов ищется переменная по адресу left. Значение по адресуrightищется в таблице идентификаторов, еслиflag= 1 или в таблице промежуточных значений, еслиflag= 0. Если имя типа переменной и имя типа найденного значения не совпадают, то синтаксическая ошибка. Если переменная по адресу leftпомечена как «константа» или «метка», то синтаксическая ошибка. Иначе в поле «значение» переменной записывается содержимое поля «значение» по адресуright. |
left,right- унаследованные |
Правила
OEq->V{ВЫЗОВV}a:=EQ{ВЫЗОВEQ}b {ПРИСВОИТЬ}left, 0, right
left <- a
right <- b
OEq -> V {ВЫЗОВ V}a := Condition {ВЫЗОВ Сondition}c b {ПРИСВОИТЬ}left, 0, right
left<-a
right<-b
OEq->V{ВЫЗОВV}a=V{ВЫЗОВV}b{ПРИСВОИТЬ}left, 1, right
a<-b