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

UptoLike

4.3 Семантический анализ выражений
Задачи - проверить описаны ли переменные, встречающиеся
в выражениях, соответствуют ли типы операндов друг другу и
операции. Вводится таблица 4.2 двуместных операций.
Таблица 4.2
Операция Тип 1 Тип 2 Тип результата
+
>
Int
Int
Int
Int
Int
Bool
и стек, в который в соответствии с разбором выражения E заносятся
типы операндов и знаки операции, а после семантической про-
верки в стеке оставляется только тип результата. После разбора
всего выражения в стеке остается тип этого выражения.
П е р е м е н н а я:
LEX очередная лексема - пара (n,k).
П р о ц е д у р ы работы со стеком:
inst(l) запись в стек строка 1;
ontst(l) вывод из стека строки 1;
instl inst (LEX).
П р о ц e д у р ы семантического анализа:
checkid если LEX - идентификатор, то по TI проверяется,
описан ли он, и , если описан, его тип помещается в стек;
checkop вывод из стека типов операндов, знака операции,
вызов процедуры gettype (op, tl, t2, t), проверка соответствия типов
и запись в стек типа результата;
dettype (ор, t1, t2, t) - с помощью TOP по операции ор дает тип
t результата и типы t1,t2 операндов;
cnecknot проверка типа в случае одноместной
операции "¬".
procedure checkid;
begin
k:=LEX [2];
if TI[k]*descrid = 0 then ERR(chl);
inst(TI[k]*typid)
end;
procedure checkop;
begin
21
4.3 Семантический анализ выражений

      Задачи - проверить описаны ли переменные, встречающиеся
в выражениях, соответствуют ли типы операндов друг другу и
операции. Вводится таблица 4.2 двуместных операций.

                  Таблица 4.2

                      Операция        Тип 1        Тип 2      Тип результата
                         +             Int          Int             Int
                         >             Int          Int            Bool
                         …


и стек, в который в соответствии с разбором выражения E заносятся
типы операндов и знаки операции, а после семантической про-
верки в стеке оставляется только тип результата. После разбора
всего выражения в стеке остается тип этого выражения.
      П е р е м е н н а я:
      LEX очередная лексема - пара (n,k).
      П р о ц е д у р ы работы со стеком:
      inst(l) запись в стек строка 1;
      ontst(l) вывод из стека строки 1;
      instl inst (LEX).
      П р о ц e д у р ы семантического анализа:
      checkid если LEX - идентификатор, то по TI проверяется,
описан ли он, и , если описан, его тип помещается в стек;
      checkop вывод из стека типов операндов, знака операции,
вызов процедуры gettype (op, tl, t2, t), проверка соответствия типов
и запись в стек типа результата;
      dettype (ор, t1, t2, t) - с помощью TOP по операции ор дает тип
t результата и типы t1,t2 операндов;
       cnecknot проверка типа в        случае    одноместной
       операции "¬".
       procedure checkid;
       begin
            k:=LEX [2];
             if TI[k]*descrid = 0 then ERR(chl);
             inst(TI[k]*typid)
      end;
      procedure checkop;
      begin


                                                                   21