ВУЗ:
Составители:
34
Таблицы
переменных
Стек
Те
кущий
элемент
ПОЛИЗа
Операция
адреса значения
пуст 15 метка – в стек
1) a
2) b
1) 7
2) 10
19 16
переход к элементу ПОЛИЗ с номе-
ром, извлекаемым из верхушки стека
1) a
2) b
1) 7
2) 10
пуст 19 интерпретация завершена
1) a
2) b
1) 7
2) 10
Пример 2.19. Построим интерпретатор ПОЛИЗа для языка М.
Введем следующие обозначения процедур и функций:
1)
addr(1) – функция, выдающая адрес ячейки, отведенной для хранения
лексемы
l;
2)
cont(А) – функция, выдающая содержимое ячейки с адресом А;
3)
let(А, х) – процедура записи в ячейку с адресом А значения х;
4)
inst(x) – процедура записи в стек значения х;
5)
outst(x) – процедура считывания из стека значения х.
Тело интерпретатора ПОЛИЗа будет иметь следующий вид:
free:=1; {на начало P}
repeat
LEX
:=P[free]; {очередная лексема}
n
:=LEX[1]; k:=LEX[2];
case n of
0: inst(k); {метка - в стек}
5: inst(addr(LEX)); {адрес - в стек}
1,3,4: inst(cont(addr(LEX))); {значение - в стек}
2: {знак операции}
case k of
8{+}: begin outst(у); outst(x); inst(x+y) end;
9{-}: begin outst(у); outst(x); inst(x-y) end;
…
{аналогично для *, / и других операций}
14{¬}: begin outst(x); inst(not x) end;
5{:=} begin outst(x); outst(А); let(А, х) end;
18{!}: begin outst(free); free:=free-1 end;
19{!F}: begin
outst
(free1); outst(B);
if B
=false then free:=free1-1;
end
;
20{R}: begin outst(A); read(x); let(А, х) end;
21{W}: begin outst(x); write(x) end
end
Те Таблицы кущий переменных Стек Операция элемент адреса значения ПОЛИЗа 1) a 1) 7 пуст 15 метка – в стек 2) b 2) 10 переход к элементу ПОЛИЗ с номе- 1) a 1) 7 19 16 ром, извлекаемым из верхушки стека 2) b 2) 10 1) a 1) 7 пуст 19 интерпретация завершена 2) b 2) 10 Пример 2.19. Построим интерпретатор ПОЛИЗа для языка М. Введем следующие обозначения процедур и функций: 1) addr(1) – функция, выдающая адрес ячейки, отведенной для хранения лексемы l; 2) cont(А) – функция, выдающая содержимое ячейки с адресом А; 3) let(А, х) – процедура записи в ячейку с адресом А значения х; 4) inst(x) – процедура записи в стек значения х; 5) outst(x) – процедура считывания из стека значения х. Тело интерпретатора ПОЛИЗа будет иметь следующий вид: free:=1; {на начало P} repeat LEX:=P[free]; {очередная лексема} n:=LEX[1]; k:=LEX[2]; case n of 0: inst(k); {метка - в стек} 5: inst(addr(LEX)); {адрес - в стек} 1,3,4: inst(cont(addr(LEX))); {значение - в стек} 2: {знак операции} case k of 8{+}: begin outst(у); outst(x); inst(x+y) end; 9{-}: begin outst(у); outst(x); inst(x-y) end; …{аналогично для *, / и других операций} 14{¬}: begin outst(x); inst(not x) end; 5{:=} begin outst(x); outst(А); let(А, х) end; 18{!}: begin outst(free); free:=free-1 end; 19{!F}: begin outst(free1); outst(B); if B=false then free:=free1-1; end; 20{R}: begin outst(A); read(x); let(А, х) end; 21{W}: begin outst(x); write(x) end end 34
Страницы
- « первая
- ‹ предыдущая
- …
- 32
- 33
- 34
- 35
- 36
- …
- следующая ›
- последняя »