Міністерство освіти та науки України
Національний університет «Львівська політехніка»
кафедра прикладної математики
РОЗРАХУНКОВА
РОБОТА
з системного програмування
Задано граматику
<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<оператор>
<вираз>::=<операнд>|<операнд><операція><вираз>
<операнд>::=<змінна>|<число>|(<вираз>)
<операція>::=+|–|*|/
<відношення>::<|=|>|<>|<=|>=
Перетворюю дану граматику позбуваючись безпосередньої лівої та правої рекурсії.
Ввожу односимвольні не термінали.
Зарезервовані слова та операції теж замінюю на одно символьні константи.
P→bCn.
C→A
A→B|B;A
B→V|F
V→ivU
F→fZ
Z→YTE
Y→LdL
T→tV
E→lV
L→U
U→M|MoU
M→i|c|(K
K→L)
b – begin
n – end
i – ідентифікатор
d – відношення < > = …
f – if
t – then
l – else
v – присвоїти
o – операція * + – /
c – число.
Знаходжу відношення передування та будую відповідну таблицю. Для цього спочатку складаю таблицю ліво- та право- виводимих символів.
L(U)
R(U)
T
b
.
C
ABVFif
ABFVZUEMKic)
A
BVFif
ABFVZUEMKic)
B
VFif
FVZUEMKic)
V
i
UMKic)
F
f
ZEVUMKic)
Z
YLUMic(
EVUMKic)
Y
LUMic(
LUMKic)
T
t
VUMKic)
E
l
VUMKic)
L
UMic(
UMKic)
U
Mic(
UMKic)
M
ic(
Kic)
K
LUMic(
)
Таблиця відношень передування:
P
C
A
B
V
F
Z
Y
T
E
L
U
M
K
b
n
.
;
i
:
=
f
d
t
l
o
c
(
)
├
P
C
=
A
>
>
B
>
=
>
V
>
>
=
>
F
>
>
>
Z
>
>
Y
=
<
T
=
<
E
>
>
L
=
=
=
U
>
>
>
>
>
>
>
M
>
>
>
>
>
=
>
>
K
>
>
>
>
>
>
>
>
b
=
<
<
<
<
<
<
n
=
.
>
;
=
<
<
<
<
<
i
>
>
=
>
>
>
>
>
>
:
=
=
=
<
<
<
<
f
=
<
=
<
<
<
<
<
d
=
<
<
<
<
<
t
=
<
l
=
<
o
=
<
<
<
<
c
>
>
>
>
>
>
>
>
(
<
<
<
=
<
<
<
)
>
>
>
>
>
>
>
>
┤
<
<
<
<
<
<
<
<
<
<
<
<
<
Після лексичного аналізу вхідна стрічка буде виглядати так:
bivc;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.
Проілюструємо синтаксичний аналіз знизу догори:
#
Стек
Необроблений рядок
Номер прав.
1
┤
bivc;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
2
┤b
ivc;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
3
┤bi
vc;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
4
┤biv
c;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
5
┤bivc
;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
6
┤bivM
;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
13
7
┤bivU
;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
12
8
┤bV
;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
5
9
┤bB
;ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
4
10
┤bB;
ivc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
11
┤bB;i
vc;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
12
┤bB;iv
c;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
13
┤bB;ivc
;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
14
┤bB;ivM
;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
13
15
┤bB;ivU
;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
12
16
┤bB;V
;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
5
17
┤bB;B
;ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
4
18
┤bB;B;
ivc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
19
┤bB;B;i
vc;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
20
┤bB;B;iv
c;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
21
┤bB;B;ivc
;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
22
┤bB;B;ivM
;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
13
23
┤bB;B;ivU
;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
12
24
┤bB;B;V
;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
5
25
┤bB;B;B
;fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
4
26
┤bB;B;B;
fiocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
27
┤bB;B;B;f
iocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
28
┤bB;B;B;fi
ocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
29
┤bB;B;B;fM
ocdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
13
30
┤bB;B;B;fMo
cdctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
31
┤bB;B;B;fMoc
dctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
32
┤bB;B;B;fMoM
dctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
13
33
┤bB;B;B;fMoU
dctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
12
34
┤bB;B;B;fU
dctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
12
35
┤bB;B;B;fL
dctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
11
36
┤bB;B;B;fLd
ctiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
37
┤bB;B;B;fLdc
tiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
38
┤bB;B;B;fLdM
tiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
13
39
┤bB;B;B;fLdU
tiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
12
40
┤bB;B;B;fLdL
tiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
11
41
┤bB;B;B;fY
tiv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
8
42
┤bB;B;B;fYt
iv(ioi)oilivioioi;iv(ioi)o(ioi)n.├
43
┤bB;B;B;fYti
v(ioi)oilivioioi;iv(ioi)o(ioi)n.├
44
┤bB;B;B;fYtiv
(ioi)oilivioioi;iv(ioi)o(ioi)n.├
45
┤bB;B;B;fYtiv(
ioi)oilivioioi;iv(ioi)o(ioi)n.├
46
┤bB;B;B;fYtiv(i
oi)oilivioioi;iv(ioi)o(ioi)n.├
47
┤bB;B;B;fYtiv(M
oi)oilivioioi;iv(ioi)o(ioi)n.├
13
48
┤bB;B;B;fYtiv(Mo
i)oilivioioi;iv(ioi)o(ioi)n.├
49
┤bB;B;B;fYtiv(Moi
)oilivioioi;iv(ioi)o(ioi)n.├
50
┤bB;B;B;fYtiv(MoM
)oilivioioi;iv(ioi)o(ioi)n.├
13
51
┤bB;B;B;fYtiv(MoU
)oilivioioi;iv(ioi)o(ioi)n.├
12
52
┤bB;B;B;fYtiv(U
)oilivioioi;iv(ioi)o(ioi)n.├
12
53
┤bB;B;B;fYtiv(L
)oilivioioi;iv(ioi)o(ioi)n.├
11
54
┤bB;B;B;fYtiv(L)
oilivioioi;iv(ioi)o(ioi)n.├
55
┤bB;B;B;fYtiv(K
oilivioioi;iv(ioi)o(ioi)n.├
14
56
┤bB;B;B;fYtivM
oilivioioi;iv(ioi)o(ioi)n.├
13
57
┤bB;B;B;fYtivMo
ilivioioi;iv(ioi)o(ioi)n.├
58
┤bB;B;B;fYtivMoi
livioioi;iv(ioi)o(ioi)n.├
59
┤bB;B;B;fYtivMoM
livioioi;iv(ioi)o(ioi)n.├
13
60
┤bB;B;B;fYtivMoU
livioioi;iv(ioi)o(ioi)n.├
12
61
┤bB;B;B;fYtivU
livioioi;iv(ioi)o(ioi)n.├
12
62
┤bB;B;B;fYtV
livioioi;iv(ioi)o(ioi)n.├
5
63
┤bB;B;B;fYT
livioioi;iv(ioi)o(ioi)n.├
9
64
┤bB;B;B;fYTl
ivioioi;iv(ioi)o(ioi)n.├
65
┤bB;B;B;fYTli
vioioi;iv(ioi)o(ioi)n.├
66
┤bB;B;B;fYTliv
ioioi;iv(ioi)o(ioi)n.├
67
┤bB;B;B;fYTlivi
oioi;iv(ioi)o(ioi)n.├
68
┤bB;B;B;fYTlivM
oioi;iv(ioi)o(ioi)n.├
13
69
┤bB;B;B;fYTlivMo
ioi;iv(ioi)o(ioi)n.├
70
┤bB;B;B;fYTlivMoi
oi;iv(ioi)o(ioi)n.├
71
┤bB;B;B;fYTlivMoM
oi;iv(ioi)o(ioi)n.├
13
72
┤bB;B;B;fYTlivMoMo
i;iv(ioi)o(ioi)n.├
73
┤bB;B;B;fYTlivMoMoi
;iv(ioi)o(ioi)n.├
74
┤bB;B;B;fYTlivMoMoM
;iv(ioi)o(ioi)n.├
13
75
┤bB;B;B;fYTlivMoMoU
;iv(ioi)o(ioi)n.├
12
76
┤bB;B;B;fYTlivMoU
;iv(ioi)o(ioi)n.├
12
77
┤bB;B;B;fYTlivU
;iv(ioi)o(ioi)n.├
12
78
┤bB;B;B;fYTlV
;iv(ioi)o(ioi)n.├
5
79
┤bB;B;B;fYTE
;iv(ioi)o(ioi)n.├
1
80
┤bB;B;B;fZ
;iv(ioi)o(ioi)n.├
7
81
┤bB;B;B;F
;iv(ioi)o(ioi)n.├
6
82
┤bB;B;B;B
;iv(ioi)o(ioi)n.├
4
83
┤bB;B;B;B;
iv(ioi)o(ioi)n.├
84
┤bB;B;B;B;i
v(ioi)o(ioi)n.├
85
┤bB;B;B;B;iv
(ioi)o(ioi)n.├
86
┤bB;B;B;B;iv(
ioi)o(ioi)n.├
87
┤bB;B;B;B;iv(i
oi)o(ioi)n.├
88
┤bB;B;B;B;iv(M
oi)o(ioi)n.├
13
89
┤bB;B;B;B;iv(Mo
i)o(ioi)n.├
90
┤bB;B;B;B;iv(Moi
)o(ioi)n.├
91
┤bB;B;B;B;iv(MoM
)o(ioi)n.├
13
92
┤bB;B;B;B;iv(MoU
)o(ioi)n.├
12
93
┤bB;B;B;B;iv(U
)o(ioi)n.├
12
94
┤bB;B;B;B;iv(L
)o(ioi)n.├
11
95
┤bB;B;B;B;iv(L)
o(ioi)n.├
96
┤bB;B;B;B;iv(K
o(ioi)n.├
14
97
┤bB;B;B;B;ivM
o(ioi)n.├
13
98
┤bB;B;B;B;ivMo
(ioi)n.├
99
┤bB;B;B;B;ivMo(
ioi)n.├
100
┤bB;B;B;B;ivMo(i
oi)n.├
101
┤bB;B;B;B;ivMo(M
oi)n.├
13
102
┤bB;B;B;B;ivMo(Mo
i)n.├
103
┤bB;B;B;B;ivMo(Moi
)n.├
104
┤bB;B;B;B;ivMo(MoM
)n.├
13
105
┤bB;B;B;B;ivMo(MoU
)n.├
12
106
┤bB;B;B;B;ivMo(U
)n.├
12
107
┤bB;B;B;B;ivMo(L
)n.├
11
108
┤bB;B;B;B;ivMo(L)
n.├
109
┤bB;B;B;B;ivMo(K
n.├
14
110
┤bB;B;B;B;ivMoM
n.├
13
111
┤bB;B;B;B;ivMoU
n.├
12
112
┤bB;B;B;B;ivU
n.├
12
113
┤bB;B;B;B;V
n.├
5
114
┤bB;B;B;B;B
n.├
4
115
┤bB;B;B;B;A
n.├
3
116
┤bB;B;B;A
n.├
3
117
┤bB;B;A
n.├
3
118
┤bB;A
n.├
3
119
┤bA
n.├
3
120
┤bC
n.├
2
121
┤bCn
.├
122
┤bCn.
├
123
┤P
├
1
Будую дерево виводу:
Будую тетради:
:= 4, , k
:= 3, , i
:= 10, , m
+ k, i, t1
BLE 10,t1, 10
+ k, i, t2
* t2, m, t3
:= t3, , s
BR 13, ,
* i, m, t4
+ k, t4, t5
:=, t5, , s
– s, k, t6
+ m, i, t7
* t6, t7, t8
:= t8, , b