21/1/2010
1
Bài 7
Phân tích cú pháp tin định
1
Phân tích tin định
Tư tưởng chính ca phân tích cú pháp trên xung :
Bt đầu t gc, phát trin xung các nút cp dưới
Chn mt sn xut và th xem có phù hp vi xâu vào
không
2
Có th quay lui
Có th tránh được quay lui?
Cho sn xut A →α| βb phân tích cú pháp cn chn
gia α β
Làm thế nào?
Cho ký hiu không kết thúc A và ký hiu xem trước t, sn
xut nào ca A chc chn sinh ra mt xâu bt đầu bi t?
Phân tích tin định
Nếu có hai sn xut: A→α⏐β , ta mong mun
có mt phương pháp rõ ràng để chn đúng sn
xut cn thiết
Định nghĩa:
3
Định
nghĩa:
Vi αlà mt xâu cha ký hiu kết thúc và không
kết thúc, x FIRST(α) nếu t αcó th suy dn ra
xγ(x cha 0 hoc 1 ký hiu)
Nếu FIRST(α) và FIRST(β) không cha ký
hiu chung ta biết phi chn A→α hay A→β
khi đã xem trước mt ký hiu
Phân tích tin định
Tính FIRST(X):
Nếu X là ký hiu kết thúc FIRST(X)={X}
NếuX
→ε
mtsnxut thì thêm
ε
vào
4
Nếu
X
→ε
mt
sn
xut
thì
thêm
ε
vào
FIRST(X)
Nếu X là ký hiu không kết thúc và
XY1Y2...Yn là mt sn xut,thêm
FIRST(Yi+1) vào FIRST(X) nếu FIRST(Yj)
cha ε
21/1/2010
2
Phân tích tin định
Điu gì xy ra nếu ta có sn xut để chn là
A→α vi α=εhoc α⇒*ε?
Có th m rn
nếu ta biết rn
có mt dn
5
câu mà ký hiu đang xét xu
t hin sau A
Định nghĩa:
Vi A là ký hiu không kết thúc,
xFOLLOW(A) nếu và ch nếu Scó th suy
dn ra αAxβ
Tính FOLLOW
FOLLOW(S) cha EOF
Vi các sn xut dng A→αBβ, mi ký hiu
trong FIRST(
β
)tr
ε
tham gia vào
6
trong
FIRST(
β
)
tr
ε
tham
gia
vào
FOLLOW(B)
Vi các sn xut dng A→αB hoc
A→αBβtrong đó FIRST(β) cha ε,
FOLLOW(B) cha mi ký hiu ca
FOLLOW(A)
Phân tích tin định
Vi các khái nim
FIRST
FOLLOW
Ta có th xây dng b phân tích cú pháp
không đòi hi quay lui
7
không
đòi
hi
quay
lui
Ch có th xây dng b phân tích cú pháp như
vy cho nhng văn phm đặc bit
Loi văn phm như vy bao gm văn phm mt
s ngôn ng lp trình đơn gin, chng hn
KPL,PL/0, PÁSCAL-S
Bng phân tích tin định
Dùng cho b sinh phân tích cú pháp
Căn c
hiuđang xét
8
hiu
đang
xét
Ký hiu đang đỉnh stack
Quyết định
Thay thế ký hiu không kết thúc
Chuyn con tr sang ký hiu tiếp
Chp nhn xâu
21/1/2010
3
Ví d
Văn phm:
ETE'
E'+TE'|ε
TFT'
T'*FT'|ε
F(E)
F
id
9
F
id
FIRST(E) = FIRST(T) = FIRST(F) = {(, id}
FIRST(E') = {+, ε}
FIRST(T') = {*, ε}
FOLLOW(E) = FOLLOW(E') = {$, )}
FOLLOW(T) = FOLLOW(T') = {+, $, )}
FOLLOW(F) = {*, +, $, )}
Văn phm này có thxây dng bphân tích tin đnh
Bng phân tích
E
E'
T
+
E'+TE'
*(
ETE'
T
FT
'
)
E'→ε
id
ETE'
T
FT
'
$
E'→ε
1 0
T
T'
F
+
*
(
)
id
$
T'→ε
Đẩy
T'*FT'
Đẩy
T
FT
F(E)
Đẩy
T'→ε
Đẩy
T
FT
Fid
Đy
T'→ε
Nhn
Phân tích xâu vào id*id
s dng bng phân tích và stack
Bước Stack Xâu vào Hành đng kếtiếp
1$E id*id$ ETE'
2
$
E'T id*id
$
T
FT'
1 1
$
$
3$E'T'F id*id$ Fid
4$E'T'id id*id$ đy id
5$E'T' *id$ T'*FT'
6$T'F**id$đy *
7$T'F id$ Fid
8$T'id id$ đy id
9 $T' $T'→ε
10 $$nhn