Скачиваний:
15
Добавлен:
01.05.2014
Размер:
491.01 Кб
Скачать

Атг для оператора

  1. N1  begin N2 end

  2. N1  begin if Expressiont,v,n then {JFL}nl,t,v,n N3 end {DEFL}nl

nl  newlabel // Метка на которую нужно перейти

t // тип выражения

v //Значение выражения

n // Если переменная, то номер в таблице переменных, n=-1, тогда в v – ссылка.

{JFL} nl,t,v,n

If t=boolean then

{ if n>0 then X=n else X=v

nl := newlabel

Выдать на выход триаду вида JFL nl, X

} else {Ошибка типа выражения}

  1. N2  N3

  2. N2  N3 ;

  3. N2  N3 ; N2

  4. N2  N4

  5. N2  N4 ;

  6. N2  N4 ; N2

  7. N3  idln : {DEFL}n N3

n // номер метки в таблице меток

{DEFL}n

Выдать на выход триаду вида DEFL n,

  1. N3  idvt1,v1,n1 := Expressiont,v,n {EQU}t,v,n,t1,v1,n1

t //Тип выражения

v //Значение выражения

n // Если переменная, то номер в таблице переменных, n=-1, тогда в v – ссылка.

t1 //Тип переменной

v1 // неиспользуется

n1 // должен быть >0

{EQU}t,n,t1,v1,n1

if t совместимо t1 then

{ if n>0 then

{ if n1>0 then X=n1 else X=v1

Выдать триаду вида EQU X,n

}else {Ошибка : ожидалась переменная}

}else {Ошибка совместимости типов}

  1. N3  idvt,v,n [Expressiont1,v1,n1 , Expressiont2,v2,n2 ] := Expressiont3,v3,n3 {EQUM}t,n,t1,v1,n1,t2,v2,n2,t3,n3,v3

t1,2,3 //Тип выражения

v1,2,3 //Значение выражения

n1,2,3 // Если переменная, то номер в таблице переменных, n=-1, тогда в v – ссылка.

t //Тип переменной

v // неиспользуется

n // должен быть >0

{EQUM}t,n,t1,v1,n1,t2,v2,n2,t3,n3,v3

if (t совместимо t3) then

{if t2,t3<> boolean, boolmatr)

{ if n>0 then

{ if n3>0 then Z=n3 else Z=v3

if n1>0 then X=n1 else X=v1

if n2>0 then Y=n2 else Y=v2

Выдать триаду вида EQU Z,n

ARG X,Y

}else {Ошибка : ожидалась переменная}

} else {Ошибка в типе индекса}

}else {Ошибка совместимости типов}

  1. N3  got idln {JMP}n

n // номер метки в таблице меток

Выдать на выход триаду вида JMP n,

  1. N3  write ( N11 )

  2. N3  writeln ( N11 ) {WRITELN}

{WRITELN}

Выдать на выход триаду вида WRITE #13#10 ,

  1. N3  write

  2. N3  writeln {WRITELN}

  3. N3  repeatnum1 N2 until Expressiont,v,n {JF}num2, t,v,n

Num2num1 // запомнить номер триады на которую нужно перейти

t // тип выражения

v //Значение выражения

n // Если переменная, то номер в таблице переменных, n=-1, тогда в v – ссылка.

{JF}num2 ,t,v,n

if t=boolean {

if n>0 then X=n else X=v

Выдать на выход триаду вида JF num2, X}

Else { Ошибка типа условия }

  1. N3  N1

  2. N3  read ( idvt,v,n ) {READ}t,v,n

t // тип переменной

v = 0 // неопределено

n // Номер в таблице переменных

if t<>boolmatr then

{ Выдать на выход триаду вида READ n,t}

else {Ошибка типа переменной}

  1. N3  readln ( idvt,v,n )

t // тип переменной

v = 0 // неопределено

n // Номер в таблице переменных

if t<>boolmatr then

{ Выдать на выход триаду вида READ n,t

WRITE #13#10 , }

else {Ошибка типа переменной}

  1. N11  N12t,v,n {WRITE}v,n

t // Тип выражения (строка)

v // Значение

n // Переменная или строка

{WRITE}t,v,n

if t=0 then {X=содержимое строки }

else

if t<>boolmatr then

{ if n>0 then X=n else X=v

Выдать на выход триаду вида WRITE X, }

  1. N11  N11 , N12 t,v,n {WRITE}v,n

// Семантика как в 21

  1. N12t,v,n  strv1

t 0 // Нулевой тип

v v1 // Номер строки

n-2 // n=-2, тогда в v – ссылка на строку.

  1. N12t,v,n  Expressiont1,v1,n1

tt1 // Тип выражения

vv1 // Значение выражения или ссылка на результат выполнения триады

nn1 // Если переменная, то номер в таблице переменных, n=-1, тогда в v – ссылка.

  1. N4  if Expressiont,v,n then {JFL}nl,t,v,n N3 else {JMP}nl2 {DEFL}nl N3 {DEFL}nl2

Семантика как в 2

nl2 // Вторая метка

  1. N4  if Expressiont,v,n then {JFL}nl,t,v,n N3 {DEFL}nl

Семантика как в 2

  1. N4  if Expressiont,v,n then {JFL}nl,t,v,n N3 else {JMP}nl2 {DEFL}nl N4 {DEFL}nl2

Семантика как в 25