- •Задание
- •Описание языка
- •Описания и типы
- •Способы описания собственных типов:
- •Описание констант:
- •Описание переменных:
- •Имена и выражения Выражения:
- •Оператор присваивания
- •Переменные:
- •Операторы
- •Структуры данных
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
- •Описание промежуточного языка
- •Описание перевода (таг) каждой конструкции входного языка Основная грамматика:
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
Подграмматика для переменных:
Нетерминалы:
|
VAR |
переменная |
|
VO |
переменная старого типа |
|
VO` |
остаток переменной старого типа |
|
IT |
имя типа |
|
I |
индекс |
|
I` |
остаток индекса |
|
EAR |
арифметическая переменная |
|
IP |
имя поля |
VAR ® ( IT ) VO
VAR ® VO
VO ® id VO`
VO` ® [ I I` ] VO`
VO` ® . IP VO`
VO` ® e
I ® EAR
I` ® , I I`
I` ® e
IP ® id
Подграмматика для операторов:
Нетерминалы:
|
OP |
оператор |
|
OPN |
непомеченный оператор |
|
VAR |
переменная |
|
E |
выражение |
|
DAT |
данные для вывода |
|
OPS |
последовательность операторов |
|
OPS` |
остаток последовательности операторов |
|
ELS |
остаток условного оператора |
OP ® lbl : OPN
OP ® OPN
OPN ® rid ( VAR )
OPN ® wri ( DAT )
OPN ® beg OPS end
OPN ® got lbl
OPN ® if E the OP ELS
OPN ® whi E do OP
OPN ® VAR := E
OPN ® e
DAT ® str
DAT ® VAR
OPS ® OP OPS`
OPS` ® ; OP OPS`
OPS` ® e
ELS ® els OP
ELS ® e
Описание промежуточного языка
Представление условного оператора:

Указанный оператор будет переводиться следующим образом:
IF !выражение THEN
GOTO m1
оператор1
GOTO m2
m1:
оператор2
m2:
Представление оператора цикла с предусловием:

WHILE выражение DO оператор
Указанный оператор будет переводиться следующим образом:
m1:
IF !выражение THEN
GOTO m2
оператор
GOTO m1
m2:
Список триад:
|
Label А, _ |
В таблицу меток по адресу A заносится сгенерированная метка с уникальным именем, хранящая адрес следующей за ней триады. |
|
Print А, _ |
Вывести на экран значение из таблицы идентификаторов по адресу А. |
|
Input А, _ |
В таблицу идентификаторов по адресу А заносится значение, введенное с клавиатуры. |
|
:= A1, A2 |
Переменной по адресу A1 в таблице идентификаторов присваивается значение по адресу A2 из таблицы промежуточных значений. Аномальная ситуация: если типы А1 и А2 не совпадают. |
|
Jmp А, _ |
Управление передается триаде по адресу А. |
|
JmpF A1, A2 |
Если значение в таблице по адресу А1 равно «ложь», то управление передается триаде по адресу А2. Аномальная ситуация: если тип А1 - не boolean. |
|
Ntype A1, A2 |
Преобразовать тип значения по адресу A2 в тип А1 (см. соответствующую таблицу, стр. 7). |
|
EM A1, A2 |
Элемент массива A1 с индексом A2. |
|
PZ A1, A2 |
Поле A2 записи A1. |
|
==I A1, A2 |
Операции отношения «равно» |
|
==R A1, A2 |
соответственно для целых, вещественных, комплексных |
|
==C A1, A2 |
и булевских значений по адресам A1, A2 |
|
==B A1, A2 |
|
|
<I A1, A2 |
Операции отношения «меньше» |
|
<R A1, A2 |
соответственно для целых, вещественных, комплексных |
|
<C A1, A2 |
и булевских значений по адресам A1, A2 |
|
<B A1, A2 |
|
|
>I A1, A2 |
Операции отношения «больше» |
|
>R A1, A2 |
соответственно для целых, вещественных, комплексных |
|
>C A1, A2 |
и булевских значений по адресам A1, A2 |
|
>B A1, A2 |
|
|
negI A1, A2 |
Операции изменения знака на противоположный |
|
negR A1, A2 |
соответственно для целых, вещественных и комплексных |
|
negC A1, A2 |
значений по адресам A1, A2 |
|
addI A1, A2 |
Операции сложения |
|
addR A1, A2 |
соответственно для целых, вещественных и комплексных |
|
addC A1, A2 |
значений по адресам A1, A2 |
|
subI A1, A2 |
Операции вычитания |
|
subR A1, A2 |
соответственно для целых, вещественных и комплексных |
|
subC A1, A2 |
значений по адресам A1, A2 |
|
mulI A1, A2 |
Операции умножения |
|
mulR A1, A2 |
соответственно для целых, вещественных и комплексных |
|
mulC A1, A2 |
значений по адресам A1, A2 |
|
divI A1, A2 |
Операции деления |
|
divR A1, A2 |
соответственно для целых, вещественных и комплексных |
|
divC A1, A2 |
значений по адресам A1, A2 |
