ВУЗ:
Составители:
outst (kop2); outst(op); outst(topl);
gettype(op,tl,t2,t);
if(topl< >tl)or (top2< >t2)then ERR(ch2);
inst(t)
end;
procedure checknot;
begin
outst(t); if t< > bool then ERR(ch3); inst(t)
end;
Правила, расширенные семантическим анализом,
принимают вид:
Е:: = Е1 | El [ - ] <instl> El
<checkop>
El:: = Т {[ ∪ ] <instl> T <checkop>}
T:: = F {[ ∩ ] <instl> F<checkop>}
F:: = I <checkid> | N <inst(int)> | [false,true] < inst (bool)>|
¬F <checknot>| (E)
Проверим правильность порядка операций x+5*y в
соответствии с рисунком 4.1.
int
int
+
int
int
*
int
+
int
y
5
FF
X
F
TTT T
E1
E
Рисунок 4.1 – Семантическое дерево выражения x+5*y
4.4 Пpовeрка типов операторах
В операторе присваивания проверяется одинаковость типов
слева и справа от символа ":=",а в операторах условном и цикла про-
веряется булевость выражения Е.
Это достигается включением в правило S процедур:
22
outst (kop2); outst(op); outst(topl); gettype(op,tl,t2,t); if(topl< >tl)or (top2< >t2)then ERR(ch2); inst(t) end; procedure checknot; begin outst(t); if t< > bool then ERR(ch3); inst(t) end; Правила, расширенные семантическим анализом, принимают вид: Е:: = Е1 | El [ - ]El El:: = Т {[ ∪ ] T } T:: = F {[ ∩ ] F } F:: = I | N | [false,true] < inst (bool)>| ¬F | (E) Проверим правильность порядка операций x+5*y в соответствии с рисунком 4.1. E int + int * int E1 int + int int TT T F F F X 5 y Рисунок 4.1 – Семантическое дерево выражения x+5*y 4.4 Пpовeрка типов операторах В операторе присваивания проверяется одинаковость типов слева и справа от символа ":=",а в операторах условном и цикла про- веряется булевость выражения Е. Это достигается включением в правило S процедур: 22
Страницы
- « первая
- ‹ предыдущая
- …
- 17
- 18
- 19
- 20
- 21
- …
- следующая ›
- последняя »