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

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

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = integer)

{

if (t2 = integer)

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

@SUBINT

t3  integer

}

else

if (t2 = rational)

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

@ITOR2

@SUBRAT

t3  rational

}

else {Ошибка}

}

else

if (t1 = rational)

{

if (t2 = integer)

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

@ITOR

@SUBRAT

t3  rational

}

else

if (t2 = rational)

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

@SUBRAT

t3  rational

}

else {Ошибка}

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = integer)

{

if (t2 = integer)

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

@MULINT

t3  integer

}

else

if (t2 = rational)

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

@ITOR2

@MULRAT

t3  rational

}

else {Ошибка}

}

else

if (t1 = rational)

{

if (t2 = integer)

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

@ITOR

@MULRAT

t3  rational

}

else

if (t2 = rational)

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

@MULRAT

t3  rational

}

else {Ошибка}

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = integer)

{

if (t2 = integer)

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

@DIVINT

t3  integer

}

else

if (t2 = rational)

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

@ITOR2

@DIVRAT

t3  rational

}

else {Ошибка}

}

else

if (t1 = rational)

{

if (t2 = integer)

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

@ITOR

@DIVRAT

t3  rational

}

else

if (t2 = rational)

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

@DIVRAT

t3  rational

}

else {Ошибка}

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

q

t2

Тип элемента

r

t3

if (t1 = rational) and (t2 = rational)

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

@COMMON

t3  integer

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

r

t2

if (t1 = rational)

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

@NEGRAT

t2  rational

}

else

if (t1 = integer)

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

@NEGINT

t2  integer

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

r

t2

if (t1 = rational)

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

@FRAC

t2  rational

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

r

t2

if (t1 = rational)

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

@INT

t2  integer

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

r

t2

if (t1 = rational)

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

@SIMPLIFY

t2  rational

}

else {Ошибка}

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

Тип элемента

p

t1

Тип элемента

r

t2

if (t1 = rational)

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

@IRREGULAR

t2  rational

}

else {Ошибка}

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

Тип элемента

p

t1

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

p

a1

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

a1

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

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

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

Описание

Тип атрибута

LEXt

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

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

Сt

Конъюнкция

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

SCp, t

Последовательность конъюнкций

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

RELt

Отношение

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

LMt

Логический множитель

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

SLMp, t

Последовательность логических множителей

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

REOt

Операция отношения

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

EXPp

Выражение

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

LEXt2  Cp1 SCp2, t1

p2  p1

t2  t1

SCp1, t2or Cq1 {дизъюнкция}p2, q2, r1 SCr2, t1

p2 p1

q2  q1

t2  t1

SCp1, p2

p2 p1

LEXp2  RELp1

p2  p1

Ct2  LMp1 SLMp2, t1

p2 p1

t2  t1

SLMp1, t2and LMq1 {конъюнкция}p2, q2, r1 SLMr2, t1

p2  p1

q2  q1

t2  t1

SLMp1, p2

p2  p1

LMp2( LEXp1 )

p2  p1

LMt2not LMp1 {отрицание}p2, t1

p2  p1

t1  t2

RELt2EXPp1 REOp2 EXPp3 {отношение}q1, q2, q3, t1

q1  p1

q2  p2

q3  p3

t2  t1

REOp<q

p  q (q = <)

REOp>q

p  q (q = >)

REOp=q

p  q (q = =)

REOp<=q

p  q (q = <=)

REOp>=q

p  q (q = >=)

REOp<>q

p  q (q = <>)