Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемЗинаида Завадовская
1 Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Атрибутная грамматика языка IMP
2 Атрибутная грамматика ::=.symtab := emptystack ::= begin ; end.symtab := push(.tbl,.symtab) 1 ::=.symtab := 1.symtab | ; 2.symtab := 1.symtab 2.symtab := 1.symtab
3 Декларации 1 ::= 1.tbl :=.tbl | ; 2 1.tbl :=.tbl 2.tbl Условие: ids(.tbl) ids( 2.tbl) = ids – функция, которая получает множество вида имя-тип и возвращает множество всех имен
4 Возврат к.symtab ::= begin ; end.symtab := push(.tbl,.symtab).symtab := push(.tbl,.symtab)
5 Декларации ::= int.tbl := { (.name, INT) } | bool.tbl := { (.name, BOOL) } | fun ( ) : int =.tbl := { (.name, FUN(.types, INT) ) }.symtab := push(.tbl,.symtab)
6 Операторы ::=.symtab :=.symtab |.symtab :=.symtab | if then else....symtab :=.symtab
7 Операторы ::= :=.symtab :=.symtab Cond: (typeof(.name,.symtab) = INT) (typeof(.name,.symtab) = FUN) | :=.symtab :=.symtab Cond: typeof(.name,.symtab) = BOOL
8 Арифметические выражения 1 ::= | Cond: typeof(.name, 1.symtab) = INT | symtab := 1.symtab 3.symtab := 1.symtab
9 Булевские выражения ::= true | false | Cond: typeof(.name,.symtab) = BOOL | |
10 Вызов функции (Function Call) ::= ( ) Cond: typeof(.name,.symtab) = FUN Cond: rettype(.name,.symtab) = INT.expTypes := paramtypes(.name,.symtab).symtab :=.symtab Cond: are_equal_lists(.expTypes, argtypes( ),.symtab)
11 Аргументы функции ::= |, ::= |
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.