Міністерство освіти та науки України
Національний університет «Львівська політехніка»
кафедра прикладної математики
РОЗРАХУНКОВА
РОБОТА
з системного програмування
Задано граматику
<cекція операторів> ::= BEGIN <оператори> END
<oператори> ::= <оператор> | <оператори> ; <оператор>
< оператор > ::= < ціле > : < оператор без мітки > | < оператор без мітки >
< оператор без мітки > ::= < оператор присвоєння > | < умовний оператор >
| < оператор переходу > | < блок >
< оператор присвоєння > ::= < змінна > := < вираз >
<умовний оператор > ::= IF < вираз > THEN < оператор > ELSE < оператор >
IF < вираз > THEN < оператор >
< оператор переходу > ::= GOTO < ціле >
< блок > ::= BEGIN < оператори > END
< вираз > ::= < простий вираз > < відношення > < простий вираз >
| < простий вираз >
< відношення > ::= = | < | > | < > | <= | >=
< простий вираз > ::= < терм > | < простий вираз > + < терм >
| < простий вираз > − < терм > | < простий вираз > OR < терм >
< терм > ::= < множник > | < терм > * < множник > | < терм > / < множник >
| < терм > AND < множник >
< множник > ::= < змінна > | < ціле > | ( < вираз > ) | NOT < множник >
Постановка задачі:
із заданої граматики вибрати необхідну для заданого варіанту підмножину правил ;
знайти відношення передування;
виконати синтаксичний аналіз знизу догори;
побудувати тетради для заданого фрагменту. При потреби внести зміни у граматику.
Варіант №2
BEGIN k:=4; i:=3; m:=1;
IF k+i > 1 THEN s:=(k+i)*m ELSE s:=k+i*m;
b:= (s−k) *(m+i)
END .
Вибираю необхідну множину правил:
<секція операторів>::=BEGIN<оператори>END
<оператори>::=<оператор>|<оператори>;<оператор>
<оператор>::=<оператор присвоєння>|<умовний оператор>
<оператор присвоєння>::=<змінна>:=<вираз>
<умовний оператор>::=IF<вираз><відношення><вираз> THEN<оператор>ELSE<оператор>
<вираз>::=<операнд>|<операнд><операція><вираз>
<операнд>::=<змінна>|<число>|(<вираз>)
<операція>::=+|–|*|/
<відношення>::<|=|>|<>|<=|>=
Перетворюю дану граматику позбуваючись безпосередньої лівої та правої рекурсії.
Ввожу односимвольні не термінали.
Зарезервовані слова та операції теж замінюю на одно символьні константи.
T→bCn.
C→A
A→B|B;A
B→V|F
V→i:=U
F→fLdLtVlV
L→U
U→M|MoU
M→i|c|(K
K→L)
b – begin
n – end
i – ідентифікатор
d – відношення < > = …
f – if
t – then
l – else
o – операція * + – /
c – число.
Знаходжу відношення передування та будую відповідну таблицю. Для цього спочатку складаю таблицю ліво- та право- виводимих символів.
L(U)
R(U)
T
b
.
C
ABVFif
ABFVUMKic)
A
BVFif
ABFVUMKic)
B
VFif
FVUMKic)
V
i
UMKic)
F
f
VUMKic)
L
UMic(
UMKic)
U
Mic(
UMKic)
M
ic(
Kic)
K
LUMic(
)
T
C
A
B
V
F
L
U
M
K
b
n
.
;
i
:
=
f
d
t
l
o
c
(
)
├
T
C
=
A
>
>
B
>
=
>
V
>
>
=
>
F
>
>
>
L
=
=
=
U
>
>
>
>
>
>
>
>
>
>
>
>
=
>
>
K
>
>
>
>
>
>
>
>
b
=
<
<
<
<
<
<
n
=
.
>
;
=
<
<
<
<
<
i
>
>
=
>
>
>
>
>
>
:
=
=
=
<
<
<
<
f
=
<
<
<
<
<
d
=
<
<
<
<
<
t
=
<
l
=
<
o
=
<
<
<
<
c
>
>
>
>
>
>
>
>
(
<
<
<
=
<
<
<
)
>
>
>
>
>
>
>
>
┤
<
<
<
<
<
<
<
<
<
<
<
<
Таблиця відношень передування:
Після лексичного аналізу вхідна стрічка буде виглядати так:
bi:=c;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.
Проілюструємо синтаксичний аналіз знизу догори:
#
Стек
Необроблений рядок
Номер прав.
1
┤
bi:=c;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
2
┤b
i:=c;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
3
┤bi
:=c;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
4
┤bi:
=c;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
5
┤bi:=
c;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
6
┤bi:=c
;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
7
┤bi:=M
;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
8
┤bi:=U
;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
5
9
┤bV
;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
4
1
┤bB
;i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
11
┤bB;
i:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
12
┤bB;i
:=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
13
┤bB;i:
=c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
14
┤bB;i:=
c;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
15
┤bB;i:=c
;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
16
┤bB;i:=M
;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
17
┤bB;i:=U
;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
5
18
┤bB;V
;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
4
19
┤bB;B
;i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
2
┤bB;B;
i:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
21
┤bB;B;i
:=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
22
┤bB;B;i:
=c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
23
┤bB;B;i:=
c;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
24
┤bB;B;i:=c
;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
25
┤bB;B;i:=M
;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
26
┤bB;B;i:=U
;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
5
27
┤bB;B;V
;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
4
28
┤bB;B;B
;fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
29
┤bB;B;B;
fiocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
3
┤bB;B;B;f
iocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
31
┤bB;B;B;fi
ocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
32
┤bB;B;B;fM
ocdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
33
┤bB;B;B;fMo
cdcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
34
┤bB;B;B;fMoc
dcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
35
┤bB;B;B;fMoM
dcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
36
┤bB;B;B;fMoU
dcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
37
┤bB;B;B;fU
dcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
7
38
┤bB;B;B;fL
dcti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
39
┤bB;B;B;fLd
cti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
4
┤bB;B;B;fLdc
ti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
41
┤bB;B;B;fLdM
ti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
42
┤bB;B;B;fLdU
ti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
7
43
┤bB;B;B;fLdL
ti:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
44
┤bB;B;B;fLdLt
i:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
45
┤bB;B;B;fLdLti
:=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
46
┤bB;B;B;fLdLti:
=(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
47
┤bB;B;B;fLdLti:=
(ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
48
┤bB;B;B;fLdLti:=(
ioi)oili:=ioioi;i:=(ioi)o(ioi)n.├
49
┤bB;B;B;fLdLti:=(i
oi)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
5
┤bB;B;B;fLdLti:=(M
oi)oili:=ioioi;i:=(ioi)o(ioi)n.├
51
┤bB;B;B;fLdLti:=(Mo
i)oili:=ioioi;i:=(ioi)o(ioi)n.├
52
┤bB;B;B;fLdLti:=(Moi
)oili:=ioioi;i:=(ioi)o(ioi)n.├
9
53
┤bB;B;B;fLdLti:=(MoM
)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
54
┤bB;B;B;fLdLti:=(MoU
)oili:=ioioi;i:=(ioi)o(ioi)n.├
8
55
┤bB;B;B;fLdLti:=(U
)oili:=ioioi;i:=(ioi)o(ioi)n.├
7
56
┤bB;B;B;fLdLti:=(L
)oili:=ioioi;i:=(ioi)o(ioi)n.├
57
┤bB;B;B;fLdLti:=(L)
oili:=ioioi;i:=(ioi)o(ioi)n.├
1
58
┤bB;B;B;fLdLti:=(K
oili:=ioioi;i:=(ioi)o(ioi)n.├
9
59
┤bB;B;B;fLdLti:=M
oili:=ioioi;i:=(ioi)o(ioi)n.├
6
┤bB;B;B;fLdLti:=Mo
ili:=ioioi;i:=(ioi)o(ioi)n.├
61
┤bB;B;B;fLdLti:=Moi
li:=ioioi;i:=(ioi)o(ioi)n.├
9
62
┤bB;B;B;fLdLti:=MoM
li:=ioioi;i:=(ioi)o(ioi)n.├
8
63
┤bB;B;B;fLdLti:=MoU
li:=ioioi;i:=(ioi)o(ioi)n.├
8
64
┤bB;B;B;fLdLti:=U
li:=ioioi;i:=(ioi)o(ioi)n.├
5
65
┤bB;B;B;fLdLtV
li:=ioioi;i:=(ioi)o(ioi)n.├
66
┤bB;B;B;fLdLtVl
i:=ioioi;i:=(ioi)o(ioi)n.├
67
┤bB;B;B;fLdLtVli
:=ioioi;i:=(ioi)o(ioi)n.├
68
┤bB;B;B;fLdLtVli:
=ioioi;i:=(ioi)o(ioi)n.├
69
┤bB;B;B;fLdLtVli:=
ioioi;i:=(ioi)o(ioi)n.├
7
┤bB;B;B;fLdLtVli:=i
oioi;i:=(ioi)o(ioi)n.├
9
71
┤bB;B;B;fLdLtVli:=M
oioi;i:=(ioi)o(ioi)n.├
72
┤bB;B;B;fLdLtVli:=Mo
ioi;i:=(ioi)o(ioi)n.├
73
┤bB;B;B;fLdLtVli:=Moi
oi;i:=(ioi)o(ioi)n.├
9
74
┤bB;B;B;fLdLtVli:=MoM
oi;i:=(ioi)o(ioi)n.├
75
┤bB;B;B;fLdLtVli:=MoMo
i;i:=(ioi)o(ioi)n.├
76
┤bB;B;B;fLdLtVli:=MoMoi
;i:=(ioi)o(ioi)n.├
9
77
┤bB;B;B;fLdLtVli:=MoMoM
;i:=(ioi)o(ioi)n.├
8
78
┤bB;B;B;fLdLtVli:=MoMoU
;i:=(ioi)o(ioi)n.├
8
79
┤bB;B;B;fLdLtVli:=MoU
;i:=(ioi)o(ioi)n.├
8
8
┤bB;B;B;fLdLtVli:=U
;i:=(ioi)o(ioi)n.├
5
81
┤bB;B;B;fLdLtVlV
;i:=(ioi)o(ioi)n.├
6
82
┤bB;B;B;F
;i:=(ioi)o(ioi)n.├
4
83
┤bB;B;B;B
;i:=(ioi)o(ioi)n.├
84
┤bB;B;B;B;
i:=(ioi)o(ioi)n.├
85
┤bB;B;B;B;i
:=(ioi)o(ioi)n.├
86
┤bB;B;B;B;i:
=(ioi)o(ioi)n.├
87
┤bB;B;B;B;i:=
(ioi)o(ioi)n.├
88
┤bB;B;B;B;i:=(
ioi)o(ioi)n.├
89
┤bB;B;B;B;i:=(i
oi)o(ioi)n.├
9
9
┤bB;B;B;B;i:=(M
oi)o(ioi)n.├
91
┤bB;B;B;B;i:=(Mo
i)o(ioi)n.├
92
┤bB;B;B;B;i:=(Moi
)o(ioi)n.├
9
93
┤bB;B;B;B;i:=(MoM
)o(ioi)n.├
8
94
┤bB;B;B;B;i:=(MoU
)o(ioi)n.├
8
95
┤bB;B;B;B;i:=(U
)o(ioi)n.├
7
96
┤bB;B;B;B;i:=(L
)o(ioi)n.├
97
┤bB;B;B;B;i:=(L)
o(ioi)n.├
1
98
┤bB;B;B;B;i:=(K
o(ioi)n.├
9
99
┤bB;B;B;B;i:=M
o(ioi)n.├
1
┤bB;B;B;B;i:=Mo
(ioi)n.├
11
┤bB;B;B;B;i:=Mo(
ioi)n.├
12
┤bB;B;B;B;i:=Mo(i
oi)n.├
9
13
┤bB;B;B;B;i:=Mo(M
oi)n.├
14
┤bB;B;B;B;i:=Mo(Mo
i)n.├
15
┤bB;B;B;B;i:=Mo(Moi
)n.├
9
16
┤bB;B;B;B;i:=Mo(MoM
)n.├
8
17
┤bB;B;B;B;i:=Mo(MoU
)n.├
8
18
┤bB;B;B;B;i:=Mo(U
)n.├
7
19
┤bB;B;B;B;i:=Mo(L
)n.├
11
┤bB;B;B;B;i:=Mo(L)
n.├
1
111
┤bB;B;B;B;i:=Mo(K
n.├
9
112
┤bB;B;B;B;i:=MoM
n.├
8
113
┤bB;B;B;B;i:=MoU
n.├
8
114
┤bB;B;B;B;i:=U
n.├
5
115
┤bB;B;B;B;V
n.├
4
116
┤bB;B;B;B;B
n.├
3
117
┤bB;B;B;B;A
n.├
3
118
┤bB;B;B;A
n.├
3
119
┤bB;B;A
n.├
3
12
┤bB;A
n.├
3
121
┤bA
n.├
2
122
┤bC
n.├
123
┤bCn
.├
124
┤bCn.
├
1
125
┤T
├
Будую дерево виводу:
Будую тетради:
:= 4, _, k
;= 3, _, i
:= 10, _, m
+ i, k, t1
–, t1, 10, t2
BMZ 11, , t2
+ k, i, t3
* t3, m, t4
:= t4, , s
BR 14, ,
* i, m, t5
+ k, t5, t6
:=, t6, , s
– s, k, t7
+ m, i, t8
* t7, 8, t9
:= t9, , b