Методические указания к лабораторным работам по курсу "Теория вычислительных процессов и структур". Домашова Д.В - 19 стр.

UptoLike

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