Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 60

1

CHNG III. Phn tch c php


Mc tiu:
-Nm c vai tr ca giai on phn tch c php
- Vn phm phi ng cnh (context- free grammar),cch phn
tch c php t di ln- t trn xung (top-down and
bottom-up parsing)
-B phn tch c php LR
2
Vai tr ca b phn tch c php
y l giai on th 2 ca qu trnh bin dch
Nhim v chnh: Nhn chui cc token t b phn tch t
vng v xc nh chui c c sinh ra bi vn phm
ca ngn ng ngun khng
Source
program
Lexical
analyzer
Get next
token
Token
Parser

Symbol
table
Parse
tree
Rest of
front end
3
Cc phng php phn tch c php (PTCP) chia lm
hai loi: Phn tch t trn xung (top- down parsing)
v phn tch t di ln (bottom- up parsing)
Trong qu trnh bin dch xut hin nhiu li trong
giai on PTCP do b phn tch c php phi pht
hin v thng bo li chnh xc cho ngi lp trnh
ng thi khng lm chm nhng chng trnh c
vit ng

4
Vn phm phi ng cnh
nh ngha cu trc ca ngn ng lp trnh ta dng
vn phm phi ng cnh (Context-free grammars) hay
gi tt l mt vn phm
Mt vn phm bao gm:
- Cc k hiu kt thc (terminals): Chnh l cc token
- Cc k hiu cha kt thc (nonterminals): L cc bin k hiu
tp cc xu k t
- Cc lut sinh (productions): Xc nh cch thc hnh thnh
cc xu t cc k hiu kt thc v cha kt thc
- Mt k t bt u (start symbol)

5
V d 3.1: Vn phm sau nh ngha cc biu thc s
hc n gin
E E A E | (E) | -E | id
A + | - | * | / | |
Trong E, A l cc k t cha kt thc (E cn l k
t bt u), cc k t cn li l cc k t kt thc
6
Dn xut (derivation): Ta ni oA| o| nu A
l mt lut sinh ( c l dn xut hoc suy ra)
Nu o
1
o
2
...... o
n
th ta ni rng o
1
dn xut
o
n
K hiu:
*
l dn xut >0 bc,
+
l dn xut >1
bc
Cho vn phm G vi k t bt u l S, L(G) l ngn
ng c sinh bi G. Mi xu trong L(G) ch cha
cc k hiu kt thc ca G


7
Ta ni mt xu weL(G) nu v ch nu S
+
w, w c
gi l mt cu (sentence) ca vn phm G
Mt ngn ng c sinh bi vn phm phi ng cnh c
gi l ngn ng phi ng cnh (context- free language)
Hai vn phm c gi l tng ng nu sinh ra cng
mt ngn ng
Nu S *

o (o c th cha k hiu cha kt thc) th ta
ni o l mt dng cu (sentence form) ca G. Mt cu l
mt dng cu khng cha k hiu cha kt thc
8
V d 3.2: Xu (id+id) l mt cu ca vn phm trong
v d 3.1 v
E -E -(E) -(E+E) -(id+E) (id+id)
Mt dn xut c gi l tri nht (leftmost) nu ti
mi bc k hiu cha kt thc ngoi cng bn tri
c thay th, k hiu
lm
. Nu S *
lm

o th o c
gi l dng cu tri
Tng t ta c dn xut phi nht (rightmost) hay cn
gi l dn xut chnh tc, k hiu
rm

9
Cy phn tch c php (parse tree) l dng biu din
hnh hc ca dn xut. V d parse tree cho biu thc
(id+id) l:


E
E
(
-
)
E
E
|
id
E
|
id
+
10
Tnh m h ca vn phm (ambiguity): Mt vn
phm sinh ra nhiu hn mt parse tree cho mt cu
c gi l vn phm m h. Ni cch khc mt vn
phm m h s sinh ra nhiu hn mt dn xut tri
nht hoc dn xut phi nht cho cng mt cu.
Loi b s m h ca vn phm: Ta xt v d vn
phm sau
Stmt if expr then stmt
| if expr then stmt else stmt
| other
11
Vn phm trn l m h v vi cng mt cu lnh "if E1
then if E2 then S1 else S2" s c hai parse tree:




