Разработка компиляторов. Ишакова Е.Н. - 30 стр.

UptoLike

Составители: 

30
Пример 2.14. Оператор x:=x+9 в ПОЛИЗе имеет вид: x x 9 + :=.
Оператор перехода в терминах ПОЛИЗа означает, что процесс интер-
претации необходимо продолжить с того элемента ПОЛИЗа, который указан
как операнд операции перехода. Чтобы можно было ссылаться на элементы
ПОЛИЗа, будем считать, что все они пронумерованы, начиная с единицы (на-
пример, последовательные элементы одномерного массива). Пусть ПОЛИЗ
оператора, помеченного меткой
L, начинается с номера p, тогда оператору без-
условного перехода
goto L в ПОЛИЗе будет соответствовать:
p!, где ! – операция выбора элемента ПОЛИЗа, номер которого равен p.
Условный оператор. Введем вспомогательную операциюусловный
переход «по лжи» с семантикой
if (not B) then goto L. Это двуместная операция с
операндами
B и L. Обозначим ее !F, тогда в ПОЛИЗе она будет записываться:
B p !F, где pномер элемента, с которого начинается ПОЛИЗ оператора,
помеченного меткой
L.
С использованием введенной операции условный оператор
if B then S
1
else S
2
в ПОЛИЗе будет записываться:
B p
1
!F S
1
p
2
! S
2
, где p
1
номер элемента, с которого начинается ПОЛИЗ
оператора
S
2
, а p
1
оператора, следующего за условным оператором.
Пример 2.15. ПОЛИЗ оператора if x>0 then x:=x+8 else x:=x-3 представлен
в таблице 2.3.
Таблица 2.3 – ПОЛИЗ оператора if
лексема
x
0 > 13 !F
x x
8 + := 18 !
x x
3 - :=
номер 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Оператор цикла. С учетом введенных операций оператор цикла
while B do S в ПОЛИЗе будет записываться:
B p
1
!F S p
o
!, где p
o
номер элемента, с которого начинается ПОЛИЗ вы-
ражения
B, а p
1
оператора, следующего за данным оператором цикла.
Операторы ввода и вывода языка М одноместные. Пусть Rобозначе-
ние операции ввода, а
Wобозначение операции вывода, тогда оператор read(I)
в ПОЛИЗе запишется как
I R, а оператор write(E) – E W.
Составной оператор begin S
1
; S
2
;...; S
n
end в ПОЛИЗе записывается как
S
1
S
2
... S
n
.
Пример 2.16. ПОЛИЗ оператора while n>3 do begin write(n*n-1); n:=n-1
end представлен в таблице 2.4.
Таблица 2.4 – ПОЛИЗ оператора while
лексема
n
3 > 19 !F
n n
*1-
W n n
1 - := 1 !
номер 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
     Пример 2.14. Оператор x:=x+9 в ПОЛИЗе имеет вид: x x 9 + :=.
     Оператор перехода в терминах ПОЛИЗа означает, что процесс интер-
претации необходимо продолжить с того элемента ПОЛИЗа, который указан
как операнд операции перехода. Чтобы можно было ссылаться на элементы
ПОЛИЗа, будем считать, что все они пронумерованы, начиная с единицы (на-
пример, последовательные элементы одномерного массива). Пусть ПОЛИЗ
оператора, помеченного меткой L, начинается с номера p, тогда оператору без-
условного перехода goto L в ПОЛИЗе будет соответствовать:
     p!, где ! – операция выбора элемента ПОЛИЗа, номер которого равен p.
     Условный оператор. Введем вспомогательную операцию – условный
переход «по лжи» с семантикой if (not B) then goto L. Это двуместная операция с
операндами B и L. Обозначим ее !F, тогда в ПОЛИЗе она будет записываться:
     B p !F, где p – номер элемента, с которого начинается ПОЛИЗ оператора,
     помеченного меткой L.
       С     использованием     введенной    операции    условный     оператор
if B then S1 else S2 в ПОЛИЗе будет записываться:
     B p1 !F S1 p2 ! S2, где p1 – номер элемента, с которого начинается ПОЛИЗ
     оператора S2, а p1 – оператора, следующего за условным оператором.
      Пример 2.15. ПОЛИЗ оператора if x>0 then x:=x+8 else x:=x-3 представлен
в таблице 2.3.
     Таблица 2.3 – ПОЛИЗ оператора if
лексема x    0   > 13 !F x      x   8   + := 18 ! x x 3 - := …
 номер 1     2   3 4 5 6        7   8   9 10 11 12 13 14 15 16 17 18
      Оператор цикла. С учетом введенных операций оператор цикла
while B do S в ПОЛИЗе будет записываться:
     B p1 !F S po !, где po – номер элемента, с которого начинается ПОЛИЗ вы-
     ражения B, а p1 – оператора, следующего за данным оператором цикла.
        Операторы ввода и вывода языка М одноместные. Пусть R – обозначе-
ние операции ввода, а W – обозначение операции вывода, тогда оператор read(I)
в ПОЛИЗе запишется как I R, а оператор write(E) – E W.
        Составной оператор begin S1; S2;...; Sn end в ПОЛИЗе записывается как
S1 S2... Sn.
        Пример 2.16. ПОЛИЗ оператора while n>3 do begin write(n*n-1); n:=n-1
end представлен в таблице 2.4.
     Таблица 2.4 – ПОЛИЗ оператора while
лексема n 3 > 19 !F n n * 1 - W n n 1 - := 1 ! …
 номер 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

                                                                             30