- •1. Постановка задачи
- •Задание 10
- •2. Описание входного языка
- •2.1. Синтаксис входного языка
- •2.2. Семантика входного языка
- •2.2.1.Встроенные типы данных входного языка
- •2.2.2.Операции входного языка и их приоритет
- •2.2.3.Конструкции входного языка
- •3. Описание этапа лексического анализа.
- •3.1. Определение типов лексем.
- •3.2. Определение синтаксиса лексем
- •3. Описание этапа синтаксического анализа.
- •3.1 Построение кс-грамматики входного языка.
- •3.2 Определение класса кс-грамматики входного языка.
- •3.3 Постоение таблиц переменных, меток, констант и векторов
- •3.4 Описание промежуточного языка.
- •3.5 Неформальное описание перевода
- •Построение транслирующей грамматики
- •Построение атрибутной транслирующей грамматики
- •Построение атрибутного дмп-процессора
- •Тестирование атрибутного дмп-процессора
Построение атрибутного дмп-процессора
L-атрибутный детерминированный процессор с магазинной памятью, реализующий перевод, определяемый L-атрибутной транслирующей грамматикой в форме простого присваивания, входной грамматикой которого является LL(1)-грамматика, будет выглядеть так же, как и ДМП-преобразователь для разбора LL(1)-грамматик (см пп. 3.2)
Управляющая таблица разбора LL(1)-грамматики, построенная в пп. 3.2 должна быть преобразована путем добавления операционных символов в магазинный алфавит. При этом во множество отображений таблицы добавляется элемент «ВЫДАЧА», применяемый при любом символе на входной ленте и при операционном символе на вершине стека. Элемент (β, i) заменяется элементом (β, y), где y – цепочка операционных символов. При этом М(Х, а)= (β, y), если есть правило вывода Х→yβ.
Также каждый магазинный символ необходимо дополнить множеством полей для представления его атрибутов, а управляющую таблицу – действиями по вычислению атрибутов и записи их в соответствующие поля. Начальная конфигурация магазина – маркер дна и начальный символ грамматики.
В случае замены нетерминала Х в верхушке магазина в соответствии с управляющей таблицей М(Х, а)= (β, y) ДМП-процессор вталкивает в магазин цепочку символов β и выдает цепочку операционных символов y. При этом вычисляются атрибуты операционных символов, не вталкиваемых в магазин, и заполняются поля атрибутов магазинных символов и символов цепочки β.
В момент вталкивания символа в магазин в поле для каждого синтезированного атрибута и атрибута входного символа заносится указатель на связанный список полей, соответствующих унаследованным атрибутам, которым этот атрибут должен передаваться (в соответствии с атрибутными правилами грамматики), а поле для каждого унаследованного атрибута остается пустым.
Операция «ВЫБРОС» расширяется таким образом, что каждый атрибут текущего входного символа копируется во все поля из списка полей, на которые указывает соответствующее поле верхнего магазинного символа.
Операция «ВЫДАЧА» расширяется таким образом, что значения унаследованных атрибутов используются при выдаче символа в выходную цепочку, а значения синтезированных атрибутов вычисляются по атрибутным правилам грамматики и помещаются во все поля из списка полей, связанных с этим атрибутом.
Ниже приведена управляющая таблица («ВЫБРОС»= «в», (β, y) = (i), где i – номер правила с правой частью yβ).
|
ID |
Lab |
CN |
CF |
Str |
I F |
EL SE |
MA IN |
VO ID |
FOR |
GO TO |
PRIN TF |
SCANF |
TYPEDE |
CONST |
VECTOR |
Type |
GOp |
= |
Add Op |
M Op |
Rel Op |
Un Op |
! |
|| |
&& |
( |
) |
{ |
} |
[ |
] |
, |
; |
Sep |
ε |
S |
1 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
Decl |
55 |
|
|
|
|
|
|
|
56 |
|
|
|
|
|
55 |
55 |
55 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SOp |
2 |
2 |
2 |
2 |
|
2 |
|
|
|
2 |
2 |
2 |
2 |
2 |
|
|
|
|
|
|
|
|
2 |
2 |
|
|
2 |
|
2 |
3 |
2 |
|
|
|
|
|
Op |
5 |
4 |
5 |
5 |
|
5 |
|
|
|
5 |
5 |
5 |
5 |
6 |
|
|
|
|
|
|
|
|
5 |
5 |
|
|
5 |
|
5 |
|
5 |
|
|
|
|
|
Nop |
17 |
|
17 |
17 |
|
12 |
|
|
|
13 |
14 |
16 |
15 |
|
|
|
|
|
|
|
|
|
17 |
17 |
|
|
11 |
|
10 |
|
17 |
|
|
|
|
|
DecT |
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DecT’ |
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CopG |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
|
|
|
|
|
|
|
|
Cop |
|
|
|
|
|
19 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Cop' |
|
|
|
|
|
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CycOp |
|
|
|
|
|
|
|
|
|
22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TrOp |
|
|
|
|
|
|
|
|
|
|
25 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
InOp |
|
|
|
|
|
|
|
|
|
|
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OutOp |
|
|
|
|
|
|
|
|
|
|
|
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NPr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
|
|
|
|
25 |
|
|
|
Pr |
29 |
|
30 |
30 |
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
|
|
|
|
|
Exp |
33 |
|
33 |
33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
33 |
33 |
|
|
33 |
|
|
|
33 |
|
|
|
|
|
Exp' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
35 |
35 |
|
|
|
36 |
|
34 |
|
|
35 |
|
37 |
|
|
|
37 |
37 |
|
Dis |
38 |
|
38 |
38 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
38 |
|
|
38 |
|
|
|
38 |
|
|
|
|
|
Dis' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
40 |
|
|
|
40 |
|
40 |
39 |
|
40 |
|
40 |
|
|
|
40 |
40 |
|
Con |
41 |
|
41 |
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
41 |
41 |
|
|
41 |
|
|
|
41 |
|
|
|
|
|
Con' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
43 |
42 |
|
|
43 |
|
43 |
43 |
|
43 |
|
43 |
|
|
|
43 |
43 |
|
Rel |
44 |
|
44 |
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
44 |
|
|
44 |
|
|
|
|
|
|
|
|
|
Rel' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
46 |
46 |
|
45 |
46 |
|
46 |
46 |
|
46 |
|
46 |
|
|
|
46 |
46 |
|
Sm |
47 |
|
47 |
47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
47 |
|
|
47 |
|
|
|
|
|
|
|
|
|
Sm' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
49 |
49 |
48 |
49 |
49 |
|
49 |
49 |
|
49 |
|
49 |
|
|
|
49 |
49 |
|
Ml |
51 |
|
50 |
50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
53 |
54 |
|
|
52 |
|
|
|
51 |
|
|
|
|
|
Decl1 |
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
59 |
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Decl1’ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
|
|
Decl1’’ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
|
|
Typ |
74 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dim |
|
|
75 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Var |
67 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
68 |
|
|
|
|
|
Var’ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
70 |
70 |
70 |
70 |
70 |
|
70 |
70 |
|
70 |
|
70 |
69 |
70 |
|
70 |
70 |
|
VecVal |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
64 |
|
|
|
|
|
Num |
|
|
78 |
77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
LNum |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
65 |
|
|
|
ElV |
71 |
|
72 |
72 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ind |
|
|
76 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ID |
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Lab |
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CN |
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CF |
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Str |
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF |
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ELSE |
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MAIN |
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VOID |
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FOR |
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GOTO |
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PRINTF |
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SCANF |
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TYPEDEF |
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CONST |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VECTOR |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Type |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GOp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AddOp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MOp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RelOp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
UnOp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|
! |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
|
|| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
|
&& |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
|
( |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
|
[ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
|
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
|
; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
|
Sep |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
в |
|
{NLab} |
ВЫДАЧА {NLab} | |||||||||||||||||||||||||||||||||||
{Printf } |
ВЫДАЧА {Printf } | |||||||||||||||||||||||||||||||||||
{Scanf } |
ВЫДАЧА {Scanf } | |||||||||||||||||||||||||||||||||||
{OrOp} |
ВЫДАЧА {OrOp} | |||||||||||||||||||||||||||||||||||
{GOp} |
ВЫДАЧА {GOp} | |||||||||||||||||||||||||||||||||||
{UnOp} |
ВЫДАЧА {UnOp} | |||||||||||||||||||||||||||||||||||
{AndOp} |
ВЫДАЧА {AndOp} | |||||||||||||||||||||||||||||||||||
{AddOp} |
ВЫДАЧА {AddOp} | |||||||||||||||||||||||||||||||||||
{RelOp} |
ВЫДАЧА {RelOp} | |||||||||||||||||||||||||||||||||||
{MOp} |
ВЫДАЧА {MOp} | |||||||||||||||||||||||||||||||||||
{NotOp} |
ВЫДАЧА {NotOp} | |||||||||||||||||||||||||||||||||||
{NVar} |
ВЫДАЧА {NVar} | |||||||||||||||||||||||||||||||||||
{NConst} |
ВЫДАЧА {NConst} | |||||||||||||||||||||||||||||||||||
{NVec} |
ВЫДАЧА {NVec} | |||||||||||||||||||||||||||||||||||
{NType} |
ВЫДАЧА {NType} | |||||||||||||||||||||||||||||||||||
{REl} |
ВЫДАЧА {REl} | |||||||||||||||||||||||||||||||||||
{PEl} |
ВЫДАЧА {PEl} | |||||||||||||||||||||||||||||||||||
{BFL } |
ВЫДАЧА {BFL } | |||||||||||||||||||||||||||||||||||
{BRL} |
ВЫДАЧА {BRL} | |||||||||||||||||||||||||||||||||||
{DEFL} |
ВЫДАЧА {DEFL} | |||||||||||||||||||||||||||||||||||
┴ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
допуск |