
- •Задание на курсовую работу
- •1. Описание входного языка.
- •1.2.3. Конструкции входного языка.
- •Оператор итерационного цикла for-to-do и for-downto-do.
- •Оператор безусловного перехода goto.
- •Условный опеатор if-then-else
- •Лексический анализатор.
- •Представление основных операторов в полиз
- •Разобьем исходную грамматику на подграмматики:
- •Подграмматика для списка имён:
- •Подграмматика для типов:
- •Основная подграмматика:
- •Описание перевода (атг) каждой конструкции входного языка
- •Подграмматика для переменной:
- •Операционный символ { вычислить адрес }p, n, r
- •Операционный символ { числитель }p, t
- •Операционный символ {сложить}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
- •Операционный символ {индекс}p, r
- •Операционный символ {создать метку}p, r
- •Описание типа
- •Структуры данных дмп-процессора
- •Структура символа
- •Магазин дмп процессора
- •Управляющая таблица ll1-анализатора для подграмматики выражений
- •Управляющая таблица ll1-анализатора для подграмматики логических выражений
- •Управляющая таблица ll1-анализатора для подграмматики списка имён
- •Управляющая таблица ll1-анализатора для подграмматики операторов
- •Управляющая таблица ll1-анализатора для основной подграмматики
- •Управляющая таблица ll1-анализатора для подграмматики типов
- •Управляющая таблица ll1-анализатора для подграмматики переменных
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Основная подграмматика:
Таблица нетерминалов:
Имя нетерминала |
Описание |
P |
Программа |
PN |
Имя программы |
SD |
Раздел описаний |
SO |
Раздел операторов |
SDL |
Раздел описания меток |
LN |
Имя метки |
SLN |
Последовательность меток |
SDC |
Раздел описания констант |
CD |
Объявление константы |
SCD |
Последовательность объявлений констант |
SDV |
Раздел описания переменных |
DOT |
Объявление переменных одного типа |
SDO |
Последовательность объявлений переменных одного типа |
NL |
Список имен |
SDT |
Раздел описания типов |
TD |
Описание типа |
STD |
Последовательность описаний типов |
TN |
Имя типа |
CNS |
Константа |
PPN SD SO
PNprogram id;
PN
SDSDL SD
SDSDC SD
SDSDT SD
SDSDV SD
SD
SDLlabel LN SLN ;
LNid
LNusi
SLN , LN SLN
SLN
SDCconst CD ; SCD
CDid = CNS
CNSid
CNSusi
SCDCD ; SCD
SCD
SDTtype TD ; STD
TDid = TN
STDTD ; STD
STD
SDVvar DOT ; SDO
DOTNL : TN
SDODOT ; SDO
SDO
Описание перевода (атг) каждой конструкции входного языка
Подграмматика для переменной:
Таблица нетерминалов:
Имя нетерминала |
Описание |
Тип атрибута |
VARt |
Переменная |
t - синтезированный |
LEn1, n2 |
Индексация к массиву |
n1 – унаследованный, n2 - синтезированный |
SXPn1, n2 |
Последовательность выражений |
n1 – унаследованный, n2 - синтезированный |
PARp, t |
Обращение к подэлементам |
p – унаследованный, t - синтезированный |
EXPp |
Выражение |
p - синтезированный |
VARt4 idp1 {переменная}p2 LE1, n1 {вычислить адрес}p3, n2, r1 PARr2, t3
p2, p3 p1
n2 n1
r2 r1
t4 t3
LEn1, n8 [ EXPt1 {индекс}t1 {inc}n2, n3 SXPn4, n5 ] LEn6, n7
n2 n1
n4 n3
n6 n5
n8 n7
LEn1, n2
n2 n1
SXPn1, n6 , EXPt1 {индекс}t1 {inc}n2, n3 SXPn4, n5
n2 n1
n4 n3
n6 n5
SXPn1, n2
n2 n1
PARp1, t1 . PTp2, t2
p2 p1
t2 t1
PTp1, t1 numerator {числитель}p2, t2
p2 p1
t1 t2
PTp1, t1 denominator {знаменатель}p2, t2
p2 p1
t1 t2
PARp1, p2
p2 p1
Операционный символ { вычислить адрес }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, t2 common 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
MEp2 VARp1
p2 p1
MEp2 usip1 {число}p1
p2 p1
MEp2( EXPp1 )
p2 p1