ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 16
- 17
- 18
- 19
- 20
- …
- следующая ›
- последняя »