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

Атг для выражения

  1. N2t,v,n  N7t1,v1,n1

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

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

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

  1. N2 t,v,n  N7 t1,v1,n1 < N2 t2,v2,n2 {C<}t1, t2,v1,v2,n1,n2

t  boolean.

n -1 // Если n=-1 то в v находится ссылка на результат выполнения триады

v (№)// Номер триады с результатом

{C<}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N2 t,v,n  N7 t1,v1,n1 > N2 t2,v2,n2 {C>}t1, t2,v1,v2,n1,n2

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

{C>}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N2 t,v,n  N7 t1,v1,n1 <= N2 t2,v2,n2 {C<=}t1, t2,v1,v2,n1,n2

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

{C<=}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N2 t,v,n  N7 t1,v1,n1 >= N2 t2,v2,n2 {C>=}t1, t2,v1,v2,n1,n2

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

{C>=}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N2 t,v,n  N7 t1,v1,n1<> N2 t2,v2,n2 {C<>}t1, t2,v1,v2,n1,n2

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

{C<>}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N2 t,v,n  N7 t1,v1,n1 = N2 t2,v2,n2 {C=}t1, t2,v1,v2,n1,n2

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

{C=}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N1t,v,n  idvt1,0,n1

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

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

v0 // Не определено

  1. N1 t,v,n  idct1,v1,0

tt1 //Тип константы

n0 // Если n=0, то в v находится значение константы

vv1 // Значение константы

  1. N1 t,v,n  idnt1, v1,0

tt1 //Тип числа

n0 // Если n=0, то в v находится значение числа

vv1 // Значение числа

  1. N1 t,v,n  idvt3,0,n3 [ N2 t1,v1,n1 , N2 t2,v2,n2 ] {ELEM}t1, t2, t3, v1, v2,n1, n2, n3

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

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

t  boolean.

n -1 // Если n=-1 то в v находится ссылка на результат выполнения триады

v (№)// Номер триады с результатом

{ELEM}

if (t3=boolmatr) and (t1 совместим t2) then

{ Записать на выход триады вида ELEM n3, X

ARG Y , -

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

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

} else

{Ошибка обращения к матрице}

  1. N1 t,v,n  idvt3,n3 [Expression t1,v1,n1 , Expression t2,v2,n2 ]

Аналогично 11.

  1. N1 t,v,n  not N1 t1,v1,n1 {NOT}v1,n1

tt1 // Тип

n-1

v(№) // Номер триады с результатом

{NOT}

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

выдать на выход триаду вида NOT X, -

  1. N1 t,v,n  - N1 t1,v1,n1 {SUB0}t1,v1,n1

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

{SUB0}

if (t1<>boolean) and (t1<>boolmatr) then

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

выдать на выход триаду вида SUB 0, X

} else

{ Ошибка в выражении}

  1. N1 t,v,n  ( N2 t1,v1,n1 )

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

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

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

  1. N3 t,v,n  N1 t1,v1,n1 and N3 t2,v2,n2 {AND}t1, t2,v1,v2,n1,n2

tt1 // Тип общий для t1 и t2

n-1

v(№) // Номер триады с результатом

{AND}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N3 t,v,n  N1 t1,v1,n1

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

  1. N4 t,v,n  N3 t1,v1,n1 div N4 t2,v2,n2 {DIV}t1, t2,v1,v2,n1,n2

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

{DIV}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) and (t1 и t2 <> boolean или boolmatr) then

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

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

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

{ Ошибка в выражении }

  1. N4 t,v,n  N3 t1,v1,n1 mod N4 t2,v2,n2 {MOD}t1, t2,v1,v2,n1,n2

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

{MOD}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) and (t1 и t2 <> boolean или boolmatr) then

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

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

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

{ Ошибка в выражении }

  1. N4 t,v,n  N3 t1,v1,n1 shl N4 t2,v2,n2 {SHL}t1, t2,v1,v2,n1,n2

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

{SHL}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) and (t1 и t2 <> boolean или boolmatr) then

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

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

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

{ Ошибка в выражении }

  1. N4 t,v,n  N3 t1,v1,n1 shr N4 t2,v2,n2 {SHR}t1, t2,v1,v2,n1,n2

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

{SHR}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) and (t1 и t2 <> boolean или boolmatr) then

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

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

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

{ Ошибка в выражении }

  1. N4 t,v,n  N3 t1,v1,n1

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

  1. N5 t,v,n  N4 t1,v1,n1 * N5 t2,v2,n2 {MUL}t1, t2,v1,v2,n1,n2

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

{MUL}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) and (t1 и t2 <> boolean или boolmatr) then

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

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

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

{ Ошибка в выражении }

  1. N5 t,v,n  N4 t1,v1,n1

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

  1. N6 t,v,n  N5 t1,v1,n1 or N6 t2,v2,n2 {OR}t1, t2,v1,v2,n1,n2

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

{OR}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N6 t,v,n  N5 t1,v1,n1 xor N6 t2,v2,n2 {XOR}t1, t2,v1,v2,n1,n2

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

{XOR}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) then

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

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

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

{ Ошибка в выражении }

  1. N6 t,v,n  N5 t1,v1,n1

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

  1. N7 t,v,n  N6 t1,v1,n1 - N7 t2,v2,n2 {SUB}t1, t2,v1,v2,n1,n2

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

{SUB}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) or (t1 и t2 <> boolean или boolmatr) then

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

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

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

{ Ошибка в выражении }

  1. N7 t,v,n  N6 t1,v1,n1 + N7 t2,v2,n2 {ADD}t1, t2,v1,v2,n1,n2

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

{ADD}t1, t2,v1,v2,n1,n2

if (t1 совместим t2) or (t1 и t2 <> boolean или boolmatr) then

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

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

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

{ Ошибка в выражении }

  1. N7 t,v,n  N6 t1,v1,n1

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