12
loi b s m h ny ta a ra qui tc "Khp mi
else vi mt then cha khp gn nht trc ". Vi qui
tc ny, ta vit li vn phm trn nh sau :
Stmt matched_stmt | unmatched_stmt
matched_stmt if expr then matched_stmt else
matched_stmt
| other
unmatched_stmt if expr then Stmt
| if expr then matched_stmt else
unmatched_stmt
13
Loi b qui tri: Mt vn phm c gi l qui
tri (left recursion) nu tn ti mt dn xut c dng
A +

Ao (A l 1 k hiu cha kt thc, o l mt
xu).
Cc phng php phn tch t trn xung khng th
x l vn phm qui tri, do cn phi bin i
vn phm loi b cc qui tri
qui tri c hai loi :
Loi trc tip: C dng A +

Ao
Loi gin tip: Gy ra do dn xut ca hai hoc nhiu
bc
14
Vi qui tri trc tip: Ta nhm cc lut sinh
thnh
A Ao
1
| Ao
2
|..... | Ao
m
| |
1
| |
2
|.....| |
n
Thay lut sinh trn bi cc lut sinh sau:
A |
1
A' | |
2
A'

|..... | |
n
A'
A' o
1
A'

| o
2
A'

|..... | o
m
A'

| c
V d 3.3: Thay lut sinh A Ao

| | bi
A |A'
A' oA'

| c
15
Vi qui tri gin tip: Ta dng thut ton sau
1. Sp xp cc k hiu khng kt thc theo th t A1, A2, ..., An
2. for i:=1 to n do
begin
for j:=1 to i -1 do
begin
Thay lut sinh dng A
i
A
j
bi lut sinh
A
i
|
1
| |
2
|.....| |
k
trong
A
j
|
1
| |
2
|.....| |
k
l tt c cc lut sinh hin ti
end;
Loi b qui tri trc tip trong s cc lut sinh Ai
end;
16
To ra nhn t tri (left factoring) l mt php bin
i vn phm rt c ch c c mt vn phm
thun tin cho vic phn tch d on
tng c bn l khi khng r lut sinh no trong
hai lut sinh kh trin c th dng khai trin mt
k hiu cha kt thc A, chng ta c th vit li cc
A- lut sinh nhm "hon" li vic quyt nh cho n
khi thy yu t cho mt la chn ng.
17
V d 3.3: Ta c hai lut sinh
stmt if expr then stmt else stmt
| if expr then stmt
Sau khi c token if, ta khng th ngay lp tc quyt
nh s dng lut sinh no m rng stmt
Cch to nhn t tri: Gi s c lut sinh
A o

|
1
| o

|
2
|..... | o

|
n
| (o l tin t chung di
nht ca cc lut sinh, khng bt u bi o)
Lut sinh trn c bin i thnh:
A o

A'

|
A' |
1
| |
2
|..... | |
n
18
Phn tch c php t trn xung
Phn tch c php (PTCP) t trn xung c xem
nh mt c gng tm kim mt dn xut tri nht cho
chui nhp. N cng c th xem nh mt c gng xy
dng cy phn tch c php bt u t nt gc v pht
sinh dn xung l
PTCP t trn xung n gin hn PTCP t di ln
nhng b gii hn v mt hiu qu
C mt s k thut PTCP t trn xung nh: PTCP
qui li, PTCP on trc, PTCP on trc qui.
Ta s xt trng hp PTCP on trc qui
19
PTCP on trc khng qui (nonrecursive
predictive parsing) hot ng theo m hnh sau:

$
Z
Y
X
Predictive parsing
program
Parsing table
M
OUTPUT
INPUT
STACK
$ b + a
20
INPUT l b m cha chui cn phn tch, kt thc
bi k hiu $
STACK cha mt chui cc k hiu vn phm vi k
hiu $ nm y STACK. Khi u STACK cha k
hiu bt u S trn nh
Parsing table M l mt mng hai chiu dng M[A,a],
trong A l k hiu cha kt thc, a l k hiu kt
thc hoc $.
B phn tch c php c iu khin bi Predictive
parsing program
21
Predictive parsing program hot ng nh sau:
Chng trnh xt k hiu X trn nh Stack v k
hiu nhp hin hnh a
1. Nu X = a = $ th qu trnh PTCP kt thc thnh cng
2. Nu X = a = $, y X ra khi Stack v c k hiu nhp
tip theo.
3. Nu X l k hiu cha kt thc th chng trnh truy
xut n phn t M[X,a] trong Parsing table M:
- Nu M[X,a] l mt lut sinh c dng X UYV th y X
ra khi nh Stack v y V, Y, U vo Stack (vi U trn
nh Stack), ng thi b xut ra OUTPUT lut sinh X
UYV
- Nu M[X,a] = error, gi chng trnh phc hi li.

