- •1. Формальная постановка задачи Задание 10.
- •2. Описание входного языка
- •2.1. Синтаксис входного языка
- •2.2. Описание семантики входного языка
- •3 Описание этапа лексического анализа
- •3.1. Определение типов лексем
- •Определение синтаксиса лексем.
- •Построение диаграммы лексического анализатора.
- •Функции лексического анализатора
- •Описание этапа синтаксического анализа.
- •4.1. Построение кс-грамматики входного языка.
- •Разбиение исходной грамматики на подграмматики.
- •Описание промежуточного языка.
- •4.4. Неформальное описание перевода.
- •4.5. Посторенние атрибутной транслирующей грамматики.
- •4.6. Построение атрибутного дмп-процессора.
- •4.7. Тестирование атрибутного дмп-процессора
Описание промежуточного языка.
Тип промежуточного языка, используемого представления программы после синтаксического анализа, определен в задании на курсовую работу.
В данном разделе пояснительной записки необходимо изложить процесс выбора операторов промежуточного языка, используемых для описания перевода, и описать их семантику.
Промежуточным языком являются тетрады.
Операнды одной тетрады должны быть одинаково типа, так как соответствие типов в нашем языке структурное, то неодинаковые типы преобразуются к одинаковому автоматически.
Для доступа к элементу массива необходимо использовать тетраду
SUBS, a,i,t , которая будет интерпретирована как операция доступа a[i].
Синтаксис |
Семантика |
|||
КОП |
ОП1 |
ОП2 |
Рез |
|
DEFL |
L |
|
|
Определение метки L |
BRL |
L |
|
|
Безусловный переход на метку L I |
BF |
L |
R |
|
Переход на метку L, если значение выражения R равно “ложь”: R = False |
+ |
a |
b |
R |
Сложение R =a + b |
- |
a |
b |
R |
Вычитание R =a – b |
* |
a |
b |
R |
Умножение R =a * b |
/ |
a |
b |
R |
Деление R =a / b |
< |
a |
b |
R |
В R хранится результат вычисления логического выражения a < b |
<= |
a |
b |
R |
В R хранится результат вычисления логического выражения a <= b |
> |
a |
b |
R |
В R хранится результат вычисления логического выражения a > b |
>= |
a |
b |
R |
В R хранится результат вычисления логического выражения a >= b |
== |
a |
b |
R |
В R хранится результат вычисления логического выражения a == b |
!= |
a |
b |
R |
В R хранится результат вычисления логического выражения a != b |
+= |
a |
b |
a |
Сложение a+=b |
*= |
a |
b |
a |
Умножение a*=b |
/= |
a |
b |
a |
Деление a/=b |
-= |
a |
b |
a |
Вычитание a-=b |
++ |
a |
1 |
a |
Инкремент а |
:= |
b |
|
a |
a:=b |
OR |
a |
b |
R |
В R хранится булевская переменная, соответствующая логическому ИЛИ a и b |
AND |
a |
b |
R |
В R хранится булевская переменная, соответствующая логическому И a и b |
NOT |
a |
|
R |
В R хранится НЕ а |
SUBS |
a |
i |
R |
чтение из a[i]. Результат-новое значение Е=a[i] |
LEN |
a |
|
R |
В R хранится длина вектора Е |
CIN |
|
|
a |
Ввод из потока значения а |
COUT |
a |
|
|
Вывод в поток значения переменной а |
{ |
|
|
|
Начало блока |
} |
|
|
|
Конец блока |
cin |
ch |
|
|
Считывание в память |
cout |
ch |
|
|
Вывод на экран |
goto |
L |
|
|
Безусловный переход на метку |
#10 |
|
|
|
Возврат каретки |
#13 |
|
|
|
Переход на следующую строку |
