- •Задание на курсовую работу
- •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-анализатора для подграмматики переменных
- •Разработка дмп-процессора
- •Взаимодействие дмп-процессоров
- •Алгоритм работы дмп-процессора
- •Передача атрибутов в дмп-процессоре
- •Тестирование дмп-процессора
Представление основных операторов в полиз
Оператор |
Код |
Операнды |
Семантика оператора |
Вычисление адреса элемента массива |
@SUBS |
A, i1, …, in, k |
Вычисление адреса элемента массива A; i1, …, in – индексные выражения, k = n+1 – число операндов операции |
Оператор присваивания |
@SET |
R, E |
Оператор присваивания R := E |
Определение метки |
@DEFL |
m |
Определение метки m |
Переход по метке |
@JMP |
m |
Переход на метку m (m – идентификатор метки) |
Переход по условию |
@JMPF |
m, Flag |
Переход на m (m – метка или номер элемента ПОЛИЗ) при Flag = FALSE |
Преобразование целого к рациональному |
@ITOR |
A |
Преобразование целого A к рациональному |
Преобразование целого к вещественному |
@ITOR2 |
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 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
…