ВУЗ:
Составители:
Как только при считывании лексем встречается ":",то
записанные в стек номера выводятся и по ним в таблице
идентификаторов проставляется в поле "описан" 1 (к этому моменту
там должен быть 0). Если очередная лексема есть "int" или "bool",
то попутно в таблице идентификторов поле "тип" заполняется
соответствующим типом.
П е р е м е н н ы е:
LEXO лексема; {лексема -двумерные числовые массивы
LEX очередная лексема (п,к)}
П р о ц е д у р ы:
QL LEXO: = LEX; LEX:= очередная лексема;
inst(l) запись в стек числа 1;
outst(l) вывод из стека числа 1;
instl inst (LEXO[2]);
dec(t) вывод всех чисел из стека; вызов decid (1,t);
decid(l,t) проверка и заполнение поля "описан" и заполнение
поля "тип" в таблице идентификаторов для лексемы
с номером l и типа t.
procedure decid (1:..; t:...);
begin if TI [1].descrid =1 then ERR (decl)
else begin
TI[l].descrid : = 1;
TI[l].typid := t
end;
procedure dec(t: ...);
begin outst (e);
while l<>0 do
begin decid (1,t);
outst (1)
end
end;
Правило Д принимает вид:
Д::=inst(0)>I<<innstl>{,I<instl>}:[int<dee(int)>,bool<dee(bool)>]
procedure D;
begin inst(0);I;instl;
while EQ(`,`)do begin Gl;I;instl end;
if EQ(`:`) then Gl else ERR(dsl);
if EQ(`int`)then begin GL; dec `int` end
else if EQ (`bool`) then begin GL; dec (bool) end
else ERR(ds2)
end;
20
Как только при считывании лексем встречается ":",то записанные в стек номера выводятся и по ним в таблице идентификаторов проставляется в поле "описан" 1 (к этому моменту там должен быть 0). Если очередная лексема есть "int" или "bool", то попутно в таблице идентификторов поле "тип" заполняется соответствующим типом. П е р е м е н н ы е: LEXO лексема; {лексема -двумерные числовые массивы LEX очередная лексема (п,к)} П р о ц е д у р ы: QL LEXO: = LEX; LEX:= очередная лексема; inst(l) запись в стек числа 1; outst(l) вывод из стека числа 1; instl inst (LEXO[2]); dec(t) вывод всех чисел из стека; вызов decid (1,t); decid(l,t) проверка и заполнение поля "описан" и заполнение поля "тип" в таблице идентификаторов для лексемы с номером l и типа t. procedure decid (1:..; t:...); begin if TI [1].descrid =1 then ERR (decl) else begin TI[l].descrid : = 1; TI[l].typid := t end; procedure dec(t: ...); begin outst (e); while l<>0 do begin decid (1,t); outst (1) end end; Правило Д принимает вид: Д::=inst(0)>I<{,I }:[int ,bool ] procedure D; begin inst(0);I;instl; while EQ(`,`)do begin Gl;I;instl end; if EQ(`:`) then Gl else ERR(dsl); if EQ(`int`)then begin GL; dec `int` end else if EQ (`bool`) then begin GL; dec (bool) end else ERR(ds2) end; 20
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »