- •Пояснительная записка
- •1 Формальная постановка задачи
- •2 Описание входного языка
- •2.1. Синтаксис входного языка
- •2.2. Семантика входного языка
- •2.2.1.Встроенные типы данных входного языка
- •2.2.2.Операции входного языка и их приоритет
- •2.2.3.Конструкции входного языка
- •3 Описание этапа лексического анализа
- •3.1 Описание типов лексем
- •3.2 Функции лексического анализатора
- •3.3 Тестирование лексического анализатора
- •4 Описание этапа синтаксического анализа
- •4.1 Исходная порождающая кс-грамматика
- •4.2 Разбиение исходной грамматики на подграмматики
- •4.3. Разработка дмп-процессора, порожденного исходной грамматикой
- •4.3.1 Алгоритм разбора для ll(1)-грамматик
- •4.3.2 Взаимодействие дмп-процессоров
- •4.3.3 Алгоритм работы дмп-процессора
- •4.3.4 Управляющие таблицы дмп-процессоров
- •4.3. Описание перевода во внутренний язык
- •4.3.1 Формат тетрады
- •4.3.2 Формат тетрад для представления основных операторов
- •4.3.3 Представление основных операторов(описанных в разделе семантики) с помощью тетрад
- •4.4.4 Взаимодействие атг с имеющимися таблицами лексического анализатора
- •4.4.5 Разработка атрибутной транслирующей грамматики
- •4.4.6 Описание используемых операционных символов
- •4.4.7 Атрибутный перевод дляLl(1)-грамматик
- •4.4.8 Атрибутный дмп-процессор
- •4.4.9 Тестовый пример
- •Список литературы
- •Приложение 1 Тестирование дмп-процессора
4.3.4 Управляющие таблицы дмп-процессоров
Подграмматика логического выражения
|
EXP |
( |
) |
or |
and |
not |
< |
> |
= = |
<= |
>= |
!= |
ε |
LEX |
C SC ,1 |
C SC ,1 |
|
|
|
C SC,1 |
|
|
|
|
|
|
|
C |
LM SLM, 5 |
LM SLM,5 |
|
|
|
LM SLM, 5 |
|
|
|
|
|
|
|
SC |
|
( REL ),9 |
ε ,3 |
or C SC, 2 |
|
|
|
|
|
|
|
|
ε ,3 |
REL |
EXP REO, 11 |
|
|
|
|
|
|
|
|
|
|
|
|
LM |
|
( LEX ), 8 |
|
|
|
not LM,9 |
|
|
|
|
|
|
|
SLM |
|
|
ε ,7 |
|
and LM SLM, 6 |
|
|
|
|
|
|
|
ε ,7 |
REO |
|
|
|
|
|
|
< EXP ,10 |
> EXP ,11 |
== EXP ,12 |
<= EXP ,13 |
>= EXP ,14 |
!= EXP ,15 |
|
EXP |
EXP┴, 62 |
|
|
|
|
|
|
|
|
|
|
|
|
( |
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
|
|
) |
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
|
or |
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
and |
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
not |
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
< |
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
= = |
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
<= |
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
>= |
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
!= |
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
┴ |
|
|
|
|
|
|
|
|
|
|
|
|
СВЁРТКА, 73 |
LEX →C SC (1) REL→EXP REO (10)
SC→or C SC (2) REO→ < EXP (11)
SC→ (3) REO→ > EXP (12)
LEX→REL (4) REO→ == EXP (13)
C→LM SLM (5) REO→ <= EXP (14)
SLM→and LM SLM (6) REO→ >= EXP (15)
SLM→ (7) REO→ != EXP (16)
LM→( LEX ) (8)
LM→not LM (9)
Подграмматика выражения
|
VAR |
( |
) |
+ |
- |
++ |
-- |
~ |
VEC |
* |
/ |
; |
[ |
ε |
EXP |
EXPS SAE, 1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
EXPS |
AE, 7 |
AE, 7 |
|
|
|
++AE, 5 |
-- AE, 6 |
~VEC, 8 |
|
|
|
|
|
|
SAE |
ε, 14 |
|
ε, 4 |
+AE SAE, 2 |
- AE SAE, 3 |
|
|
|
|
|
|
ε, 4 |
|
ε, 4 |
SME |
ε, 12 |
|
ε, 12 |
ε, 12 |
ε, 12 |
|
|
|
|
* ME SME, 10 |
/ ME SME, 11 |
ε, 12 |
|
ε, 12 |
AE |
ME SME, 9 |
ME SME, 9 |
|
|
|
|
|
|
|
|
|
|
|
|
ME |
VAR, 14 |
(EXP) , 13 |
|
|
|
|
|
|
|
|
|
|
|
|
VAR |
ВЫЗОВ |
|
|
|
|
|
|
|
|
|
|
|
Var,15 |
|
+ |
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
|
- |
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
++ |
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
-- |
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
/ |
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
~ |
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
VEC |
|
|
|
|
|
|
|
|
ВЫЗОВ |
|
|
|
|
|
┴ |
|
|
|
|
|
|
|
|
|
|
|
|
|
СВЁРТКА,72 |
EXP → EXPS SAE (1) EXPS → ~ VEC (8)
SAE → + AE SAE (2) AE → ME SME (9)
SAE → - AE SAE (3) SME → * ME SME (10)
SAE → (4) SME → / ME SME (11)
EXPS →++ AE (5) SME → (12)
EXPS → -- AE (6) ME → ( EXP ) (13)
EXPS → AE (7) ME → VAR (14)
Подграмматика операторов
|
EXP |
LEX |
VAR |
IDENT |
for |
goto |
if |
else |
cin>> |
cout<< |
= |
+= |
-= |
*= |
/= |
( |
) |
; |
ε |
COP |
|
|
SOP,1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SOP |
|
|
OP;SOP,2 |
|
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
OP;SOP,2 |
|
|
|
|
|
OP;SOP,2 |
|
|
ε,3 |
OP |
|
|
ULO, 22 |
|
ULO, 22 |
ULO, 22 |
ULO, 22 |
ULO, 22 |
ULO, 22 |
ULO, 22 |
|
|
|
|
|
ULO, 22 |
|
|
|
ULO |
|
|
EQO, 6 |
|
for(EQO; LEX; EQO) COP, 5 |
goto LABEL,8 |
if(LEX)COP ELO,10 |
|
cin>> VAR, 13 |
cout<< VAR, 14 |
|
|
|
|
|
(LEX)? (EXP): EXP),20 |
|
|
|
ELO |
|
|
|
|
|
|
|
else COP,11 |
|
|
|
|
|
|
|
|
|
|
|
EQO |
|
|
VAR EQRS, 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EQRS |
|
|
|
|
|
|
|
|
|
|
= EXP,15 |
+= EXP,16 |
-= EXP,17 |
*= EXP,18 |
/= EXP,19 |
|
|
|
|
EXP |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LEX |
|
LEX┴, 63 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VAR |
|
|
VAR┴,61 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EXP |
EXP┴, 62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LABEL |
|
|
|
IDENT,9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IDENT |
|
|
|
ВЫЗОВ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cin>> |
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
|
cout<< |
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
|
= |
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
|
+= |
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
|
-= |
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
|
*= |
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
|
/= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
|
( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ВЫБРОС |
|
|
? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
выброс |
|
┴ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
СВЁРТКА,74 |
COP → SOP (1) EQRS → /=EXP (19)
SOP → OP; SOP (2) ULO → (LEX)? (EXP) : (EXP ) (20)
SOP → (3)
OP → LABEL: ULO (4)
OP → ULO (22)
ULO →for(EQO; LEX; EQO) COP (5)
ULO → EQO (6)
EQO →VAR EQRS (7)
ULO → goto LABEL (8)
LABEL → IDENT (9)
ULO → if(LEX) COP ELO (10)
ELO → else COP (11)
ELO → (12)
ULO → cin>>VAR (13)
ULO →cout <<VAR (14)
EQRS → =EXP (15)
EQRS → +=EXP (16)
EQRS → -=EXP (17)
EQRS → *=EXP (18)
Подграмматика переменной
|
IDENT |
CF |
CI |
[ |
, |
] |
; |
AssignRel |
ε |
VAR |
IDENT, 1 |
CI, 10 |
|
[ ELEM SELEM], 2 |
|
|
|
|
|
ELEM |
IDENT SEND, 5 |
CF, 8 |
|
|
|
|
|
|
|
SEND |
|
|
|
[INDEX] ,6 |
ε,7 |
|
|
|
|
INDEX |
|
|
CI,9 |
|
|
|
|
|
|
SELEM |
|
|
|
|
, ELEM SELEM, 3 |
ε,4 |
|
|
ε,4 |
IDENT |
Выброс |
|
|
|
|
|
|
|
|
CF |
|
|
|
|
|
|
|
|
|
CI |
|
|
Выброс |
|
|
|
|
|
|
[ |
|
|
|
Выброс |
|
|
|
|
|
, |
|
|
|
|
Выброс |
|
|
|
|
] |
|
|
|
|
|
Выброс |
|
|
|
┴ |
|
|
|
|
|
|
|
|
cвертка, 71 |
VAR → IDENT (1)
VAR → [ ELEM SELEM] (2)
SELEM → , ELEM SELEM (3)
SELEM → (4)
ELEM → IDENT SEND (5)
SEND → [ INDEX ] (6)
SEND → (7)
ELEM → CF (8)
INDEX → CI (9)
VAR →CI ( 10 )
Подграмматика типов
|
int |
float |
bool |
IDENT |
vector |
[ |
] |
CI |
ε |
DECVAR |
BASE VAR, 1 |
BASE VAR, 1 |
BASE VAR, 1 |
|
|
|
|
|
|
BASE |
int, 2 |
float, 3 |
bool, 4 |
|
|
|
|
|
|
VAR |
|
|
|
VAR ┴, 61 |
|
|
|
|
|
DECVEC |
|
|
|
ε, 75 |
vector VAR; DECVEC, 5 |
|
|
|
|
DIM |
|
|
|
|
|
|
|
CI,7 |
|
[ |
|
|
|
|
|
Выброс |
|
|
|
] |
|
|
|
|
|
|
Выброс |
|
|
CI |
|
|
|
|
|
|
|
Выброс |
|
IDENT |
|
|
|
Выброс |
|
|
|
|
|
┴ |
|
|
|
|
|
|
|
|
cвертка,75 |
DECVAR -> BASE VAR (1)
BASE -> int (2)
BASE -> float (3)
BASE -> bool (4)
DECVEC -> vector VAR [ DIM] ; DECVEC (5)
DECVEC -> (6)
DIM -> CI (7)
|
Void main(){ |
int |
float |
bool |
vector |
EXP-буква или скобка( |
} |
ε |
P |
void main() { DVAR } |
|
|
|
|
|
|
|
DVAR |
|
DECVAR ;DVAR , 2 |
DECVAR ;DVAR , 2 |
DECVAR ;DVAR , 2 |
DVEC, 3 |
COP,4 |
|
|
DECVAR |
|
DECVAR┴, 65 |
DECVAR┴, 65 |
DECVAR┴, 65 |
|
|
|
|
DVEC |
|
|
|
|
DEVEC; DVEC, 5 |
COP,6 |
|
ε,7 |
DECVEC |
|
|
|
|
DECVEC┴, 65 |
|
|
|
COP |
|
|
|
|
|
COP┴, 64 |
|
|
void main(){ |
ВЫБРОС |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
ВЫБРОС |
|
┴ |
|
|
|
|
|
|
|
ДОПУСК |
Основная подграмматика
P → void main() { DVAR } (1)
DVAR → DECVAR; DVAR (2)
DVAR → DVEC (3)
DVAR → COP (4)
DVEC → DEVEC; DVEC (5)
DVEC →COP (6)
DVEC → (7)