- •Задание на курсовую работу
- •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 :
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Представление основных операторов в полиз
Оператор |
Код |
Операнды |
Семантика оператора |
Вычисление адреса элемента массива |
@SUBS |
A, i1, …, in, k |
Вычисление адреса элемента массива A; i1, …, in – индексные выражения, k = n+1 – число операндов операции |
Оператор присваивания |
@SET |
R, E |
Оператор присваивания R := E |
Определение метки |
@DEFL |
m |
Определение метки m |
Переход по метке |
@JMP |
m |
Переход на метку m (m – идентификатор метки) |
Переход по условию |
@JMPT (не используется) |
m, Flag |
Переход на m (m – метка или номер элемента ПОЛИЗ) при Flag = TRUE |
Переход по условию |
@JMPF |
m, Flag |
Переход на m (m – метка или номер элемента ПОЛИЗ) при Flag = FALSE |
Преобразование целого к рациональному |
@ITOR |
A |
Преобразование целого A к рациональному |
Преобразование рационального к целому |
@RTOI (не используется) |
A |
Преобразование рационального A к целому |
Преобразование целого к вещественному |
@ITOR2 |
A, _ |
Преобразование целого A к вещественному |
Преобразование вещественного к целому |
@RTOI2 (не используется) |
A, _ |
Преобразование вещественного A к целому |
Ввод |
@INPUT |
A |
Ввод со входного потока согласно типу A |
Вывод |
@OUTPUT |
A |
Вывод во входной поток согласно типу A |
Операции отношения «равно» для целых чисел |
@=INT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа boolean |
Операции отношения «равно» для рациональных чисел |
@=RAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа boolean |
Операции отношения «не равно» для целых чисел |
@<>INT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа boolean |
Операции отношения «не равно» для рациональных чисел |
@<>RAT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа boolean |
Операции отношения «меньше» для целых чисел |
@<INT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа boolean |
Операции отношения «меньше» для рациональных чисел |
@<RAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа boolean |
Операции отношения «меньше либо равно» для целых чисел |
@<=INT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа boolean |
Операции отношения «меньше либо равно» для рациональных чисел |
@<=RAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа boolean |
Операции отношения «больше» для целых чисел |
@>INT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа boolean |
Операции отношения «больше» для рациональных чисел |
@>RAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа boolean |
Операции отношения «больше либо равно» для целых чисел |
@>=INT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа boolean
|
Операции отношения «больше либо равно» для рациональных чисел |
@>=RAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа boolean |
Логическая операция “и” |
@AND |
A1, A2 |
Бинарная операция для переменных типа boolean, возвращает результат типа boolean |
Логическая операция “или” |
@OR |
A1, A2 |
Бинарная операция для переменных типа boolean, возвращает результат типа boolean |
Логическая операция “не” |
@NOT |
A |
Унарная операция для переменных типа boolean, возвращает результат типа boolean |
Операции изменения знака на противоположный для целых чисел |
@NEGINT |
A |
Унарная операция для целых, возвращает результат типа boolean |
Операции изменения знака на противоположный для рациональных чисел |
@NEGRAT |
A |
Унарная операция для рациональных, возвращает результат типа boolean |
Операции вычитания для целых чисел |
@SUBINT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа integer |
Операции вычитания для рациональных чисел |
@SUBRAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа rational |
Операция инкремент для целых чисел |
@INC |
A |
Унарная операция для целых чисел возвращает результат типа integer |
Операция декремент для целых чисел |
@DEC |
A |
Унарная операция для целых чисел возвращает результат типа integer |
Операции сложения для целых чисел |
@ADDINT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа integer |
Операции сложения для рациональных чисел |
@ADDRAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа rational |
Операции умножения для целых чисел |
@MULINT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа integer |
Операции умножения для рациональных чисел |
@MULRAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа rational |
Операции деления для целых чисел |
@DIVINT |
A1, A2 |
Бинарная операция для целых, возвращает результат типа integer |
Операции деления для рациональных чисел |
@DIVRAT |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа rational |
Общий знаменатель для рациональных чисел |
@COMMON |
A1, A2 |
Бинарная операция для рациональных, возвращает результат типа integer |
Дробная часть рационального числа |
@FRAC |
A |
Унарная операция для рациональных, возвращает результат типа rational |
Целая часть рационального числа |
@INT |
A |
Унарная операция для рациональных, возвращает результат типа integer |
Приведение к простой дроби |
@SIMPLIFY |
A |
Унарная операция для рациональных, возвращает результат типа rational |
Приведение к неправильной дроби |
(операция была исключена) |
A |
Унарная операция для рациональных, возвращает результат типа rational |
Замечание: для всех бинарных операций, подразумевающих A op B, где A и B операнды, в стек исполнения ПОЛИЗ операнды кладутся в прямом порядке, то есть сначала A, а затем B, а извлекаются в обратном.
Неформальное описание
Перевод обращения к переменной
-
Входная конструкция
Перевод в ПОЛИЗ
A[x1, x2,,..xn]
A
x1
x2
…
xn
n + 1
@SUBS
Пример
A[x + 5, y - 1][z] . numerator
A
x
5
+
y
1
-
z
4
@SUBS
@NUMERATOR
Перевод условного оператора
-
Входная конструкция
Перевод в ПОЛИЗ
IF
Логическое выражение
THEN
Операторы
ELSE
Операторы
Перевод логического выражения в ПОЛИЗ
m1
@JMPF
Перевод операторов
m2
@JMP
m1
@DEFL
Перевод операторов
m2
@DEFL
Пример
if 1 > 10 + i then A[ i ] := 5
else i := 1
1
10
i
+
@>INT
m1
@JMPF
A
I
2
@SUBS
5
@SET
m2
@JMP
m1
@DEFL
i
1
@SET
m2
@DEFL
Перевод цикла с параметром
-
Входная конструкция
Перевод в ПОЛИЗ
for i := выражение1 to выражение2 do
оператор
i
выражение1 в ПОЛИЗЕ
@SET
создать временную переменную R типа integer и записать на выходную ленту
выражение2 в ПОЛИЗЕ
@SET
m1
@DEFL
i
R
@<=INT
m2
@JMPF
Перевод оператора
i
@INC
m1
@JMP
m2
@DEFL
…
Разобьем исходную грамматику на подграмматики:
Подграмматика для переменной:
Таблица нетерминалов:
Имя нетерминала |
Описание |
VAR |
Переменная |
LE |
Индексация к массиву |
SXP |
Последовательность выражений |
PAR |
Обращение к подэлементам |
EXP |
Выражение |
VARid LE PAR
LE[ EXP SXP ] LE
LE
SXP, EXP SXP
SXP
PAR . PT
PTnumerator
PTdenominator
PAR
Подграмматика для выражения:
Таблица нетерминалов:
Имя нетерминала |
Описание |
EXP |
Выражение |
AE |
Слагаемое |
ME |
Множитель |
SAE |
Последовательность слагаемых |
SME |
Последовательность множителей |
VAR |
Переменная |
EXPAE SAE
SAE+ AE SAE
SAE- AE SAE
SAE
AEME SME
SME* ME SME
SME/ ME SME
SMEcommon ME SME
SME
ME+ ME
ME- ME
MEfrac ME
MEint ME
MEsimplify ME
MEirregular ME
MEVAR
MEusi
ME( EXP )
Подграмматика для логического выражения:
Таблица нетерминалов:
Имя нетерминала |
Описание |
LEX |
Логическое выражеие |
EXP |
Выражение |
С |
Конъюнкция |
SC |
Последовательность конъюнкций |
REL |
Отношение |
LM |
Логический множитель |
SLM |
Последовательность логических множителей |
REO |
Операция отношения |
LEXC SC
SCor C SC
SC
LEXREL
CLM SLM
SLMand LM SLM
SLM
LM( LEX )
LMnot LM
RELEXP REO EXP
REO<
REO>
REO=
REO<=
REO>=
REO<>
Подграмматика для операторов:
Таблица нетерминалов:
Имя нетерминала |
Описание |
SO |
Раздел операторов |
COP |
Составной оператор |
OP |
Оператор |
ULO |
Непомеченный оператор |
EXP |
Выражение |
VAR |
Переменная |
LN |
Имя метки |
LPR |
Оператор цикла с параметром |
DIR |
Направление изменения переменной цикла |
IFO |
Условный оператор |
OPR |
Необязательная условного оператора |
EQO |
Оператор присваивания |
NOP |
Пустой оператор |
IOP |
Оператор ввода |
OOP |
Оператор вывода |
JMP |
Опереатор безусловного перехода |
SOP |
Последовательность операторов |
SVR |
Последовательность переменных |
SXP |
Последовательность выражений |
SOCOP .
COPbegin OP SOP end
SOP; OP SOP
SOP
OPLN : ULO
OPULO
ULOLPR
ULOEQO
ULONOP
ULOCOP
ULOJMP
ULOIFO
ULOIOP
ULOOOP
LPRfor id := EXP DIR EXP do OP
DIRto
DIRdownto
EQOVAR := EXP
NOP
JMPgoto LN
IFOif LEX then OP OPR
OPRelse OP
OPR
IOPread ( VAR SVR )
OOPwrite ( EXP SXP )
SVR, VAR SVR
SVR
SXP, EXP SXP
SXP
LNid
LNusi
Подграмматика для списка имён:
Таблца нетерминалов:
Имя нетерминала |
Описание |
NL |
Список имен |
SN |
Последовательность имен |
NLid SN
SN , id SN
SN
Подграмматика для типов:
Таблица нетерминалов:
Имя нетерминала |
Описание |
TN |
Имя типа |
INT |
Внутренний тип |
AT |
Тип-массив |
ET |
Перечислимый тип |
RT |
Ограниченный тип |
IT |
Индекс |
SIT |
Последовательность индексов |
NL |
Список имен |
TNINT
TNAT
TNET
TNRT
TNid
INTinteger
INTrational
ATarray [ IT SIT ] of TN
ITET
ITRT
ITid
SIT, IT SIT
SIT
ET( NL )
RTusi .. usi
Основная подграмматика:
Таблица нетерминалов:
Имя нетерминала |
Описание |
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