Professional Documents
Culture Documents
Chuong 3 - Phan Tich Cu Phap Tren Xuong
Chuong 3 - Phan Tich Cu Phap Tren Xuong
*
rm
oAe
rm
o|e. i khi ta cn gi | l mt
handle, xu e bn phi | ch cha cc k hiu kt thc
Nu mt vn phm l khng m h th vi mi right-
sentential form c duy nht mt handle ca n
V d 3.7: Trong dn xut S
rm
aABe
rm
aAde
rm
aAbcde
rm
abbcde cc handle c gch chn
32
V d 3.8: Xt vn phm m h
E E + E | E * E | (E) | id
Vi cng mt biu thc id+id*id s c hai dn xut
phi nht (cc handle c gch chn). Cng mt
right sentence form E+E*id3 trong trng hp u
id3 l handle cn trng hp th 2 handle l E+E
E
rm
E + E
rm
E + E * E
rm
E + E * id3
rm
E + id2 * id3
rm
id1 + id2 * id3
E
rm
E * E
rm
E * id3
rm
E + E * id3
rm
E + id2 * id3
rm
id1 + id2 * id3
33
Biu din stack ca shift- reduce parsing (phn tch
dch-thu gn)
STACK INPUT ACTION
$
$ id
1
$ E
$ E +
$ E + id
2
$ E + E
$ E + E *
$ E + E * id
3
$ E + E * E
$ E + E
$ E
id
1
+ id
2
* id
3
$
+ id
2
* id
3
$
+ id
2
* id
3
$
id
2
* id
3
$
* id
3
$
* id
3
$
id
3
$
$
$
$
$
shift
reduce by E id
shift
shift
reduce by E id
shift
shift
reduce by E id
reduce by E E * E
reduce by E E + E
accept
34
Phn tch c php LR (LR parser)
LR(k) l mt k thut phn tch c php t di ln
hiu qu, c th s dng phn tch mt lp rng cc
vn phm phi ng cnh.
- L(Left-to-right): Duyt chui nhp t tri sang phi
- R(Rightmost derivation): Xy dng chui dn xut
phi nht o ngc
- k:S lng k hiu lookahead ti mi thi im, dng
a ra quyt nh phn tch. Khi khng cp n
k, chng ta hiu ngm l k = 1
35
u im ca LR:
- C th nhn bit hu nh tt c cc ngn ng lp trnh
c to ra bi vn phm phi ng cnh
- Phng php phn tch c php LR l phng php
tng qut ca phng php shift-reduce khng quay
lui
- Lp vn phm c th dng phng php LR l mt
lp rng ln hn lp vn phm c th s dng
phng php d on
- C th xc nh li c php nhanh ngay trong khi
duyt dng nhp t tri sang phi
Nhc im ca LR:
- Xy dng LR parser kh phc tp
36
M hnh ca LR parser
LR parsing
program
OUTPUT
INPUT
STACK
s
o
...
X
m-1
s
m-1
X
m
s
m
$ a
n
.... a
i
.... a
1
goto action
Parsing table
37
STACK lu chui s
0
X
1
s
1
X
2
s
2
... X
m
s
m
trong s
m
nm trn nh STACK mt k hiu vn phm, s
i
l
mt trng thi tm tt thng tin cha trong STACK
bn di n
Parsing table bao gm 2 phn : Hm action v hm
goto
- action[s
m
, a
i
] c th c mt trong 4 gi tr :
1. shift s: y s, trong s l mt trng thi
2. reduce: Thu gn bng lut sinh A |
3. accept: Chp nhn
4. error: Bo li
- goto ly 2 tham s l mt trng thi v mt k hiu
vn phm, n sinh ra mt trng thi
38
Cu hnh (configuration) ca mt b phn tch c php
LR l mt cp thnh phn
(s
0
X
1
s
1
X
2
s
2
... X
m
s
m
, a
i
a
i+1
... a
n
$). Cu hnh biu din
right- sentential form X
1
X
2
... X
m
a
i
a
i+1
... a
n
S thay i cu hnh theo hm action nh sau:
- Nu action[s
m
, a
i
] = shift s, cu hnh chuyn thnh
(s
0
X
1
s
1
X
2
s
2
... X
m
s
m
a
i
s, a
i+1
... a
n
$), trong
s=action[s
m
, a
i
]
- Nu action[s
m
, a
i
] = reduce A|, cu hnh chuyn thnh
(s
0
X
1
s
1
X
2
s
2
... X
m-r
s
m-r
A
s, a
i
a
i+1
... a
n
$), trong s=goto[s
m-r
,
A], r=|||=|X
m-r+1
....X
m
|
- Nu action[s
m
, a
i
] = accept, qu trnh phn tch thnh cng
- Nu action[s
m
, a
i
] = error, gi th tc phc hi li
39
(1) E E + T State Action Goto
(2) E T id + * ( ) $ E T F
(3) T T * F 0 s
5
S
4
1 2 3
(4) T F 1 s
6
acc
(5) F (E) 2 r
2
s
7
r
2
r
2
(6) F id 3 r
4
r
4
r
4
r
4
4 s
5
s
4
8 2 3
ngha : 5 r
6
r
6
r
6
r
6
s
i
: shift s
i
6 s
5
s
4
9 3
r
j
: reduce by production j 7 s
5
s
4
10
acc: accept 8 s
6
s
11
blank: error 9 r
1
s
7
r
1
r
1
10 r
3
r
3
r
3
r
3
11 r
5
r
5
r
5
r
5
V d 3.9: Xt vn phm cho cc php ton s hc +
v *
40
STACK INPUT ACTION
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
0
0 id 5
0 F 3
0 T 2
0 T 2 * 7
0 T 2 * 7 id 5
0 T 2 * 7 F 10
0 T 2
0 E 1
0 E 1 + 6
0 E 1 + 6 id 5
0 E 1 + 6 F 3
0 E 1 + 6 T 9
0 E 1
id * id + id $
* id + id $
* id + id $
* id + id $
id + id $
+ id $
+ id $
+ id $
+ id $
id $
$
$
$
$
shift
reduce by F id
reduce by T F
shift
shift
reduce by F id
reduce by T T * F
reduce by E T
shift
shift
reduce by F id
reduce by T F
reduce by E E + T
accept
Vi chui nhp id*id+id qu trnh phn tch nh sau:
41
Xy dng SLR parsing table
C 3 phng php xy dng mt bng phn tch c
php LR t vn phm l Simple LR (SLR), Canonical
LR v Lookahead- LR (LALR), cc phng php
khc nhau v tnh hiu qu cng nh tnh d ci t
Phng php SLR, l phng php yu nht nu tnh
theo s lng vn phm c th xy dng thnh cng,
nhng y li l phng php d ci t nht
Mt vn phm c th xy dng c SLR parser
c gi l mt vn phm SLR
42
Mt mc LR(0) (hoc item) ca mt vn phm G l
mt lut sinh ca G vi mt du chm ti v tr no
trong v phi
V d 3.10: Lut sinh A XYZ c 4 mc nh sau:
A .XYZ
A X.YZ
A XY.Z
A XYZ.
Lut sinh A c ch to ra mt mc A .
43
Vn phm tng cng (Augmented Grammar): G l mt
vn phm vi k hiu bt u S, thm mt k hiu bt
u mi S' v lut sinh S' S c vn phm mi G'
gi l vn phm tng cng
Php ton bao ng (Closure): Gi s I l mt tp cc
mc ca vn phm G th bao ng closure(I) l tp cc
mc c xy dng t I nh sau:
1. Tt c cc mc ca I c thm vo closure(I).
2. Nu A o.B|e closure(I) v B l mt lut sinh th thm B
. vo closure(I) nu n cha c trong . Lp li bc ny cho
n khi khng th thm vo closure(I) c na
44
V d 3.11: Xt vn phm tng cng
E' E
E E + T | T
T T * F | F
F (E) | id
Nu I= {E' E} th closure(I) bao gm cc mc sau:
E' E
E E + T
E T
T T * F
T F
F (E)
F id
45
Php ton goto: Nu I l mt tp cc mc v X l
mt k hiu vn phm th goto(I, X) l bao ng ca
tp hp cc mc A oX.| sao cho A o.X|e I
Cch tnh goto(I, X):
1. To mt tp I' = C
2. Nu A o.X|e I th a A oX.| vo I', tip tc qu
trnh ny cho n khi xt ht tp I.
3. goto(I, X) = closure(I')
46
V d 3.12: Gi s I = {E' E., E E . + T}
Ta c I' = { E E + . T}
goto (I, +) = closure(I') bao gm cc mc :
E E + . T
T . T * F
T . F
F . (E)
F . id
47
Gii thut xy dng h tp hp cc mc LR(0) (k hiu
l C) ca vn phm G'
procedure Item (G')
begin
C := {closure({ S' .S}) };
repeat
For Vi mi tp cc mc I eC v mi k hiu
vn phm X sao cho goto (I, X)=u v
goto(I, X)e C th thm goto(I, X) vo C;
until Khng cn tp hp mc no c th thm vo C;
end;
48
V d 3.13: Xy dng h tp hp cc mc trong v d
3.11
closure({E' E}) I
0
:
goto (I
0
, E) I
1
:
goto (I
0
, T) I
2
:
goto (I
0
,F) I
3
:
goto (I
0
, ( ) I
4
:
E' E
E E + T
E T
T T * F
T F
F (E)
F id
E' E
E E + T
E T
T T * F
T F
F ( E)
E E + T
E T
T T * F
T F
F (E)
F id
goto (I
0
, id) I
5
:
goto (I
1
, +) I
6
:
goto (I
2
, *) I
7
:
goto (I
4
, E) I
8
:
goto (I
6
,T) I
9
:
goto (I
7
,F) I
10
:
goto (I
8
,) ) I
11
:
F id
E E + T
T T * F
T F
F (E)
F id
T T* F
F (E)
F id
F (E )
E E + T
E E + T
T T * F
T T * F
F (E)
49
Xy dng SLR parsing table
1. Xy dng h tp hp cc mc ca G': C = { I
0
, I
1
, ..., I
n
}
2. Trng thi i c xy dng t I
i
.Cc action tng ng trng thi i
xc nh nh sau:
a) Nu A o.a|eI
i
v goto (I
i
, a) = I
j
th action[i, a] = "shift j",
a l k hiu kt thc
b) Nu A o. eI
i
th action[i, a] = "reduce (A o)", vi mi a
eFOLLOW(A), A = S'
c) Nu S' S eI
i
th action[i, $] = "accept".
Nu mt action ng c sinh ra bi cc lut trn, ta ni vn
phm khng phi l SLR(1). Gii thut tht bi
3. Nu goto (I
i
,A)=I
j
th goto [i, A] = j, A l k hiu cha kt thc
4. Cc khng xc nh c bi 2 v 3 u l error
5. Trng thi khi u ca b phn tch c php c xy dng t tp
cc mc cha S S
50
Xy dng bng phn tch LR chnh tc
LR chnh tc (canonical LR) l k thut chung nht
xy dng LR parsing table cho mt vn phm
Mt mc LR(1) (item) l mt cp [A o.|, a] trong
A o| l mt lut sinh, a- l k t lookahead l
mt k hiu kt thc hoc $
Nu |=c th a khng c ngha nhng nu |=c th
vic reduce theo lut A o ch c thc hin nu
k t c vo tip theo l a
51
Php ton bao ng (Closure): Gi s I l mt tp cc
mc LR(1) ca vn phm G th bao ng closure(I) l
tp cc mc c xy dng t I nh sau:
1. Tt c cc mc ca I c thm vo closure(I).
2. Nu [A o.B|, a]e closure(I), B l mt lut sinh v b e
FIRST(|a) th thm [B ., b] vo closure(I) nu n cha c
trong . Lp li bc ny cho n khi khng th thm vo
closure(I) c na
Php ton goto: Nu I l mt tp cc mc v X l mt
k hiu vn phm th goto(I, X) l bao ng ca tp
hp cc mc [A oX.|, a] sao cho [A o.X|,
a]e I
52
Gii thut xy dng h tp hp cc mc LR(1) (k hiu
l C) ca vn phm G'
procedure Item (G')
begin
C := {closure({[ S' .S, $]})};
repeat
For Vi mi tp cc mc I eC v mi k hiu
vn phm X sao cho goto (I, X)=u v
goto(I, X)e C th thm goto(I, X) vo C;
until Khng cn tp hp mc no c th thm vo C;
end;
53
closure({S' S}) I
0
:
goto (I
0
, S) I
1
:
goto (I
0
, C) I
2
:
goto (I
0
, c) I
3
:
S' S, $
S CC, $
C cC, c/d
C d, c/d
S' S , $
S C C, $
C cC, $
C d, $
C c C, c/d
C cC, c/d
C d, c/d
goto (I
0
, d ) I
4
:
goto (I
2
, C) I
5
:
goto (I
2
, c) I
6
:
goto (I
2
, d) I
7
:
goto (I
3
, C) I
8
:
goto (I
6
,C) I
9
:
C d , c/d
S CC , $
C c C, $
C cC, $
C d, $
C d , $
C cC , c/d
C cC , $
V d 3.14: Xy dng h tp hp cc mc LR(1) cho
vn phm di y
S' S
(1) S CC
(2) C cC
(3) C d
54
Xy dng canonical LR parsing table
1. Xy dng h tp hp cc mc LR(1) ca G': C = {I
0
, I
1
,.., I
n
}
2. Trng thi i c xy dng t I
i
.Cc action tng ng trng thi i
xc nh nh sau:
a) Nu [A o.a|, b]eI
i
v goto (I
i
, a) = I
j
th action[i, a] = "shift j",
a l k hiu kt thc
b) Nu [A o., a] eI
i
th action[i, a] = "reduce (A o.)", A=S'
c) Nu [S' S , $] eI
i
th action[i, $] = "accept".
Nu mt action ng c sinh ra bi cc lut trn, ta ni vn
phm khng phi l LR(1). Gii thut tht bi
3. Nu goto (I
i
,A)=I
j
th goto [i, A] = j, A l k hiu cha kt thc
4. Cc khng xc nh c bi 2 v 3 u l error
5. Trng thi khi u ca b phn tch c php c xy dng t tp
cc mc cha [S S, $]
55
State Action Goto
c d $ S C
0 s3 s4 1 2
1 acc
2 s6 s7 5
3 s3 s4 8
4 r3 r3
5 r1
6 s6 s7 9
7 r3
8 r2 r2
9 r2
Canonical LR parsing table cho vn phm trong
v d 3.14
56
LALR l phng php canonical parsing trong cc
trng thi c nhm li vi nhau nh bng phn tich
cu trc c kch thc nh hn (c th so snh vi SLR)
Ht nhn (core) ca mt tp hp mc LR(1) c dng {[A
o.|, a]}, trong A o| l mt lut sinh v a l k
hiu kt thc c ht nhn (core) l tp hp {A o.|}.
Trong h tp hp cc mc LR(1) C = {I
0
, I
1
,..., I
n
} c th
c cc tp hp cc mc c chung mt ht nhn.
Xy dng bng phn tch LALR
57
Xy dng LALR parsing table
1. Xy dng h tp hp cc mc LR(1) ca G': C = {I
0
, I
1
,.., I
n
}
2. Nhm cc mc c cng core trong C c C' = {J
0
, J
1
,.., J
m
}
3. Trng thi i c xy dng t J
i
.Cc action tng ng trng thi i
xc nh tng t nh canonical LR
Nu mt action ng c sinh ra bi cc lut trn, ta ni vn
phm khng phi l LALR(1). Gii thut tht bi
3. Xy dng bng goto : Gi s J = I
1
I
2
. I
k
. V I
1
, I
2
, ... I
k
c
chung ht nhn nn goto (I
1
,X), goto (I
2
,X), ..., goto (I
k
,X) cng c
chung ht nhn.
t K bng hp tt c cc tp hp c chung ht nhn vi goto
(I1,X) khi goto(J, X) =K.
58
State Action Goto
c d $ S C
0 s36 s47 1 2
1 acc
2 s36 s47 5
36 s36 s47 89
47 r3 r3 r3
5 r1
89 r2 r2 r2
LALR parsing table cho vn phm trong v d 3.14
59
Cng c phn tch c php Yacc
Ging nh Lex, Yacc (yet another compiler compiler)
l cu lnh sn c ca UNIX v l mt cng c hu
hiu cho php xy dng b phn tch c php mt
cch t ng
Yacc c to bi S. C. Johnson vo nhng nm u
ca thp k 70
Yacc s dng phng php LALR
60
Yacc
specification
translate.y
Yacc
compiler
y.tab.c
y.tab.c
C
compiler
a.out
input a.out output