ВУЗ:
Составители:
25
При выполнении процедуры D вводится стековая переменная-массив, в
которую заносится контрольное число 0. По мере успешного выполнения про-
цедуры I в стек заносятся номера считываемых из файла лексем, под которыми
они записаны в таблице идентификаторов. Как только при считывании лексем
встречается лексема «:», из стека извлекаются записанные номера и по ним в
таблице идентификаторов проставляется 1 в поле «описан» (к этому моменту
там должен быть 0). Если очередная лексема будет «int» или «bool», то попутно
в таблице идентификаторов поле «тип» заполняется соответствующим типом.
Пример 2.11. Пусть фрагмент описания на модельном языке имеет вид:
var k, sum: int … Тогда соответствующий фрагмент файла лексем: (1, 2) (4, 1)
(2, 3) (4, 2)…Содержимое стека при выполнении процедуры D представлено на
рисунке 2.7.
Рисунок 2.7 – Содержимое стека при выполнении процедуры D
Для реализации обработки описаний введем следующие обозначения пе-
ременных и процедур:
1) LEX – переменная, хранящая значение очередной лексемы,
представляющая собой одномерный массив размером 2, т.е. для лексемы (n, k)
LEX[1]=n, LEX[2]=k;
2) gl – процедура считывания очередной лексемы в переменную LEX;
3) inst(l) - процедура записи в стек числа l;
4) outst(l) – процедура вывод из стека числа l;
5) instl – процедура записи в стек номера, под которым лексема хранится в
таблице идентификаторов, т.е. inst(LEX[2]);
6) dec(t) - процедура вывода всех чисел из стека и вызова процедуры
decid(1, t);
7) decid(l, t) – процедура проверки и заполнения поля «описан» и «тип»
таблицы идентификаторов для лексемы с номером l и типа t.
Процедуры dec и decid имеют вид:
procedure decid (l:..; t:...);
begin
if TI[l].descrid =1 then ERR
else begin
TI[l].descrid: = 1;
TI[l].typid:= t
end
end;
procedure dec(t: ...);
begin
outst(l);
0 1
2
При выполнении процедуры D вводится стековая переменная-массив, в которую заносится контрольное число 0. По мере успешного выполнения про- цедуры I в стек заносятся номера считываемых из файла лексем, под которыми они записаны в таблице идентификаторов. Как только при считывании лексем встречается лексема «:», из стека извлекаются записанные номера и по ним в таблице идентификаторов проставляется 1 в поле «описан» (к этому моменту там должен быть 0). Если очередная лексема будет «int» или «bool», то попутно в таблице идентификаторов поле «тип» заполняется соответствующим типом. Пример 2.11. Пусть фрагмент описания на модельном языке имеет вид: var k, sum: int … Тогда соответствующий фрагмент файла лексем: (1, 2) (4, 1) (2, 3) (4, 2)…Содержимое стека при выполнении процедуры D представлено на рисунке 2.7. 0 1 2 Рисунок 2.7 – Содержимое стека при выполнении процедуры D Для реализации обработки описаний введем следующие обозначения пе- ременных и процедур: 1) LEX – переменная, хранящая значение очередной лексемы, представляющая собой одномерный массив размером 2, т.е. для лексемы (n, k) LEX[1]=n, LEX[2]=k; 2) gl – процедура считывания очередной лексемы в переменную LEX; 3) inst(l) - процедура записи в стек числа l; 4) outst(l) – процедура вывод из стека числа l; 5) instl – процедура записи в стек номера, под которым лексема хранится в таблице идентификаторов, т.е. inst(LEX[2]); 6) dec(t) - процедура вывода всех чисел из стека и вызова процедуры decid(1, t); 7) decid(l, t) – процедура проверки и заполнения поля «описан» и «тип» таблицы идентификаторов для лексемы с номером l и типа t. Процедуры dec и decid имеют вид: procedure decid (l:..; t:...); begin if TI[l].descrid =1 then ERR else begin TI[l].descrid: = 1; TI[l].typid:= t end end; procedure dec(t: ...); begin outst(l); 25
Страницы
- « первая
- ‹ предыдущая
- …
- 23
- 24
- 25
- 26
- 27
- …
- следующая ›
- последняя »