- •Задание
- •Описание языка
- •Описания и типы
- •Способы описания собственных типов:
- •Описание констант:
- •Описание переменных:
- •Имена и выражения Выражения:
- •Переменные:
- •Операторы
- •Оператор присваивания
- •Структуры данных
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
- •Описание промежуточного языка
- •Описание перевода (таг) каждой конструкции входного языка Основная грамматика:
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
Подграмматика для переменных:
Нетерминалы:
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 |