- •Задание
- •Описание языка
- •Описания и типы
- •Способы описания собственных типов:
- •Описание констант:
- •Описание переменных:
- •Имена и выражения Выражения:
- •Переменные:
- •Операторы
- •Оператор присваивания
- •Структуры данных
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
- •Описание промежуточного языка
- •Описание перевода (таг) каждой конструкции входного языка Основная грамматика:
- •Подграмматика для выражения:
- •Подграмматика для описания типов:
- •Подграмматика для переменных:
- •Подграмматика для операторов:
Подграмматика для описания типов:
Нетерминалы:
TYPt |
тип |
t - синтезированный |
TSMPt |
простой тип |
t - синтезированный |
TCMPt |
составной тип |
t - синтезированный |
TDIAt |
диапазонный тип |
t - синтезированный |
TDIA`t,p |
остаток диапазонного типа |
t - синтезированный, p - унаследованный |
TOPRt |
определенный ранее тип |
t - синтезированный |
ITt |
имя типа |
t - синтезированный |
CNSt |
константа |
t - синтезированный |
TMASt |
массивный тип |
t - синтезированный |
TZAPt |
запись |
t - синтезированный |
TIt |
тип индекса |
t - синтезированный |
TI`t,p |
остаток типа индекса |
t - синтезированный, p - унаследованный |
TKOMt |
тип компоненты |
t - синтезированный |
LPp,t |
список полей |
t - синтезированный, p - унаследованный |
LP`p,t |
остаток списка полей |
t - синтезированный, p - унаследованный |
SECt |
секция записи |
t - синтезированный |
LIt |
список имен |
t - синтезированный |
LI`p,t |
остаток списка имен |
t - синтезированный, p - унаследованный |
TYPp1 ® TSMPp1
p2¬p1
TYPp1 ® TCMPp1
p2¬p1
TSMPp2 ® intp1
p2¬p1
TSMPp2 ® reap1
p2¬p1
TSMPp2 ® comp1
p2¬p1
TSMPp2 ® boop1
p2¬p1
TSMPp2 ® TDIAp1
p2¬p1
TSMPp2 ® TOPRp1
p2¬p1
TDIAt2 ® CNSp1 TDIA`p2,t1
p2¬p1
pt¬t1
TDIA`p1,r2 ® .. CNSq1 {диапазон}p2,q2,r1
r1¬НОВЭЛТ
p2¬p1
r2¬r1
TOPRp2 ® ITp1
p2¬p1
ITp2 ® idp1
p2¬p1
TCMPp2 ® TMASp1
p2¬p1
TCMPp2 ® TZAPp1
p2¬p1
TMASr4 ® arr [ TIp1 {индекс}p2,r1 TI`r2,t1 ] of TKOMq1 {массив}t2,q2,r3
r1,r2¬НОВЭЛТ
r3,r4¬НОВЭЛТ
p2¬p1
t2¬t1
q2¬q1
t4¬t3
TI`p1,t2 ® , TIq1 {индексы}p2,p1,r1 TI`r2,t1
r1,r2¬НОВЭЛТ
p2¬p1
t2¬t1
TI`p2,p1 ® e
p2¬p1
TIp2 ® TSMPp1
p2¬p1
TKOMp2 ® ITp1
p2¬p1
TZAPr4 ® rec {пустое_поле}r1 LPr2,p1 end {запись}p2,r3
r1,r2¬НОВЭЛТ
r3,r4¬НОВЭЛТ
p2¬p1
LPp1,t2 ® SECq1 {список_полей}p2,q2,r1 LP`r2,t1
r1,r2¬НОВЭЛТ
p2¬p1
q2¬q1
t2¬t1
LPp1,p2 ® e
p2¬p1
LP`p1,t2 ® ; SECq1 {список_полей}p2,q2,r1 LP`r2,t1
r1,r2¬НОВЭЛТ
p2¬p1
q2¬q1
t2¬t1
LP`p1,p2 ® e
p2¬p1
SECr2 ® LIp1 : TYPq1 {поля}p2,q2,r1
r1,r2¬НОВЭЛТ
p2¬p1
q2¬q1
LIr4 ® idp1 LI`r1,t1 {список_имен}p2,t2,r3
r1,r2¬НОВЭЛТ
r3,r4¬НОВЭЛТ
p2¬p1
t2¬t1
LI`q1,q3 ® , idp1 LI`r1,t1 {список_имен}p2,t2,q2
r1,r2¬НОВЭЛТ
p2¬p1
t2¬t1
q2,q3¬q1
LI`p1,p3 ® {пустой_список_имен}p2
p2,p3¬r1
НОВЭЛТ - процедура, которая выдает значение указателя на свободную позицию таблицы, используемой для запоминания результата.
Операционные символы:
{диапазон}A1,A2,R |
Создать диапазонный тип и записать значение в таблицу промежуточных результатов по адресу R. Значения по адресам A1 и А2, задающие границы диапазона, должны быть типа integer. |
{индекс}A,R |
Записать в переменную по адресу R индексы А массива. |
{индексы}A1,A2,R |
Записать в переменную по адресу R индексы, содержащиеся в A1 и А2. |
{массив}A1,А2,R |
Записать в переменную по адресу R новый тип, представляющий собой массив с индексами А1 из элементов типа А2. |
{пустое_поле}R |
Записать в таблицу по адресу R информацию, что поле пусто. |
{список_полей}A1,А2,R |
Записать в таблицу по адресу R информацию о полях записи, содержащихся в А1 и А2. |
{поля}A1,А2,R |
Записать в таблицу по адресу R информацию о поле записи, где А1 - список имен, А2 - тип полей. |
{запись}A,R |
Записать в переменную по адресу R новый тип, представляющий собой запись с полями А. |
{список_имен}А1,А2,R |
Записать в таблицу по адресу R список имен из А1 и из А2. |
{пустой_список_имен}R |
Записать в таблицу по адресу R пустой список имен. |