ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »
