- •0. Оглавление
- •1.2. Соглашения об обозначениях
- •2) Описания
- •1.5. Выражения
- •5) Аддитивные операторы
- •1) Оператор-выражение
- •2) Составной оператор
- •3) Условный оператор
- •Атрибутная грамматика
- •Семантические процедуры
- •2.2. Подграмматика описаний
- •Атрибутная грамматика
- •Семантические процедуры
- •2.3. Основная грамматика
- •Атрибутная грамматика
- •Семантические процедуры
- •Приложение 1. Таблицы лексем
- •Приложение 2. Описания триад
2.2. Подграмматика описаний
DEC |
список описаний |
DC |
описание |
DCC |
остаток |
T |
спецификатор типа |
T' |
остаток спецификатора типа |
ID |
иниц. описатель |
ID' |
остаток иниц. описателя |
IN |
инициализатор |
IN' |
остаток инициализатора |
DR |
описатель |
DR' |
остаток описателя |
DEC DC ; DEC
DEC
DC T ID DCC
DCC ID DCC
DCC
T const T'
T typedef T'
T' type
T' vector [ e ]
T' limited [ e .. e ]
ID DR ID' ,
ID' = e
ID'
DR id DR'
DR' [ e ] DR'
DR'
Атрибутная грамматика
DEC DC ; DEC
DEC
DC Ts1 IDp1 DCCp2
p1, p2 s1
DCCp1 IDp2 DCCp3
p2, p3 p1
DCC
Tp1 const T's1 {конст}A,R
A s1; p1 R
T typedef T' {тип}A,R
A s1; p1 R
T's1typep1
s1 p1
T's1 vector [ ep1 ] {вектор}A,R
A p1; s1 R
T's1 limited [ ep1 .. ep2 ] {ограниченный}A1,A2,R
A1 p1; A2 p2; s1 R
IDp1 DRp2,s1 ID's2 {присвоить}A1,A2
p2 p1; A1 s1; A2 s2
ID's1 = ep2
s1 p2
ID's1
s1 неопр.
DRp1,s1 idp2 DR'p3,s2 {объявление}A1,A2,R
p3 p1; A1 s2; A2 p2; s1 R
DR'p1,s1 [ ep2 ] {массив}A1,A2,R DR'p3,s2
A1 p1; A2 p2; p3 R; s1 s2
DR'p1,s1
s1 p1
Семантические процедуры
{конст}A,R
Устанавливает модификатор const в типеA и возвращает вR.
{тип}A,R
Устанавливает модификатор typedef в типеA и возвращаетR.
{вектор}A,R
В R возвращает типvector[A].
{ограниченный}A1,A2,R
В R возвращает типlimited[A1 .. A2].
{массив}A1,A2,R
У типа A1 наращивает размерность массива, устанавливает количество элементов вA2, и возвращает вR.
{объявление}A1,A2,R
Добавляет A2 в таблицу идентификаторов (в какую именно – зависит отA1).
2.3. Основная грамматика
PRG |
программа |
CO |
составной оператор |
CO' |
остаток составного оператора |
OP |
помеченный оператор |
ST |
оператор без метки |
G |
остаток оператора goto |
SE |
остаток оператора output |
IF |
оператор if |
IF' |
остаток оператора if |
PRG int main ( ) CO
CO { dec CO'
CO' OP CO'
CO' }
OP lab OP
OP ST
OP IF
ST CO
ST ;
ST e;
ST goto G
G id ;
G lab ;
ST return e ;
ST input ( e ) ;
ST output ( SE
SE e ) ;
SE str ) ;
ST while ( e ) ST
IF if ( e ) ST IF'
IF' else OP
IF'
Атрибутная грамматика
PRG int main ( ) CO
CO { dec CO'
CO' OP CO'
CO' }
OP labp1 {метка}A OP
A p1
OP ST
OP IF
ST CO
ST ;
ST e;
ST goto G
G idp1 {переход}A ;
A p1
G labp1 {переход}A ;
A p1
ST return es1 {выход}A ;
A s1
ST input ( es1 {ввод}A ) ;
A s1
ST output ( SE
SE es1 {вывод}A ) ;
A s1
SE strs1 {вывод}A ) ;
A s1
ST while ( {уид}R1 {уид}R2 {метка}A1 ep1 {переход_0}A2,A3 ) ST {переход}A4 {метка}A5
A1, A4R1;A2 p1;A3, A5 R2
IF if ( {уид}R ep1 {переход_0}A1,A2 ) ST {метка}A3 IF'
A2, A3R; A1p1
IF' else OP
IF'