22
V d 3.4: Xt vn phm
E E+T | T
T T*F | F
F (E) | id
Loi b qui tri ta thu c
E TE'
E' +TE' | c
T FT'
T' *FT' | c
F (E) | id
Gi s xu input nhp vo l id+id*id
23
Parsing table M cho vn phm trn nh sau







Non-
terminal
Input symbol
id + * ( ) $
E E TE' E TE'

E' E' +TE' E' c E' c
T T FT'

T FT'
T' T' c T' *FT' T' c

T' c

F F id F (E)
24
STACK INPUT OUTPUT
$ E
$ E' T
$ E' T' F
$ E' T' id
$ E' T'
$ E'
$ E' T +
$ E' T
$ E' T' F
$ E' T' id
$ E' T'
$ E' T' F *
$ E' T' F
$ E' T' id
$ E' T'
$ E'
$
id + id * id $
id + id * id $
id + id * id $
id + id * id $
+ id * id $
+ id * id $
+ id * id $
id * id $
id * id $
id * id $
* id $
* id $
id $
id $
$
$
$

E T E'
T F T'
F id

T' c
E' + T E'

T F T'
F id

T' * F T'

F id

T' c
E' c
25
Hm FIRST v FOLLOW: L cc hm xc nh cc tp
hp cho php xy dng bng phn tch M v phc hi li
Nu o l mt xu th FIRST(o) l tp hp cc k hiu
kt thc m n bt u mt chui dn xut t o. Nu o
* c th c thuc FIRST(o)
Nu A l mt k hiu cha kt thc th FOLLOW(A) l
tp cc k hiu kt thc m n xut hin ngay bn phi A
trong mt dng cu . Nu S * oA th $ thuc
FOLLOW(A)
26
Qui tc tnh cc tp hp FOLLOW
1. t $ vo FOLLOW(S) (S l k hiu bt u)
2. Nu A oB| th mi phn t thuc FIRST(|) ngoi
tr c u thuc FOLLOW(B)
3. Nu A oB hoc A oB| v | * c th mi phn
t thuc FOLLOW(A) u thuc FOLLOW(B)

27
V d 3.5: Xt vn phm
E TE'
E' +TE' | c
T FT'
T' *FT' | c
F (E) | id
Khi :
FIRST(E) = FIRST(T) = FIRST(F) = { (, id }
FIRST(E') = {+, c }
FIRST(T') = {*, c }
FOLLOW(E) = FOLLOW(E') = { $, ) }
FOLLOW(T) = FOLLOW(T') = { +, ), $ }
FOLLOW(F) = {*,+, ), $ }

28
Thut gii xy dng Parsing table M ca vn
phm G:
1. Vi mi lut sinh A o ca vn phm, thc hin
bc 2 v 3
2. Vi mi k hiu kt thc a eFIRST(o), thm A o
vo M[A,a]
3. Nu ceFIRST(o) th a lut sinh A o vo
M[A,b] vi mi k hiu kt thc beFOLLOW(A).
Nu ceFIRST(o) v $eFOLLOW(A) th a lut
sinh A o vo M[A,$].
4. cn trng trong bng tng ng vi li (error).

29
Phn tch c php t di ln
Gii thiu mt kiu phn tch c php t di ln
tng qut gi l phn tch c php Shift Reduce
Mt phng php tng qut hn ca k thut Shift -
Reduce l phn tch c php LR (LR parsing) s c
tho lun
Shift Reduce parsing s c gng xy dng mt parse
tree cho mt xu nhp vo t nt l ln nt gc. Ni
cch khc ta "reducing" tng bc xu nhp vo n
khi thu c k hiu bt u ca vn phm


30
V d 3.6: Cho vn phm :
S a A B e
A A b c | b
B d
Cu abbcde c th thu gn v S theo cc bc sau:
a b b c d e
a A b c d e
a A d e
a A B e
S
o ngc li qu trnh trn ta thu c dn xut phi nht:
S
rm
aABe
rm
aAde
rm
aAbcde
rm
abbcde

31
Handles: Handle ca mt right-sentential form l
mt lut sinh A|, mt xu o sao cho =o|e v S

*
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

You might also like