Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП(РЯП)1.doc
Скачиваний:
12
Добавлен:
01.05.2014
Размер:
1.87 Mб
Скачать

Операционный символ { дизъюнкция }p, q, r

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = boolean) and (t2 = boolean)

{ Записать на выход выражение ПОЛИЗ:

@OR

t3  boolean

}

else {Ошибка}

Операционный символ { конъюнкция }p, q, r

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = boolean) and (t2 = boolean)

{ Записать на выход выражение ПОЛИЗ:

@AND

t3  boolean

}

else {Ошибка}

Операционный символ { отрицание }p, q

Тип элемента

p

t1

Тип элемента

q

t2

if (t1 = boolean)

{ Записать на выход выражение ПОЛИЗ:

@NOT

t2  boolean

}

else {Ошибка}

Операционный символ { меньше }p, q, r

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = integer)

{

if (t2 = integer)

{ Записать на выход выражение ПОЛИЗ:

@<INT

t3  boolean

}

else

if (t2 = rational)

{ Записать на выход выражение ПОЛИЗ:

@ITOR2

@<RAT

t3  boolean

}

else {Ошибка}

}

else if (t1 = rational)

{

if (t2 = integer)

{ Записать на выход выражение ПОЛИЗ:

@ITOR

@<RAT

t3  boolean

}

if (t2 = rational)

{ Записать на выход выражение ПОЛИЗ:

@<RAT

t3  boolean

}

else {Ошибка}

}

else {Ошибка}

Операционный символ { отношение }q1, q2, q3, r

Тип элемента

q1

t1

Тип элемента

q2

t2

Тип элемента

q3

t3

Тип элемента

r

t4

if (t1 = integer)

{

if (t2 = integer)

{ Записать на выход выражение ПОЛИЗ:

@q2INT

t3  boolean

}

else

if (t2 = rational)

{ Записать на выход выражение ПОЛИЗ:

@ITOR2

@q2RAT

t3  boolean

}

else {Ошибка}

}

else

if (t1 = rational)

{

if (t2 = integer)

{ Записать на выход выражение ПОЛИЗ:

@ITOR

@q2RAT

t3  boolean

}

if (t2 = rational)

{ Записать на выход выражение ПОЛИЗ:

@q2RAT

t3  boolean

}

else {Ошибка}

}

else {Ошибка}

Подграмматика для операторов:

Таблица нетерминалов:

Имя нетерминала

Описание

Тип атрибута

SO

Раздел операторов

COP

Составной оператор

OP

Оператор

ULO

Непомеченный оператор

EXPp

Выражение

p - синтезированный

VARp

Переменная

p - синтезированный

LNp

Имя метки

p - синтезированный

LPR

Оператор цикла с параметром

DIRp

Направление изменения переменной цикла

p - синтезированный

IFO

Условный оператор

OPRt

Необязательная условного оператора

t - унаследованный

EQO

Оператор присваивания

NOP

Пустой оператор

IOP

Оператор ввода

OOP

Оператор вывода

JMP

Опереатор безусловного перехода

SOP

Последовательность операторов

LEXp

Логическое выражеие

p - синтезированный

SVR

Последовательность переменных

SXP

Последовательность выражений

SOCOP .

COPbegin OP SOP end

SOP; OP SOP

SOP

OPLNp1 : {метка1}p2 ULO

p2  p1

OPULO

ULOLPR

ULOEQO

ULONOP

ULOCOP

ULOJMP

ULOIFO

ULOIOP

ULOOOP

LPRfor idn {id}n1:= EXPv1 {init}n2, v3, r1 DIRp EXPv2 {нач_ц}q1, q2, q3, m1, m2, r2 do OP {кон_ц}q4, q5, q7, q8

m1  NEWLABEL(метка начала цикла)

m2  NEWLABEL(метка конца цикла)

q1, q4, n1, n2  n

v3  v1

q2, q5  p

q3  v2

r2  r1

q7  m1

q8  m2

DIRqtop

q  p (p = inc)

DIRqdowntop

q  p (p = dec)

EQOVARp1 := EXPq1 {присвоить}p2, q2

p2  p1

q2  q1

NOP

JMPgoto LNp1 {переход}p2

p2  p1

IFOif LEXq1 then {перейти по ”ложь”}r1, r2 OP {БП}r3, r5 OPRr4

r1  NEWLABEL(метка начала OPR)

r2  NEWLABEL(метка выхода из IFO)

r3  r1

r4, r5  r2

OPRr1else OP {метка2}r2

r2  r1

OPRr1 {метка2}r2

r2  r1

IOPread ( VARp1 {ввести}p2 SVR )

p2  p1

OOPwrite ( EXPp1 {вывести}p2 SXP )

p2  p1

SVR, VARp1 {ввести}p2 SVR

p2  p1

SVR

SXP, EXPp1 {вывести}p2 SXP

p2  p1

SXP

LNp2idp1

p2  p1

LNp2usip1

p2  p1

Операционный символ { метка1 }p

По указанному имени p метки в таблице меток находится соответствующая позиция t.

Генерируется элемент ПОЛИЗ

t

@DEFL