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

Диаграмма переходов

Lex – текущий входной символ

St –верхушка стека

S  S1 – Чтение лексемы, поиск действия в управляющей таблице (верхушка стека, лексема)

S1  P – Занесение атрибутов терминалов в стек атрибутов, обработка операционных символов, находящихся в середине правой части правила.

S1  C – Вычисление атрибутов, обработка операционных символов, находящихся в конце правой части правила.

S1  F – Вывод полученного потока триад.

S1  E – Вывод ошибки, завершение работы.

P  S1 – Чтение следующей лексемы.

C  S1 – Чтение следующей лексемы.

С  E – Вывод ошибки, завершение работы.

Описание промежуточного языка

Описание триад

Триада

Семантика триады

EQU B, A

A:=B если A элемент boolmatr, то добавляется AGR X,Y (координаты ячейки матрицы)

DEFL L, -

Описание метки L

JMPL L, -

Безусловный переход на триаду с меткой L

JMP m, -

Безусловный переход на триаду с номером m

READ X, T

Получает значение Х с консоли, типа T

WRITE X, -

Выводит значение X на консоль

VAR V, T

Объявляет переменную V типа T. (если тип boolmatr[M,N], то добавляется ARG M,N)

ADD A, B

Сложение A + B

SUB A, B

Вычитание A – B

DIV A, B

Целочисленное деление A div B

MUL A, B

Умножение A * B

AND A, B

Логическое-И A and B

OR A, B

Логическое-ИЛИ A or B

XOR A, B

Логическое исключение A xor B

NOT A, -

Логическое отрицание A

SHL A, B

Побитовый сдвиг влево A, на B бит, справа появляются 0

SHR A, B

Побитовый сдвиг вправо A, на B бит, слева появляются 0

ELM M, X

Элемент булевской матрицы M, используется с последовательной триадой ARG Y, - M[x,y]

CE X, Y

Вычисляет результат сравнения (X=Y) результат (true, false).

CNE X, Y

Вычисляет результат сравнения (X<>Y) результат (true, false).

CL X, Y

Вычисляет результат сравнения (X<Y) результат (true, false).

CG X, Y

Вычисляет результат сравнения (X>Y) результат (true, false).

CLE X, Y

Вычисляет результат сравнения (X<=Y) результат (true, false).

CGE X, Y

Вычисляет результат сравнения (X>=Y) результат (true, false).

JFL L, E

Переход на метку L если E=false

JF M, E

Переход на триаду с номером m если E=false

ARG X, Y

Интерпретируется, как дополнительный параметр для триады, за которой следует

Описание перевода атг для программы

  1. N1  program idc ; N3 .

  2. N1  N3 .

  3. N3  N16 operator

  4. N3  operator

  5. N7  idl , N7

  6. N7  idl

  7. N10  N8 N10

  8. N10  N8

  9. N12t  Expressiont1,v1,n1 .. Expressiont2,v2,n2

t  longint // тип диапазона longint

If (t1, t2 = boolean, boolmatr) then {ошибка построения типа диапазона}

if (v1>v2) then {ошибка, константа слева должна быть меньше}

  1. N12t  idtt1

t  t1 // Номер типа в таблице типов

  1. N12t  boolmatr [Expressiont1,v2,n3 , Expressiont2,v2,n2 ]

t  Номер boolmatr в таблице типов

if (t1,t2= boolean, boolmatr) then {ошибка типа выражения}

  1. N16  N18 N16

  2. N16  label N7 ;

  3. N16  const N10

  4. N16  type N23

  5. N16  var N26

  6. N16  N19 N16

  7. N16  N20 N16

  8. N16  N21 N16

  9. N18  label N7 ;

  10. N19  const N10

  11. N20  type N23

  12. N21  var N26

  13. N22  idt = N12t ;

  14. N23  N22 N23

  15. N23  idt = N12t ;

  16. N25  idvt,v,n , N25 {VAR}t,n

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

  1. N25  idvt,v,n {VAR}t,n

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

v0

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

{VAR}t.n

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

if t=boolmatr {выдать на выход триаду ARG M,N}

  1. N26  N25 : N12 ;

  2. N26  N25 : N12 ; N26

  3. N8  idct1,v1,n1 = Expressiont2,v2,n2 ;

t1t2 //Присвоение типа константе

v1v2 // Присвоение значения константы

n1n2 // Если n>0 то ошибка переменная в константном выражении

  1. N8  idct1,v1,n1 : N12t = Expressiont2,v2,n2 ;

t1t2 //Присвоение типа константе если t=t2, иначе ошибка

v1v2 // Присвоение значения константы

n1n2 // Если n>0 то ошибка переменная в константном выражении