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

Операционный символ { вычислить адрес }p, n, r

Тип элемента

p

t1

Значение элемента

p

a1

Значение элемента

n

a2

Тип элемента

r

t3

Значение элемента

r

a3

if (t1 – тип массив)

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

a2

@SUBS

t3  тип верхнего элемента стека

}

else {

if (a2 = 1) { t3  t1 }

else { Ошибка }

}

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

Тип элемента

p

t1

Значение элемента

p

a1

if (t1 – перечислимый, ограниченный или целый тип)

{ }

else {Ошибка

}

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

Тип элемента

p

t1

Значение элемента

p

a1

Тип элемента

t

t2

Значение элемента

t

a2

if (t1 = rational)

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

@NUMERATOR

t2  integer

}

else {Ошибка

}

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

Тип элемента

p

t1

Значение элемента

p

a1

Тип элемента

t

t2

Значение элемента

t

a2

if (t1 = rational)

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

@DENOMINATOR

t2  integer

}

else {Ошибка

}

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

Тип элемента

p

t1

Значение элемента

p

a1

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

a1

Операционный символ { inc }n1, n2

n2  n1 + 1

Подграмматика для выражения:

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

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

Описание

Тип атрибута

EXPt

Выражение

t – синтезированный

AEt

Слагаемое

t – синтезированный

MEt

Множитель

t – синтезированный

SAEp, t

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

t – синтезированный, p - унаследованный

SMEt

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

t – синтезированный,

VARt

Переменная

t – синтезированный,

EXPt2  AEp1 SAEp2, t1

p2  p1

t2  t1

SAEp1, t2 + AEq1 {сложить}p2, q2, r1 SAEr2, t1

p2  p1

q2 q1

r2  r1

t2  t1

SAEp1, t2 - AEq1 {вычесть}p2, q2, r1 SAEr2, t1

p2  p1

q2 q1

r2  r1

t2  t1

SAEp1, p2

p2  p1

AEt2  MEq1 SMEq2, t1

q2  q1

t2  t1

SMEp1, t2* MEq1 {умножить}p2, q2, r1 SMEr2, t1

p2  p1

q2  q1

r2  r1

t2  t1

SMEp1, t2/ MEq1 {делить}p2, q2, r1 SMEr2, t1

p2  p1

q2  q1

r2  r1

t2  t1

SMEp1, t2common MEq1 {общий знаменатель}p2, q2, r1 SMEr2, t1

p2  p1

q2  q1

r2  r1

t2  t1

SMEp1, p2

p2  p1

MEp2+ MEp1

p2 p1

MEr2- MEp1 {поменять знак}p2, r1

p2  p1

r2  r1

MEr2frac MEp1 {дробная часть}p2, r1

p2  p1

r2  r1

MEr2int MEp1 {целая часть}p2, r1

p2  p1

r2  r1

MEr2simplify MEp1 {простая дробь}p2, r1

p2  p1

r2  r1

MEr2irregular MEp1 {неправильная дробь}p2, r1

p2  p1

r2  r1

MEp2VARp1

p2  p1

MEp2usip1 {число}p1

p2  p1

MEp2( EXPp1 )

p2  p1

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

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = integer)

{

if (t2 = integer)

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

@ADDINT

t3  integer

}

else

if (t2 = rational)

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

@ITOR2

@ADDRAT

t3  rational

}

else {Ошибка}

}

else

if (t1 = rational)

{

if (t2 = integer)

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

@ITOR

@ADDRAT

t3  rational

}

else

if (t2 = rational)

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

@ADDRAT

t3  rational

}

else {Ошибка}

}

else {Ошибка}