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

3.1.2 Грамматика описывающая составной оператор.

G2=<T,N,R,N1>

T=Терминалы : begin , end , idl , : , idv , goto , read , readln , write , writeln, ( , ) := , , , if , then , else, ; , repeat , until , Expression , str , [ , ]

N=Нетерминалы :

N1 = составной оператор 2 ;

N2 = операторы 6 ;

N3 = оператор 13 ;

N11 = список параметров write2 ;

N12 = параметр write2 ;

N4 = условный оператор 3 ;

R=Правила :

  1. N1 beginN2 end

  2. N1  begin if Expression then N3 end

  3. N2 N3

  4. N2 N3 ;

  5. N2 N3 ; N2

  6. N2 N4

  7. N2 N4 ;

  8. N2 N4 ; N2

  9. N3 idl : N3

  10. N3 idv :=Expression

  11. N3 idv [Expression,Expression] :=Expression

  12. N3 gotoidl

  13. N3 write( N11 )

  14. N3 writeln( N11 )

  15. N3 write

  16. N3 writeln

  17. N3 repeatN2 untilExpression

  18. N3 N1

  19. N3 read( idv )

  20. N3 readln( idv )

  21. N11 N12

  22. N11 N11, N12

  23. N12 str

  24. N12 Expression

  25. N4  if Expression then N3 else N3

  26. N4 ifExpressionthenN3

  27. N4  if Expression then N3 else N4

3.1.3 Грамматика описывающая выражение

G3=<T,N,R,N2>

T=Терминалы :

idv idcidnnot-()anddivmodshlshr*/orxor+<><=>==<>[],Expression

N=Нетерминалы :

N2 = выражение 7;

N1 = множитель 8;

N3 = логическое умножение 2;

N4 = целое умножение 5;

N5 = умножение 3;

N6 = логическое выражение 3;

N7 = простое выражение 3;

R=Правила :

  1. N2 N7

  2. N1 idv

  3. N1 idc

  4. N1 idn

  5. N1 idv [ N2 , N2 ]

  6. N1 idv [Expression,Expression]

  7. N1 not N1

  8. N1 - N1

  9. N1 ( N2 )

  10. N3 N1 and N3

  11. N3 N1

  12. N4 N3 div N4

  13. N4 N3 mod N4

  14. N4 N3 shl N4

  15. N4 N3 shr N4

  16. N4 N3

  17. N5 N4 * N5

  18. N5 N4

  19. N6 N5 or N6

  20. N6 N5 xor N6

  21. N6 N5

  22. N7 N6 - N7

  23. N7 N6 + N7

  24. N7 N6

  25. N2 N7 < N2

  26. N2 N7 >N2

  27. N2 N7 <= N2

  28. N2 N7 >= N2

  29. N2 N7<>N2

  30. N2 N7 = N2

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

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

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

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

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

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

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

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

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

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

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

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

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

Триада

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

EQU B, A

A:=BеслиAэлементboolmatr, то добавляетсяAGRX,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], то добавляетсяARGM,N)

ADD A, B

Сложение A + B

SUB A, B

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

DIV A, B

Целочисленное деление AdivB

MUL A, B

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

AND A, B

Логическое-И AandB

OR A, B

Логическое-ИЛИ AorB

XOR A, B

Логическое исключение AxorB

NOT A, -

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

SHL A, B

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

SHR A, B

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

ELM M, X

Элемент булевской матрицы M, используется с последовательной триадойARGY, -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

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