- •Задание на курсовую работу
- •1. Описание входного языка.
- •1.2.3. Конструкции входного языка.
- •Если результат false, то происходит переход на оператор2, в противном случае выполняется оператор1 и происходит переход в конец оператора if-then-else. Лексический анализатор.
- •Представление основных операторов в полиз
- •Операционный символ { вычислить адрес }p, n, r
- •Операционный символ {сложить}p, q, r
- •Операционный символ {вычесть}p, q, r
- •Операционный символ { умножить }p, q, r
- •Операционный символ { делить }p, q, r
- •Операционный символ { общий знаменатель }p, q, r
- •Операционный символ { дизъюнкция }p, q, r
- •Операционный символ { конъюнкция }p, q, r
- •Операционный символ { отрицание }p, q
- •Операционный символ { меньше }p, q, r
- •Операционный символ { отношение }q1, q2, q3, r
- •Операционный символ { id }n
- •Операционный символ { init }n, V, r
- •Операционный символ { нач_ц }q1, q2, q3, m1, m2, r2
- •Операционный символ { кон_ц } q4, q5, m1, m2
- •Операционный символ { присвоить }p, q
- •Операционный символ { имя }q, r
- •Операционный символ { последовательность имён }p, q, r
- •Операционный символ {индекс}p, r
- •Операционный символ {массив}t, q, r
- •Операционный символ { последовательность индексов }p, q, r
- •Операционный символ {диапазон}p, q, r
- •Операционный символ {создать метку}p, r
- •Описание типа
- •Структуры данных дмп-процессора
- •Структура символа
- •Магазин дмп процессора
- •Часть 1 :
- •Часть 2 :
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Операционный символ {вычесть}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, t2 and 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 = <>)