- •Задание на курсовую работу
- •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 = 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 |
Последовательность выражений |
|
SOCOP .
COPbegin OP SOP end
SOP; OP SOP
SOP
OPLNp1 : {метка1}p2 ULO
p2 p1
OPULO
ULOLPR
ULOEQO
ULONOP
ULOCOP
ULOJMP
ULOIFO
ULOIOP
ULOOOP
LPRfor 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)
EQOVARp1 := EXPq1 {присвоить}p2, q2
p2 p1
q2 q1
NOP
JMPgoto LNp1 {переход}p2
p2 p1
IFOif 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
IOPread ( VARp1 {ввести}p2 SVR )
p2 p1
OOPwrite ( 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 |