You are on page 1of 51

CHNG IV PHN TCH C PHP

Ni dung chnh: Mi ngn ng lp trnh u c cc quy tc din t cu trc c php ca cc chng trnh c nh dng ng. Cc cu trc c php ny c m t bi vn phm phi ng cnh. Phn u ca chng nhc li khi nim vn phm phi ng cnh, cch tm mt vn phm tng ng khng cn quy tri v m h. Phn ln ni dung ca chng trnh by cc phng php phn tch c php thng c s dng trong cc trnh bin dch: Phn tch c php t trn xung (Top down) v Phn tch c php t di ln (Bottom up). Cc chng trnh ngun c th cha cc li c php. Trong qu trnh phn tch c php chng trnh ngun, s rt bt tin nu chng trnh dng v thng bo li khi gp li u tin. V th cn phi c k thut vt qua cc li c php tip tc qu trnh dch - Cc k thut phc hi li. T vn phm c t ngn ng lp trnh v la chn phng php phn tch c php ph hp, sinh vin c th t mnh xy dng mt b phn tch c php. Phn cn li ca chng gii thiu cng c Yacc. Sinh vin c th s dng cng c ny to b phn tch c php thay v phi t ci t. M t chi tit v Yacc c tm thy phn ph lc B. Mc tiu cn t: Sau khi hc xong chng ny, sinh vin phi nm c: Cc phng php phn tch c php v cc chin lc phc hi li. Cch t ci t mt b phn tch c php t mt vn phm phi ng cnh xc nh. Cch s dng cng c Yacc sinh ra b phn tch c php. Kin thc c bn: Sinh vin phi c cc kin thc v: Vn phm phi ng cnh (Context Free Grammar CFG), Automat y xung (Pushdown Automata PDA). Cch bin i t mt CFG v mt PDA. Ti liu tham kho: [1] Automata and Formal Language. An Introduction Dean Kelley Prentice Hall, Englewood Cliffs, New Jersey 07632. [2] Compilers : Principles, Technique and Tools - Alfred V.Aho, Jeffrey D.Ullman - Addison - Wesley Publishing Company, 1986. [3] Compiler Design Reinhard Wilhelm, Dieter Maurer - Addison - Wesley Publishing Company, 1996. [4] Design of Compilers : Techniques of Programming Language Translation - Karen A. Lemone - CRC Press, Inc, 1992. [5] Modern Compiler Implementation in C - Andrew W. Appel - Cambridge University Press, 1997. 65

I. VAI TR CA B PHN TCH C PHP 1. Vai tr ca b phn tch c php B phn tch c php nhn chui cc token t b phn tch t vng v xc nhn rng chui ny c th c sinh ra t vn phm ca ngn ng ngun bng cch to ra cy phn tch c php cho chui. B phn tch c php cng c c ch ghi nhn cc li c php theo mt phng thc linh hot v c kh nng phc hi c cc li thng gp c th tip tc x l phn cn li ca chui nhp. Chng trnh ngun B phn tch t vng B phn tch c Ly token php tip token Biu din Cy Phn phn tch cn li trung gian c php ca front end

Bng k hiu Hnh 4.1 - V tr ca b phn tch c php trong m hnh trnh bin dch 2. X l li c php Chng trnh ngun c th cha cc li nhiu mc khc nhau: - Li t vng nh danh biu, t kha, ton t vit khng ng. - Li c php nh ghi mt biu thc ton hc vi cc du ngoc ng v m khng cn bng. - Li ng ngha nh mt ton t p dng vo mt ton hng khng tng thch. - Li logic nh thc hin mt li gi qui khng th kt thc. Phn ln vic pht hin v phc hi li trong mt trnh bin dch tp trung vo giai an phn tch c php. V th, b x l li (error handler) trong qu trnh phn tch c php phi t mc ch sau: Ghi nhn v thng bo li mt cch r rng v chnh xc. Phc hi li mt cch nhanh chng c th xc nh cc li tip theo. Khng lm chm tin trnh ca mt chng trnh ng. 3. Cc chin lc phc hi li Phc hi li l k thut vt qua cc li tip tc qu trnh dch. Nhiu chin lc phc hi li c th dng trong b phn tch c php. Mc d khng c chin lc no c chp nhn hon ton, nhng mt s trong chng c p dng rng ri. y, chng ta gii thiu mt s chin lc : a. Phng thc "hong s" (panic mode recovery): y l phng php n gin nht cho ci t v c th dng cho hu ht cc phng php phn tch. Khi mt 66

li c pht hin th b phn tch c php b qua tng k hiu mt cho n khi tm thy mt tp hp c ch nh ca cc token ng b (synchronizing tokens), cc token ng b thng l du chm phy (;) hoc end. b. Chin lc mc ng on (phrase_level recovery): Khi pht hin mt li, b phn tch c php c th thc hin s hiu chnh cc b trn phn cn li ca dng nhp. C th l thay th phn u cn li bng mt chui k t c th tip tc. Chng hn, du phy (,) bi du chm phy (;), xa mt du phy l hoc thm vo mt du chm phy. c. Chin lc dng cc lut sinh sa li (error production): Thm vo vn phm ca ngn ng nhng lut sinh li v s dng vn phm ny xy dng b phn tch c php, chng ta c th sinh ra b on li thch hp ch ra cu trc li c nhn bit trong dng nhp. d. Chin lc hiu chnh ton cc (global correction): Mt cch l tng l trnh bin dch to ra mt s thay i trong khi x l mt li. C nhng gii thut la chn mt s ti thiu cc thay i t c mt hiu chnh c chi ph ton cc nh nht. Cho mt chui nhp c li x v mt vn phm G, cc gii thut ny s tm c mt cy phn tch c php cho chui y m s lng cc thao tc chn, xa v thay i token cn thit chuyn x thnh y l nh nht. Ni chung, hin nay k thut ny vn cn dng nghin cu l thuyt. II. BIN I VN PHM PHI NG CNH Nhiu ngn ng lp trnh c cu trc quy m n c th c nh ngha bng cc vn phm phi ng cnh (context-free grammar) G vi 4 thnh phn G (V, T, P, S), trong : V : l tp hu hn cc k hiu cha kt thc hay cc bin (variables) T : l tp hu hn cc k hiu kt thc (terminals). P : l tp lut sinh ca vn phm (productions). S V: l k hiu bt u ca vn phm (start symbol). V d 4.1: Vn phm vi cc lut sinh sau cho php nh ngha cc biu thc s hc n gin (vi E l mt biu thc expression) : E E A E (E) - E id A +-*/ 1. Cy phn tch c php v dn xut Cy phn tch c php c th c xem nh mt dng biu din hnh nh ca mt dn xut. Ta ni rng A dn xut ra (k hiu: A ) nu A l mt lut sinh, v l cc chui ty cc k hiu vn phm. Nu 1 2 .. .. n ta ni 1 dn xut ra (suy ra) n K hiu : dn xut ra qua 1 bc * : dn xut ra qua 0 hoc nhiu bc. 67

+ : dn xut ra qua 1 hoc nhiu bc. Ta c tnh cht: 1. * vi 2. * v * th * Cho mt vn phm G vi k hiu bt u S. Ta dng quan h + nh ngha L(G) mt ngn ng c sinh ra bi G. Chui trong L(G) c th ch cha mt k hiu kt thc ca G. Chui cc k hiu kt thc w thuc L(G) nu v ch nu S + w, chui w c gi l mt cu ca G. Mt ngn ng c sinh ra bi mt vn phm gi l ngn ng phi ng cnh. Nu hai vn phm cng sinh ra cng mt ngn ng th chng c gi l hai vn phm tng ng. Nu S * , trong c th cha mt k hiu cha kt thc th ta ni rng l mt dng cu (sentential form) ca G. Mt cu l mt dng cu c cha ton cc k hiu kt thc. Mt cy phn tch c php c th xem nh mt biu din th cho mt dn xut. hiu c b phn tch c php lm vic ta cn xt dn xut trong ch c k hiu cha kt thc tri nht trong bt k dng cu no c thay th ti mi bc, dn xut nh vy c gi l tri nht. Nu trong k hiu cha kt thc tri nht trong c thay th, ta vit * lm Nu S * lm ta ni l dng cu tri ca vn phm. Tng t, ta c dn xut phi nht - cn gi l dn xut chnh tc (canonical derivations) V d 4.2: Cy phn tch c php cho chui nhp : - (id + id) sinh t vn phm trong v d 4.1 E
( E E E + ) E

id

id

Hnh 4.2 - Minh ha mt cy phn tch c php thy mi quan h gia cy phn tch c php v dn xut, ta xt mt dn xut : 1 2 .. .. n trong i l mt k hiu cha kt thc A. Vi mi i ta xy dng mt cy phn tch c php. V d vi dn xut: E -E - (E) - (E + E) - (id + E) - (id + id) Ta c qu trnh xy dng cy phn tch c php nh sau :

68

E
-

E E

_ (

E E E )

E E E + ) E

E E E E ( E id E + ) E

_ ( E id

E E + ) E id

Hnh 4.3 - Xy dng cy phn tch c php t dn xut 2. Loi b s m h Mt vn phm to ra nhiu hn mt cy phn tch c php cho cng mt chui nhp c gi l vn phm m h. Nu mt vn phm l m h, ta khng th xc nh c cy phn tch c php no s c chn. V th, ta phi vit li mt vn phm nhm trnh s m h ca n. Mt v d, chng ta s loi b s m h trong vn phm sau : Stmt if expr then stmt if expr then stmt else stmt other y l mt vn phm m h v cu nhp if E1 then if E2 then S1 else S2 s c hai cy phn tch c php :
Stmt if expr E1 then Stmt expr E2 then Stmt S1 elsem Stmt S2

if

69

Stmt if expr E1 then if Stmt expr E2 elsem Stmt Stmt S1 S2

then

Hnh 4.4 - Hai cy phn tch c php cho mt cu nhp trnh s m h ny ta a ra nguyn 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 matched_stmt | unmatched_stmt if expr then matched_stmt else matched_stmt other unmatched_stmt if expr then Stmt if expr then matched_stmt else unmatched_stmt Vn phm tng ng ny sinh ra tp chui ging nh vn phm m h trn, nhng n ch c mt cch dn xut ra cy phn tch c php cho tng chui nhp. 3. Loi b qui tri Mt vn phm l qui tri (left recursive) nu n c mt k hiu cha kt thc A sao cho c mt dn xut A + A, vi l mt chui no . Cc phng php phn tch t trn xung khng th no x l vn phm qui tri, do cn phi dng mt c ch bin i tng ng loi b cc qui tri. qui tri c hai loi : Loi trc tip: Dng A A Loi gin tip: A i A vi i 2 Xt vn phm nh sau: S Aa | b A Ac | Sd | Bin S cng l bin qui tri v S Aa Sda, nhng y khng phi l qui tri trc tip. . Vi qui tri trc tip: Lut sinh c dng: A A1 | A2 | ... | Am | 1 | 2 | ... | n S thay th bi : A 1A | 2A | ... | nA A' 1A'| 2A' | ... | m A' | . Vi qui tri gin tip (v ni chung l qui tri, ta s dng gii thut sau) 70

Gii thut 4.1: Loi b qui tri Input: Vn phm khng tun hon v khng c cc lut sinh (ngha l vn phm khng cha cc dng A +A v A ) Output: Vn phm tng ng khng qui tri Phng php: 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 Ai Aj bi lut sinh Ai 1 | 2 | ... | k trong Aj 1 | 2 | ... | k l tt c cc Ai lut sinh hin ti; end; Loi b qui tri trc tip trong s cc Ai lut sinh; End; V d 4.3: p dng thut ton trn cho vn phm v d trn. V l thuyt, thut ton 4.1 khng bo m s hot ng c trong trng hp vn phm c cha cc lut sinh , nhng trong trng hp ny lut sinh A r rng l "v hi". 1. Sp xp cc k hiu cha kt thc theo th t S, A. 2. Vi i = 1, khng c qui tri trc tip nn khng c iu g xy ra. Vi i = 2, thay cc S - lut sinh vo A Sd c: A Ac | Aad | bd | Loi b qui tri trc tip cho cc A lut sinh, ta c : S Aa | b A bdA' A' cA' | adA | 4. To ra yu t tri To ra yu 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 nguyn liu cho mt la chn ng. Xt vn phm cho cu lnh if: stmt if expr then stmt else stmt | if expr then stmt

71

Khi gp token if, chng ta khng th quyt nh ngay cn chn lut sinh no trin khai cho stmt. gii quyt vn ny, mt cch tng qut, khi c lut sinh dng A 1 | 2, ta bin i lut sinh thnh dng : A A' A' 1 | 2 Gii thut 4.2 : To yu t tri cho vn phm Input: Vn phm G Output: Vn phm tng ng vi yu t tri. Phng php: Vi mi k hiu cha kt thc A, c cc k hiu dn u cc v phi ging nhau, ta tm mt chui l chui c di ln nht chung cho tt c cc v phi ( l yu t tri). Gi s A 1 | 2 | ... | n | , trong khng c chui dn u chung vi cc v phi khc. Ta bin i lut sinh thnh : A A' | A' 1 | 2 | ... | n Vi A' l k hiu cha kt thc mi. p dng lp i lp li php bin i ny cho n khi khng cn hai kh trin no cho mt k hiu cha kt thc c mt tin t chung. V d 4.4: p dng thut ton 4.2 cho vn phm sau: S i E t S | i E t S eS | Eb Ta c vn phm tng ng c cha yu t tri nh sau : S i E t S S' | S' eS | E b III. PHN TCH C PHP T TRN XUNG Trong mc ny, chng ta gii thiu cc nim c bn v phng php phn tch c php t trn xung (Top Down Parsing) v trnh by mt dng khng quay lui hiu qu ca phng php phn tch t trn xung, gi l phng php phn tch d on (predictive parser). Chng ta nh ngha mt lp vn phm LL(1) (vit tt ca Left-to-right parse, Leftmost-derivation, 1-symbol lockahead ), trong phn tch d on c th xy dng mt cch t ng. 1. Phn tch c php qui li (Recursive Descent Parsing) Phn tch c php t trn xung c th c xem nh mt n lc tm kim mt dn xut tri nht cho chui nhp. N cng c th xem nh mt n lc xy dng cy phn tch c php bt u t nt gc v pht sinh dn xung l. Mt dng tng qut ca k thut phn tch t trn xung, gi l phn tch c php quy li, c th quay lui 72

qut li chui nhp. Tuy nhin, dng ny thng rt t gp. L do l vi cc kt cu ngn ng lp trnh, chng ta him khi dng n n. 2. B phn tch c php d on (Predictive Parser) Trong nhiu trng hp, bng cch vit vn phm mt cch cn thn, loi b qui tri ra khi vn phm ri to ra yu t tri, chng ta c th thu c mt vn phm m mt b phn tch c php quy li phn tch c, nhng khng cn quay lui, gi l phn tch c php d on. Xy dng s dch cho b phn tch d on: xy dng s dch cho phng php phn tch xung, trc ht loi b qui tri, to yu t tri cho vn phm. Sau thc hin cc bc sau cho mi k hiu cha kt thc A : 1. To mt trng thi khi u v mt trng thi kt thc. 2. Vi mi lut sinh A X1X2 ... Xn , to mt ng i t trng thi khi u n trng thi kt thc bng cc cnh c nhn X1X2 ... Xn Mt cch c th, s dch c v theo cc nguyn tc sau: 1. Mi k hiu cha kt thc tng ng vi mt s dch trong nhn cho cc cnh l token hoc k hiu cha kt thc. 2. Mi token tng ng vi vic on nhn token v c token k tip
x

3. Mi k hiu cha kt thc tng ng vi li gi th tc cho k hiu .


A

4. Mi lut sinh c dng A 1 | 2 | ... | n tng ng vi s dch 1 2 n 5. Mi lut sinh dng A 1 2.. .. n tng ng vi s dch 1 2 n

V d 4.5: Xt vn phm sinh biu thc ton hc EE+T|T TT*F|F 73

F (E) | id Loi b quy tri trong vn phm, ta c vn phm tng ng sau : E TE E + TE | T FT T * FT | F (E) | id Mt chng trnh phn tch c php d on c thit k da trn s dch cho cc k hiu cha kt thc trong vn phm. N s c gng so snh cc k hiu kt thc vi chui nguyn liu v a ra li gi qui mi khi n phi i theo mt cnh c nhn l k hiu cha kt thc. Cc s dch tng ng :
E 0 T 1 E 2 T E T 9 10 3 + 4 T * 11 F F 14 ( 15 E id 16 ) 17 12 T 13 5 E 6

Hnh 4.5 - Cc s dch cho cc k hiu vn phm Cc s dch c th c n gin ha bng cch thay s ny vo s khc, nhng thay th ny tng t nh nhng php bin i trn vn phm.
T 3 + 4 T 0 T 3 T + + 4 6 5 6

E' :

E' : E:

E:

Tng t ta c: T:
7 * F 8

F:
13 14

15

16

17

Hnh 4.6 - Rt gn s dch Phn tch d on khng qui

74

Chng ta c th xy dng b phn tch d on khng qui bng cch duy tr tng minh mt Stack ch khng phi ngm nh qua cc li gi quy. Vn chnh trong qu trnh phn tch d on l vic xc nh lut sinh s c p dng cho mt bin bc tip theo. Mt b phn tch d on s lm vic theo m hnh sau:
a

INPUT

STACK X Y Z $ Bng phn tch M Chng trnh phn tch OUTPUT

Hnh 4.7 - M hnh b phn tch c php d on khng quy - 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. - Bng phn tch 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 chng trnh hot ng nh sau: Chng trnh xt k hiu X trn nh Stack v k hiu nhp hin hnh a. Hai k hiu ny xc nh hot ng ca b phn tch c php nh sau: 1. Nu X = a = $ th chng trnh phn tch c php kt thc thnh cng. 2. Nu X = a $, Pop 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 bng phn tch M: - Nu M[X,a] l mt lut sinh c dng X UVW th Pop X ra khi nh Stack v Push W, V, U vo Stack (vi U trn nh Stack), ng thi b xut sinh ra lut sinh X UVW. - Nu M[X,a] = error, gi chng trnh phc hi li. Gii thut 4.3 : Phn tch c php d on khng quy. Input: Chui nhp w v bng phn tch c php M cho vn phm G. Output: Nu w L (G), cho ra mt dn xut tri ca w. Ngc li, thng bo li. Phng php: Khi u Stack cha k hiu cha kt thc bt u (S) trn nh v b m cha cu nhp dng w$. t con tr ip tr ti k hiu u tin ca w$ ; Repeat Gi X l k hiu trn nh Stack v a l k hiu c tr bi ip ; 75

If X l k hiu kt thc hoc $ then If X = a then ly X ra khi Stack v dch chuyn ip else error ( ) Else // X l k hiu cha kt thc If M[X,a] = X Y1 Y2 .... Yk then begin Ly X ra khi Stack; y Yk ,Yk-1, ... ,Y1 end else error ( ) Until X=$ /* Stack rng */ vo Stack; Xut ra lut sinh X Y1 Y2 .... Yk;

V d 4.6: Xt vn phm c kh qui tri sinh biu thc ton hc trong v d 4.5 : E TE E + TE | T FT T * FT | F (E) | id Bng phn tch M ca vn phm c cho nh sau : ( trng tng ng vi li)
K hiu cha kt thc K hiu nhp

id E TE

( E TE

E E' T T' F

E +TE T FT T F id T *FT F (E) T FT

E T

E T

Hnh 4.8 - Bng phn tch c php M cho vn phm Qu trnh phn tch c php cho chui nhp: id + id * id c trnh by trong bng sau : STACK $E $ E' T INPUT id + id * id $ id + id * id $ E T E' 76 OUTPUT

$ 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 $ T F T' id + id * id $ F id + id * id $ + id * id $ T' + id * id $ E' + T E' id * id $ id * id $ T F T' id * id $ F id * id $ * id $ id $ id $ $ $ $


E

T' * F T' F id T' E'

Cy phn tch c php c hnh thnh t output :

T F T'

E'

+
F

T T'

E' T'

id

id

id Nhn xt: - Mi vn phm c mt bng phn tch M tng ng.

- Chng trnh khng cn thay i cho cc vn phm khc nhau. 3. Hm FIRST v FOLLOW FIRST v FOLLOW l cc tp hp cho php xy dng bng phn tch M v phc hi li theo chin lc panic_mode. nh ngha FIRST(): Gi s l mt chui cc k hiu vn phm, FIRST() l tp hp cc k hiu kt thc m n bt u mt chui dn xut t . 77

Nu * th FIRST(). Cch tnh FIRST(X): Thc hin cc quy lut sau cho n khi khng cn c k hiu kt thc no hoc c th thm vo tp FIRST(X) : 1. Nu X l k hiu kt thc th FIRST(X) l {X} 2. Nu X l mt lut sinh th thm vo FIRST(X). 3. Nu X Y1Y2Y3 ...Yk l mt lut sinh th thm tt c cc k hiu kt thc khc ca FIRST(Y1) vo FIRST(X). Nu FIRST(Y1) th tip tc thm vo FIRST(X) tt c cc k hiu kt thc khc ca FIRST(Y2). Nu FIRST(Y1) FIRST(Y2) th thm tt c cc k hiu kt thc khc FIRST(Y3) ... Cui cng thm vo FIRST(X) nu ki=1 FIRST(Yi) V d 4.7: Vi vn phm sau: E T E' E' + T E' | T F T' T' * F T' | F (E) | id Theo nh ngha tp FIRST, ta c : V T T V F (E) | id FIRST(F) = { (, id } T F T' v FIRST(F) FIRST(T) = FIRST(F) E T E' v FIRST(T) FIRST(E) = FIRST(T) E' FIRST(E')

Mt khc do E' + TE' m FIRST(+) = {+} FIRST(E') = {+, } Tng t FIRST(T') = {*, } Vy ta c : FIRST(E) = FIRST(T) = FIRST(F) = { (, id } FIRST(E') = {+, } FIRST(T') = {*, } nh ngha FOLLOW(A): (vi A l mt k hiu cha kt thc) l tp hp cc k hiu kt thc a m n xut hin ngay sau A (bn pha phi ca A) trong mt dng cu no . Tc l tp hp cc k hiu kt thc a, sao cho tn ti mt dn xut dng S * Aa. Ch rng nu A l k hiu phi nht trong mt dng cu no th $ FOLLOW(A) ($ l k hiu kt thc chui nhp ). Cch tnh FOLLOW(A): p dng cc quy tc sau cho n khi khng th thm g vo mi tp FOLLOW c na. 1. t $ vo follow(S), trong S l k hiu bt u ca vn phm v $ l k hiu kt thc chui nhp. 78

2. Nu c mt lut sinh A B th thm mi phn t khc ca FIRST()vo trong FOLLOW(B). 3. Nu c lut sinh A B hoc A B m FIRST() th thm tt c cc phn t trong FOLLOW(A) vo FOLLOW(B). V d 4.8: Vi vn phm trong v d 4.6 ni trn: p dng lut 2 cho lut sinh F (E) ) FOLLOW(E) FOLLOW(E) ={$, ) } p dng lut 3 cho E TE' ), $ FOLLOW(E') FOLLOW(E') ={$, ) } p dng lut 2 cho E TE' + FOLLOW(T). p dng lut 3 cho E' +TE' , E' FOLLOW(E') FOLLOW(T) FOLLOW(T) = { +, ), $ }. p dng lut 3 cho T FT' th FOLLOW(T') = FOLLOW(T) ={+, ), $ } p dng lut 2 cho T FT' * FOLLOW(F) p dng lut 3 cho T' * F T' , T' FOLLOW(T') FOLLOW(F) FOLLOW(F) = {*, +, ), $ }. Vy ta c: FOLLOW(E) = FOLLOW(E') = { $, ) } FOLLOW(T) = FOLLOW(T') = { +, ), $ } FOLLOW(F) = {*,+, ), $ } 4. Xy dng bng phn tch M Gii thut 4.4 : Xy dng bng phn tch c php d on Input: Vn phm G. Output: Bng phn tch c php M. Phng php: 1. Vi mi lut sinh A ca vn phm, thc hin hai bc 2 v 3. 2. Vi mi k hiu kt thc a FIRST(), thm A vo M[A,a]. 3. Nu FIRST() th a lut sinh A vo M[A,b] vi mi k hiu kt thc b FOLLOW(A). Nu FIRST() v $ FOLLOW(A) th a lut sinh A vo M[A,$]. 4. cn trng trong bng tng ng vi li (error). V d 4.9: p dng thut ton trn cho vn phm trong v d 4.6. Ta thy: Lut sinh E TE' : Tnh FIRST(TE') = FIRST(T) = {(,id} M[E,id] v M[E,( ] cha lut sinh E TE' Lut sinh E' + TE' : Tnh FIRST(+TE') = FIRST(+) = {+} M[E',+] cha E' +TE' 79

Lut sinh E' : V FIRST(E') v FOLLOW(E') = { ), $ } E nm trong M[E',)] v M[E',$] Lut sinh T' * FT' : FIRST(* FT') = {* } T' * FT' nm trong M[T',*] Lut sinh T' : V FIRST(T') v FOLLOW(T') = {+, ), $} T' nm trong M[T', +] , M[T', )] v M[T',$] Lut sinh F (E) ; FIRST((E)) = { ( } F ( E) nm trong M[F, (] Lut sinh F id ; FIRST(id) = {id} F id nm trong M[F, id] Bng phn tch c php M ca vn phm c xy dng nh trong hnh 4.8. 5. Vn phm LL(1) Gii thut 4.4 c th p dng cho bt k vn phm G no sinh ra bng phn tch M. Tuy nhin, c nhng vn phm ( quy tri hoc m h) th trong bng phn tch M s c th c nhng a tr (c ch nhiu hn 1 lut sinh). V d 4.10: Xt vn phm sau: S iE t S S' | a S' eS | Eb Bng phn tch c php M ca vn phm nh sau : K hiu cha kt thc S S' E Eb Hnh 4.9 - Bng phn tch c php M cho vn phm v d 4.10 y l mt vn phm m h v s m h ny c th hin qua vic chn lut sinh khi gp k hiu e (else). ti v tr M [S', e] c gi l a tr. Mt vn phm m bng phn tch M khng c cc` a tr c gi l vn phm LL(1) vi ngha nh sau : L: Left-to-right parse (m t hnh ng qut chui nhp t tri sang phi) L: Leftmost-derivation (biu th vic sinh ra mt dn xut tri cho chui nhp) 80 K hiu kt thc a S a S S eS
'

i S iEtSS'

S'

1: 1-symbol lookahead (ti mi mt bc, u c ch c trc c mt token thc hin cc quyt nh phn tch c php) Vn phm LL(1) c mt s tnh cht c bit. Khng c vn phm m h hay quy tri no c th l LL(1). Ngi ta chng minh rng mt vn phm G l LL(1) nu v ch nu mi khi A | l 2 lut sinh phn bit ca G, cc iu kin sau y s ng: 1. Khng c mt k hiu kt thc a no m c v u dn xut ra cc chui bt u bng a. 2. Ti a ch c hoc ch c c th dn xut ra chui rng. 3. Nu * th khng dn xut c chui no bt u bng mt k hiu kt thc thuc tp FOLLOW(A). R rng vn phm trong v d 4.5 cho cc biu thc s hc l LL(1), nhng vn phm trong v d 4.10 l vn phm m hnh ha cu lnh if - then - else khng phi l LL(1). Vn t ra by gi l lm th no gii quyt cc a tr? Mt phng n kh thi l bin i vn phm bng cch loi b mi quy tri, ri to yu t tri khi c th c vi mong mun s sinh ra mt vn phm vi bng phn tch c php khng cha a tr no. Nhng cng c mt s vn phm m khng c cch g bin i thnh vn phm LL(1). Ni chung, khng c quy tc tng qut no bin mt a tr thnh n tr m khng lm nh hng n ngn ng ang c nhn dng bi b phn tch c php. Kh khn chnh khi dng mt b phn tch c php d on l vic vit mt vn phm cho ngn ng ngun. Vic loi b quy tri v to yu t tri tuy d thc hin nhng chng bin i vn phm tr thnh kh c v kh dng cho cc mc ch bin dch. 6. Phc hi li trong phn tch d on Mt li s c tm thy trong qu trnh phn tch d on khi: 1. K hiu kt thc trn nh Stack khng ph hp vi token k tip trong dng nhp. Hoc : 2. Trn nh Stack l k hiu cha kt thc A, token trong dng nhp l a nhng M[A,a] rng. Phc hi li theo phng php panic_mode l b qua cc k hiu trong dng nhp cho n khi gp mt phn t trong tp hp cc token ng b (synchronizing token). Tnh hiu qu ca phng php ny ty thuc vo cch chn tp hp cc token ng b. Mt s heuristics c th l: 1. Ta c th a tt c cc k hiu trong FOLLOW(A) vo trong tp hp token ng b cho k hiu cha kt thc A. 2. FOLLOW(A) cng cha phi l mt tp hp cc token ng b cho A. V d, cc lnh ca C kt thc bi ; (du chm phy ). Nu mt lnh thiu du ; th t kha ca lnh k tip s b b qua. Thng thng ngn ng c cu trc 81

phn cp, v d biu thc nm trong mt lnh, lnh nm trong mt khi lnh, v.v. Chng ta c th thm vo tp hp ng b ca mt cu trc nhng k hiu m n bt u cho mt cu trc cao hn. V d, ta c th thm cc t kho bt u cho cc lnh vo tp ng b cho k hiu cha kt thc sinh ra biu thc. 3. Nu chng ta thm cc phn t ca FIRST(A) vo tp ng b cho k hiu cha kt thc A th qu trnh phn tch c th ha hp vi A nu mt k hiu trong FIRST(A) xut hin trong dng nhp. V d 4.11: S dng cc k hiu kt thc trong tp FOLLOW lm token ng b ha hot ng kh hu hiu khi phn tch c php cho cc biu thc trong vn phm v d 4.6. FOLLOW(E) = FOLLOW(E') = { $, )} FOLLOW(T) = FOLLOW(T') = { +,$, )} FOLLOW(F) = {*,+, $, )} Bng phn tch M cho vn phm ny c thm vo cc k hiu ng b "synch", ly t tp FOLLOW ca cc k hiu cha kt thc - xc nh cc token ng b : K hiu cha kt thc E E' T T' F F id T FT' K hiu kt thc id ETE' E' +TE' synch T' synch T' *FT' synch F (E) T FT' + * ( ETE' ) synch E' synch T' synch $ synch E' synch T' synch

Hnh 4.10 - Bng phn tch c php M phc hi li Bng ny c s dng nh sau: Nu M[A,a] l rng th b qua token a. Nu M[A,a] l "synch" th ly A ra khi Stack nhm ti hot dng qu trnh phn tch. Nu mt token trn nh Stack khng ph hp vi token trong dng nhp th ly token ra khi Stack. Chng hn, vi chui nhp : + id * + id, b phn tch c php v c ch phc hi li thc hin nh sau :
STACK INPUT OUTPUT

$E $E $ E' T

+ id * + id $ error, nhy qua + id * + id $ E T E' id * + id $ T F T' 82

$ E' T' F $ E' T' id $ E' T' $ E' T' F * $ E' T' F $ E' T' $ E' $ E' T + $ E' T $ E' T' F $ E' T' id $ E' T' $ E' $

id * + id $ F id id * + id $ * + id $ T' * F T' * + id $ + id $ error, M[F,+] = synch pop F + id $ T + id $ E' + T E' + id $ id $ T' F T' id $ F id id $ $ $ $ T' E'

IV. PHN TCH C PHP T DI LN Phn ny s gii thiu mt kiu phn tch c php t di ln tng qut gi l phn tch c php Shift -Reduce. Mt dng d ci t ca n gi l phn tch c php th bc ton t (Operator - Precedence parsing) cng s c trnh by v cui cng, mt phng php tng qut hn ca k thut Shift - Reduce l phn tch c php LR (LR parsing) s c tho lun. 1. B phn tch c php Shift - Reduce Phn tch c php Shift - Reduce c gng xy dng mt cy phn tch c php cho chui nhp bt u t nt l v i ln hng v nt gc. y c th xem l qu trnh thu gn (reduce) mt chui w thnh mt k hiu bt u ca vn phm. Ti mi bc thu gn, mt chui con c th i snh c vi v phi ca mt lut sinh no th chui con ny s c thay th bi k hiu v tri ca lut sinh . V nu chui con c chn ng ti mi bc, mt dn xut phi o ngc s c xy dng. V d 4.12: Cho vn phm: SaABe A A b c | b Bd Cu abbcde c th thu gn thnh S theo cc bc sau: abbcde aAbcde aAde 83

aABe S Thc cht y l mt dn xut phi nht o ngc nh sau : S rm aABe rm aAde rm aAbcde rm abbcde (Dn xut phi nht l chui cc thay th k hiu cha kt thc phi nht) 2. Handle Handle ca mt chui l mt chui con hp vi v phi ca lut sinh v nu chng ta thu gn n thnh v tri ca lut sinh th c th dn n k hiu cha kt thc bt u. V d 4.13: Xt vn phm sau: EE+E EE*E E (E) E id Chui dn xut phi : E rm E + E rm E + E * E rm E + E * id3 rm E + id2 * id3 rm id1 + id2 * id3 3. Ct ta handle (Handle Pruning) Handle pruning l k thut dng to ra dn xut phi nht o ngc t chui k hiu kt thc w m chng ta mun phn tch. Nu w l mt cu ca vn phm th w = n. Trong , n l dng cu phi th n ca dn xut phi nht m chng ta cha bit. S 0 rm 1 rm 2 .. .. rmn-1 rm n = w xy dng dn xut ny theo th t ngc li, chng ta tm handle n trong n v thay th n bi An (An l v tri ca lut sinh An n) c dng cu phi th n -1 l n-1. Quy lut trn c tip tc. Nu ta c mt dng cu phi 0 = S th s phn tch thnh cng. V d 4.14: Vi vn phm: E E + E | E * E | (E) | id V cu nhp: id1 + id2 * id3 , ta c cc bc thu gn cu nhp thnh k hiu bt u E nh sau : 84 (cc handle c gch di)

Dng cu phi id1 + id2 * id3 E + id2 * id3 E + E * id3 E+E*E E+E E id1 id2 id3 E*E E+E

Handle

Lut thu gn E id E id E id E E*E E E+E Thnh cng

4. Ci t b phn tch c php Shift - Reduce C hai vn cn phi gii quyt nu chng ta dng k thut phn tch c php ny. Th nht l nh v chui con cn thu gn trong dng cu dn phi, v th hai l xc nh lut sinh no s c dng nu c nhiu lut sinh cha chui con v phi. Cu to: Dng 1 Stack lu cc k hiu vn phm. Dng 1 b m nhp INPUT gi chui nhp cn phn tch w. Ta dng k hiu $ nh du y Stack v xc nh cui chui nhp. Hot ng: 1. Khi u th Stack rng v w nm trong b m input. 2. B phn tch y cc k hiu nhp vo trong Stack cho n khi mt handle nm trn nh Stack. 3. Thu gn thnh v tri ca mt lut sinh no . 4. Lp li bc 2 v 3 cho n khi gp mt li hoc Stack cha k hiu bt u v b m input rng (thng bo kt thc thnh cng). V d 4.15: Vi vn phm E E + E | E * E | (E) | id v cu nhp id1 + id2 * id3 Qu trnh phn tch c php s thc hin nh sau:
STACK INPUT ACTION

$ $ id1 $E $E+ $ E + id2 $E+E $E+E* $ E + E * id3

id1 + id2 * id3 $ y + id2 * id3 $ Thu gn bi E id + id2 * id3 $ y id2 * id3 $ y * id3 $ Thu gn bi E id * id3 $ y id3 $ y $ 85

$E+E*E $E+E $E

$ Thu gn bi E id $ Thu gn bi E E * E $ Thu gn bi E E + E Chp nhn

V. PHN TCH C PHP TH BC TON T Lp vn phm c tnh cht khng c lut sinh no c v phi l hoc c hai k hiu cha kt thc no nm k nhau c th d dng xy dng b phn tch c php Shift- Reduce hiu qu theo li th cng. Mt trong nhng k thut phn tch d ci t nht gi l phn tch c php th bc ton t. 1. Quan h th t u tin Bng nh ngha 3 quan h th bc c cho nh sau : Quan h a < b a = b a > b ngha a c u tin thp hn b a c u tin bng b a c u tin cao hn b

Hnh 4.11 - Cc quan h th bc ton t 2. S dng quan h th t u tin ca ton t Cc quan h u tin ny gip vic xc nh handle. Trc ht, ta da vo cc quy tc sau xy dng bng quan h u tin gia cc k hiu kt thc. 1. Nu ton t 1 c u tin cao hn 2 th 1 > 2 v 2 < 1; (E + E * E + E th handle l E * E). 2. Nu ton t 1 c u tin bng 2 th : . 1 > 2 v 2 > 1 nu cc ton t l kt hp tri. . 1 < 2 v 2 < 1 nu cc ton t l kt hp phi. V d 4.16: Ton t + v - c u tin bng nhau v kt hp tri nn: + > + ; + > - ; - > - ; Php ton kt hp phi nn < E - E + E handle l E - E E E E handle l E E (phn cui) V d 4.17: Vi chui nhp id + id * id 86 - > +

Ta c bng quan h th bc cc ton t nh sau :

id id + * $ < < <

+ > > > <

* > < > <

$ > > >

S dng $ nh du cui chui v $ < , . Ta c chui vi cc quan h th bc c chn vo l : $ < id > + < id > * < id > $ Chng hn, < c chn vo gia $ bn tri v id bi v < l mc hng $ v ct id. Handle c th tm thy thng qua qu trnh sau : 1. Duyt chui t tri sang phi cho n khi gp > u tin (trong v d ca chng ta l > sau id u tin). 2. Sau , duyt ngc li (hng sang tri), vt qua cc = (nu c) cho n khi gp a < (trong v d, chng ta qut ngc v n $). 3. Handle l chui cha mi k hiu bn tri > u tin v bn phi < c gp trong bc (2), cha lun c cc k hiu cha kt thc xen gia hoc bao quanh (trong v d, handle l id u tin). Vi v d trn, sau khi thu gn id thnh E ta c $ E + E * E $. B cc k hiu cha kt thc E ta c $ + * $. Thm cc quan h u tin ta c $ < + < * > $ . iu ny chng t handle l E * E c thu gn thnh E. V cc k hiu cha kt thc khng nh hng g n vic phn tch c php, nn chng ta khng cn phi phn bit chng. Gii thut 4.5: Phn tch c php th bc ton t Input: Chui nhp w v bng cc quan h th bc. Output: Nu w l chui chun dng ng th cho ra mt cy phn tch c php. Ngc li, thng bo li. Phng php: Khi u, Stack cha k hiu $ v b m cha cu nhp dng w$. t con tr ip tr ti k hiu u tin ca w$ ; Repeat forever If $ nm nh Stack v ip ch n $ then return 87

Else begin If a < b hoc a = b then begin y b vo Stack; Dch ip ch n k hiu tip theo trong b m; end Else if a > b then Repeat Ly k hiu trn nh Stack ra; Until K hiu kt thc trn nh Stack c quan h < vi k hiu kt thc va ly ra; else error ( ) End VI. B PHN TCH C PHP LR Phn ny gii thiu mt k thut phn tch c php t di ln kh hiu qu, c th s dng phn tch mt lp rng cc vn phm phi ng cnh. K thut ny c gi l phn tch c php LR(k). 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 nhp c xt ti mi thi im dng a ra quyt nh phn tch. Khi khng cp n k, chng ta hiu ngm l k = 1. Cc u im ca b phn tch c php LR - B phn tch c php LR c th c xy dng 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 chuyn thu gn khng quay lui. N c th c ci t c hiu qu nh cc phng php chuyn thu gn khc. - 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. - B phn tch c php LR cng c th xc nh li c php nhanh ngay trong khi duyt dng nhp t tri sang phi. Nhc im ch yu ca phng php ny l cn phi thc hin qu nhiu cng vic xy dng c b phn tch c php LR theo kiu th cng cho mt vn phm ngn ng lp trnh in hnh. /* thu gn */

88

1. Thut ton phn tch c php LR


INPUT STACK

a1

...

ai

...

an

sm Xm sm-1 Xm-1 ... s0

Chng trnh phn tch c php LR

OUTPUT

action

goto

Hnh 4.12 - M hnh b phn tch c php LR Stack lu mt chui s0X1s1X2s2 ... Xmsm trong sm nm trn nh Stack. Xi l mt k hiu vn phm, si l mt trng thi tm tt thng tin cha trong Stack bn di n. Bng phn tch bao gm 2 phn: hm action v hm goto. action[sm, ai] c th c mt trong 4 gi tr : 1. shift s: y s, trong s l mt trng thi. 2. reduce A : 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. Cu hnh (configuration) ca mt b phn tch c php LR l mt cp thnh phn, trong , thnh phn u l ni dung ca Stack, phn sau l chui nhp cha phn tch: (s0X1s1X2s2 ... Xmsm, ai ai+1 ... an $) Vi sm l k hiu trn nh Stack, ai l k hiu nhp hin ti, cu hnh c c sau mi dng bc y s nh sau : 1. Nu action[sm, ai] = Shift s : Thc hin php y c cu hnh mi: (s0X1s1X2s2 ... Xmsm ais, ai +1 ... an $) Php y lm cho s nm trn nh Stack, ai+1 tr thnh k hiu hin hnh. 2. Nu action [sm, ai] = Reduce(A ) th thc hin php thu gn c cu hnh: (s0X1s1X2s2 ... Xm - ism - i As, ai ai +1 .... an $) 89

Trong , s = goto[sm - i, A] v r l chiu di s lng cc k hiu ca . y, trc ht 2r phn t ca Stack s b ly ra, sau y vo A v s. 3. Nu action[sm, ai] = accept: qu trnh phn tch kt thc. 4. Nu action[sm, ai] = error: gi th tc phc hi li. Gii thut 4.6 : Phn tch c php LR Input: Mt chui nhp w, mt bng phn tch LR vi hm action v goto cho vn phm G. Output: Nu w L(G), a ra mt s phn tch di ln cho w . Ngc li, thng bo li. Phng php: Khi to s0 l trng thi khi to nm trong Stack v w$ nm trong b m nhp. t ip vo k hiu u tin ca w$; Repeat forever begin Gi s l trng thi trn nh Stack v a l k hiu c tr bi ip; If action[s, a] = Shift s' then begin y a v sau l s' vo Stack; Chuyn ip ti k hiu k tip; end else if action[s, a] = Reduce (A ) then begin Ly 2 * | | k hiu ra khi Stack; Gi s' l trng thi trn nh Stack; y A, sau y goto[s', A] vo Stack; Xut ra lut sinh A ; end else if action[s, a] = accept then return else error ( ) end V d 4.18: Hnh sau trnh by cc hm action v goto ca bng phn tch c php LR cho vn phm ca cc biu thc s hc di y vi cc ton t 2 ngi + v * (1) E E + T (2) E T (3) T T * F (4) T F Trng thi 0 1 Action id s5 s6 + * ( s4 acc 90 ) $ E 1 Goto T 2 F 3

(5) F (E) (6) F id ngha: si : chuyn trng thi i ri : thu gn bi lut sinh i acc: accept (chp nhn) error : khong trng

2 3 4 5 6 7 8 9 10 11 s5 s5 s5

r2 r4 r6

s7 r4 s4 r6 s4 s4

r2 r4 r6

r2 r4 8 r6 9 3 1 0 2 3

s6 r1 r3 r5 s7 r3 r5

s11 r1 r3 r5 r1 r3 r5

Hnh 4.13 - Bng phn tch c php SLR cho vn phm v d Vi chui nhp id * id + id, cc bc chuyn trng thi trn Stack v ni dung b m nhp c trnh by nh sau :
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 $ Shift * id + id $ Reduce by F id * id + id $ Reduce by T F * id + id $ Shift id + id $ Shift + id $ Reduce by F id + id $ Reduce by T T * F + id $ Reduce by E T + id $ Shift id $ Shift $ Reduce by F id $ Reduce by T F $ Reduce by E E + T $ Thnh cng

2. Vn phm LR Lm th no xy dng c mt bng phn tch c php LR cho mt vn phm cho? Mt vn phm c th xy dng c mt bng phn tch c php cho n c gi l vn phm LR. C nhng vn phm phi ng cnh khng thuc lai LR, nhng 91

ni chung l ta c th trnh c nhng vn phm ny trong hu ht cc kt cu ngn ng lp trnh in hnh. C mt s khc bit rt ln gia cc vn phm LL v LR. cho mt vn phm l LR(k), chng ta phi c kh nng nhn din c s xut hin ca v phi ca mt lut sinh ng vi k k hiu c trc. i hi ny t kht khe hn so vi cc vn phm LL(k). V vy, cc vn phm LR c th m t c nhiu ngn ng hn so vi cc vn phm LL. 3. Xy dng bng phn tch c php SLR Phn ny trnh by cch xy dng mt bng phn tch c php LR t vn phm. Chng ta s a ra 3 phng php khc nhau v tnh hiu qu cng nh tnh d ci t. Phng php th nht c gi l "LR n gin" (Simple LR - SLR), l phng php "yu" nht nu tnh theo s lng vn phm c th xy dng thnh cng bng phng php ny, nhng y li l phng php d ci t nht. Ta gi bng phn tch c php to ra bi phng php ny l bng SLR v b phn tch c php tng ng l b phn tch c php SLR, vi vn phm tng ng l vn phm SLR. a. Mc (Item): Cho mt vn phm G, mc LR(0) vn phm l mt lut sinh ca G vi mt du chm mc ti v tr no trong v phi. V d 4.19: Lut sinh A XYZ c 4 mc nh sau : A XYZ A X YZ A XY Z A XYZ Lut sinh A ch to ra mt mc A b. Vn phm tng cng (Augmented Grammar) Gi s G l mt vn phm vi k hiu bt u S, ta thm mt k hiu bt u mi S' v lut sinh S' S c vn phm mi G' gi l vn phm tng cng. c. 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 theo qui tc sau: 1. Tt c cc mc ca I c thm cho closure(I). 2. Nu A B 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. V d 4.20: Xt vn phm tng cng ca biu thc: E' E E E+T|T T T*F|F 92

F (E) | id Nu I l tp hp ch gm vn phm { E' E } th closure(I) bao gm: E' E EE+T ET TT*F TF F (E) F id (Lut 1) (Lut 2) (Lut 2) (Lut 2) (Lut 2) (Lut 2) (Lut 2)

Ch rng: Nu mt B - lut sinh c a vo closure(I) vi du chm mc nm u v phi th tt c cc B - lut sinh u c a vo. d. Php ton Goto Goto(I, X), trong I l mt tp cc mc v X l mt k hiu vn phm l bao ng ca tp hp cc mc A X sao cho A X I. Cch tnh goto(I, X): 1. To mt tp I' = . 2. Nu A X I th a A X vo I', tip tc qu trnh ny cho n khi xt ht tp I. 3. Goto(I, X) = closure(I') V d 4.21: Gi s I = { E' E, E E + T }. Tnh goto (I, +) ? Ta c I' = { E E + T } ( goto (I, +) = closure(I') bao gm cc mc : EE+T TT*F TF F (E) F id (Lut 1) (Lut 2) (Lut 2) (Lut 2) (Lut 2)

e. Gii thut xy dng h tp hp cc mc LR(0) ca vn phm G' Gi C l h tp hp cc mc LR(0) ca vn phm tng cng G'. Ta c th tc xy dng C nh sau : Procedure Item (G') begin C := closure({ S' S}); 93

Repeat For Vi mi tp cc mc I trong C v mi k hiu vn phm X sao cho goto (I, X) v goto(I, X) C do Thm goto(I, X) vo C; Until Khng cn tp hp mc no c th thm vo C; end; V d 4.22: Vi vn phm tng cng G' ca biu thc trong v d 4.20 : Ta xy dng h tp hp mc C ca vn phm nh sau: Closure({E' E}): I0 : E' E EE+T ET TT*F TF F (E) F id Goto (I0, E) I1: E' E EE+T Goto (I0, T) I2: ET TT*F Goto (I4, E) Goto (I0, F) Goto (I0, ( ) I3: I4: TF F ( E) EE+T ET TT* F TF F (E) F id f. Thut ton xy dng bng phn tch SLR 94 Goto (I8,) ) I11: F (E) Goto (I7,F) I10: T T * F Goto (I6,T) I9: I8: T (E ) EE+T EE+T TT*F Goto (I2, *) I7: T T* F F (E) F id Goto (I1, +) I6: EE+T TT*F TF F (E) F id Goto (I0, id) I5: F id

Gii thut 4.7: Xy dng bng phn tch SLR Input: Mt vn phm tng cng G' Output: Bng phn tch SLR vi hm action v goto Phng php: 1. Xy dng C = { I0, I1, ..., In }, h tp hp cc mc LR(0) ca G'. 2. Trng thi i c xy dng t Ii .Cc action tng ng trng thi i c xc nh nh sau: 2.1. Nu A a Ii v goto (Ii, a) = Ij th action[i, a] = "shift j". y a l k hiu kt thc. 2.2. Nu A Ii th action[i, a] = "reduce (A )", a FOLLOW(A). y A khng phi l S' 2.3. Nu S' S Ii 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 sinh ra b phn tch c php s tht bi trong trng hp ny. 3. Vi mi k hiu cha kt thc A, nu goto (Ii,A) = Ij th goto [i, A] = j 4. Tt c 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 V d 4.23: Ta xy dng bng phn tch c php SLR cho vn phm tng cng G' trong v d 4.20 trn. E' E E E+T|T T T*F|F F (E) | id 1. C = { I0, I1, ... I11 } 2. FOLLOW(E) = {+, ), $} FOLLOW(T) = {*, +, ), $} FOLLOW(F) = {*, +, ), $} Da vo h tp hp mc C c xy dng trong v d 4.22, ta thy: Trc tin xt tp mc I0 : Mc F (E) cho ra action[0, (] = "shift 4", v mc F id cho action[0, id] = "shift 5". Cc mc khc trong I0 khng sinh c hnh ng no. By gi xt I1 : Mc E' E cho action[1, $] = "accept", mc E E + T cho action[1, +] = "shift 6". K n xt I2 : E T 95 (0) (1) (2) (3) E' E EE+T ET TT*F (4) (5) (6) TF F (E) F id

TT*F V FOLLOW(E) = {+, ), $}, mc u tin lm cho action[2, $] = action[2,+] = "reduce (E ( T)". Mc th hai lm cho action[2,*] = "shift 7". Tip tc theo cch ny, ta thu c bng phn tch c php SLR trnh by trong hnh 4.13. Bng phn tch xc nh bi gii thut 4.7 gi l bng SLR(1) ca vn phm G, b phn tch LR s dng bng SLR(1) gi l b phn tch SLR(1) v vn phm c mt bng SLR(1) gi l vn phm SLR(1). Mi vn phm SLR(1) u khng m h. Tuy nhin c nhng vn phm khng m h nhng khng phi l SLR(1). V d 4.24: Xt vn phm G vi tp lut sinh nh sau: SL=R SR L*R L id RL y l mt vn phm khng m h nhng khng phi l vn phm SLR(1). H tp hp cc mc C bao gm: I0 : S' S S L=R S R L *R L id RL I1 : S' S I2 : S L=R R L I3 : S R I4 : L * R RL L*R L id I5 : L id I6 : S L = R RL L*R L id I7 : L * R I8 : R L I9 : S L = R

96

Khi xy dng bng phn tch SLR cho vn phm, khi xt tp mc I2 ta thy mc u tin trong tp ny lm cho action[2, =] = "shift 6". Bi v = FOLLOW(R), nn mc th hai s t action[2, =] = "reduce (R L)" C s ng ti action[2, =]. Vy vn phm trn khng l vn phm SLR(1). 4. Xy dng bng phn tch c php LR chnh tc (Canonical LR Parsing Table) a. Mc LR(1) ca vn phm G l mt cp dng [A , a], trong A l lut sinh, a l mt k hiu kt thc hoc $. b. Thut ton xy dng h tp hp mc LR(1) Gii thut 4.8: Xy dng h tp hp cc mc LR(1) Input : Vn phm tng cng G Output: H tp hp cc mc LR(1). Phng php: Cc th tc closure, goto v th tc chnh Items nh sau: Function Closure (I); begin Repeat For Mi mc [A B,a] trong I, mi lut sinh B trong G' v mi k hiu kt thc b FIRST (a) sao cho [B , b] I do Thm [B , b] vo I; Until Khng cn mc no c th thm cho I c na; return I; end; Function goto (I, X); begin Gi J l tp hp cc mc [A X, a] sao cho [A X, a] I; return Closure(J); end; Procedure Items (G'); begin C := Closure ({[S' S, $]}) Repeat For Mi tp cc mc I trong C v mi k hiu vn phm X sao cho goto(I, X) v goto(I, X) C do 97

Thm goto(I, X) vo C; Until Khng cn tp cc mc no c th thm cho C; end; V d 4.25: Xy dng bng LR chnh tc cho vn phm tng cng G' c cha cc lut sinh nh sau : S' (1) S (2) S (3) L (4) L (5) R S L=R R *R id L

Trong : tp k hiu cha kt thc ={S, L, R} v tp k hiu kt thc {=, *, id, $} I0 : Closure (S' S' S, $ S, $) S L = R, $ S R, $ L * R, = | $ L id, = | $ R L, $ Goto (I6,R) I9 : S L = R, $ Goto (I0,S) I1 : S' S , $ Goto (I6,L) I10 : R L, $ Goto (I0, L) I2 : S L = R, $ R L , $ Goto (I 0,R) I3: S R , $ Goto (I0,*) I4: L * R, = | $ R L, = | $ Goto (I6, id) I12 : L id , $ Goto (I11,R) I13 : R * R, $ Goto (I11,L) I10 L * R, = | $ R id, = | $ Goto (I0,id) I5 : L id , = | $ Goto (I6,*) I11 : L * R, $ R L, $ L * R, $ R id, $ Goto (I4, L) I8 : R L, = | $ Goto (I4,R) I7 : L * R, = | $

98

Goto (I2,=)

I6 : S L = R, $ R L, $ L * R, $ L id, $

Goto (I11,*) I11 Goto (I11,id) I12

c. Thut ton xy dng bng phn tch c php LR chnh tc Gii thut 4.9: Xy dng bng phn tch LR chnh tc Input: Vn phm tng cng G' Output: Bng LR vi cc hm action v goto Phng php: 1. Xy dng C = { I0, I1, .... In } l h tp hp mc LR(1) 2. Trng thi th i c xy dng t Ii. Cc action tng ng trng thi i c xc nh nh sau: 2.1. Nu [A a,b] Ii v goto(Ii,a) = Ij th action[i, a]= "shift j". y a phi l k hiu kt thc. 2.2. Nu [A , a] Ii , A S' th action[i, a] = " reduce (A )" 2.3. Nu [S' S,$] Ii th action[i, $] = "accept". Nu c mt s ng gia cc lut ni trn th ta ni vn phm khng phi l LR(1) v gii thut s tht bi. 3. Nu goto(Ii, A) = Ij th goto[i,A] = j 4. Tt c 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,$] Bng phn tch xc nh bi gii thut 4.9 gi l bng phn tch LR(1) chnh tc ca vn phm G, b phn tch LR s dng bng LR(1) gi l b phn tch LR(1) chnh tc v vn phm c mt bng LR(1) khng c cc action a tr th c gi l vn phm LR(1). V d 4.26: Xy dng bng phn tch LR chnh tc cho vn phm v d trn Trng thi 0 1 2 3 4 5 r4 99 s4 s5 s6 Action = * s4 id s5 acc r5 r2 8 7 $ S 1 Goto L 2 R 3

6 7 8 9 10 11 12 13 r3 r5

s11

s12

10

r1 r5 s11 s12 r4 r3 10 13

Hnh 4.14 - Bng phn tch c php LR chnh tc Mi vn phm SLR(1) l mt vn phm LR(1), nhng vi mt vn phm SLR(1), b phn tch c php LR chnh tc c th c nhiu trng thi hn so vi b phn tch c php SLR cho vn phm . 5. Xy dng bng phn tch c php LALR Phn ny gii thiu phng php cui cng xy dng b phn tch c php LR k thut LALR (Lookahead-LR), phng php ny thng c s dng trong thc t bi v nhng bng LALR thu c ni chung l nh hn nhiu so vi cc bng LR chnh tc v phn ln cc kt cu c php ca ngn ng lp trnh u c th c din t thun li bng vn phm LALR. a. Ht nhn (core) ca mt tp hp mc LR(1) 1. Mt tp hp mc LR(1) c dng {[ A , a]}, trong A l mt lut sinh v a l k hiu kt thc c ht nhn (core) l tp hp {A }. 2. Trong h tp hp cc mc LR(1) C = { I0, I1, ..., In } c th c cc tp hp cc mc c chung mt ht nhn. V d 4.27: Trong v d 4.25, ta thy trong h tp hp mc c mt s cc mc c chung ht nhn l : I4 v I11 I5 v I12 I7 v I13 I8 v I10 b. Thut ton xy dng bng phn tch c php LALR Gii thut 4.10: Xy dng bng phn tch LALR Input: Vn phm tng cng G' Output: Bng phn tch LALR Phng php: 1. Xy dng h tp hp cc mc LR(1) C = { I0, I1, ..., In } 100

2. Vi mi ht nhn tn ti trong tp cc mc LR(1) tm trn tt c cc tp hp c cng ht nhn ny v thay th cc tp hp ny bi hp ca chng. 3. t C' = { I0, I1, ..., Im } l kt qu thu c t C bng cch hp cc tp hp c cng ht nhn. Action tng ng vi trng thi i c xy dng t Ji theo cch thc nh gii thut 4.9. Nu c mt s ng gia cc action th gii thut xem nh tht bi v ta ni vn phm khng phi l vn phm LALR(1). 4. Bng goto c xy dng nh sau Gi s J = I1 I2 ... Ik. V I1, I2, ... Ik c chung mt ht nhn nn goto (I1,X), goto (I2,X), ..., goto (Ik,X) cng c chung ht nhn. t K bng hp tt c cc tp hp c chung ht nhn vi goto (I1,X) goto(J, X) = K. V d 4.28: Vi v d trn, ta c h tp hp mc C' nh sau C' = {I0, I1, I2, I3, I411, I512, I6, I713, I810, I9 } I0 : closure (S' S' S, $ S, $) : S L = R, $ S R, $ L * R, = L id, = R L, $ I1 = Goto (I0,S) : S' S , $ I2 = Goto (I0, L) : S L = R, $ R L , $ I3 = Goto (I 0,R) : S R I411 = Goto (I0,*), Goto (I6,*) : L * R, = | $ R L, = | $ L * R, = | $ R id, = | $ Ta c th xy dng bng phn tch c php LALR cho vn phm nh sau: I9 = Goto(I6, R) : S L = R, $ I6 = Goto(I2,=) : S L = R,$ R L, $ L * R, $ L id, $ I713 = Goto(I411, R) : L * R, = | $ I810 = Goto(I411, L), Goto(I6, L): R L, = | $ I512 = Goto (I0,id), Goto (I6,id) : L id , = | $

101

State 0 1 2 3 411 512 6 713 810 9

Action = * s411 s6 r2 id s512 acc $ S 1

Goto L 2 R 3

810 r4 s411 r3 r5 s512 r3 r5 r1 Hnh 4.15 - Bng phn tch c php LALR r4 810

713 9

Bng phn tch c to ra bi gii thut 4.10 gi l bng phn tch LALR cho vn phm G. Nu trong bng khng c cc action ng th vn phm cho gi l vn phm LALR(1). H tp hp mc C' c gi l h tp hp mc LALR(1). VII. S DNG CC VN PHM M H Nh chng ta ni trc y rng mi vn phm m h u khng phi l LR. Tuy nhin c mt s vn phm m h li rt c ch cho vic c t v ci t ngn ng. Chng hn vn phm m h cho kt cu biu thc c t c mt cch ngn gn v t nhin hn bt k mt vn phm khng m h no khc. Vn phm m h cn c dng trong vic tch bit cc kt cu c php thng gp cho qu trnh ti u ha. Vi mt vn phm m h, chng ta c th a thm cc lut sinh mi vo vn phm. Mc d cc vn phm l a ngha, trong mi trng hp, chng ta s a thm cc quy tc kh m h (disambiguating rule), ch cho php chn mt cy phn tch c php cho mi mt cu nhp. Theo cch ny, c t ngn ng v tng th vn l n ngha. 1. S dng u tin v tnh kt hp ca cc ton t gii quyt ng . Xt vn phm ca biu thc s hc vi hai ton t + v * : E E + E | E * E | (E) |id (1) y l mt vn phm m h v n khng xc nh u tin v tnh kt hp ca cc tan t + v *. Trong khi ta c vn phm tng ng khng m h cho biu thc c dng nh sau: 102

E T F

E+T|T T*F|F (E) | id (2)

Vn phm ny xc nh rng + c u tin thp hn * v c hai ton t u kt hp tri. Tuy nhin c 2 l do chng ta s dng vn phm (1) ch khng phi l (2): 1. D dng thay i tnh kt hp v u tin ca + v * m khng ph hy cc lut sinh v s cc trng thi ca b phn tch (nh ta s thy sau ny). 2. B phn tch cho vn phm (2) s mt thi gian thu gn bi cc lut sinh E T v T F. Hai lut sinh ny khng ni ln c tnh kt hp v u tin. Nhng vi vn phm (1) th lm th no trnh s ng ? Trc ht chng ta hy thnh lp b su tp C cc tp mc LR(0) ca vn phm tng cng ca n. I0: E' E EE+E EE*E E (E) E id Goto(I0,E) I1: E' E EE+E EE*E Goto(I4,( ) I2 Goto(I0,() I2: E ( E) EE+E E E* E E (E) E id Goto(I5,() I2 Goto(I0,id) I3: E id Goto(I1,+ ) I4: E E + E EE+E EE* E E ( E) Goto(I6,+) I4 Goto(I6,*) I5 103 Goto(I5,id) I3 Goto(I6,)) I9: E (E) Goto(I5,E) I8: EE*E EE+E EE*E Goto(I4,id) I3 Goto(I2,() I2 Goto(I2,id) I3 Goto(I4,E) I7: EE+E EE+E EE*E Goto(I2,E) I6: E' (E ) EE+E EE*E

E id Goto(I1,*) I5: E E * E EE+E EE* E E ( E) E id

Goto(I7,+) I4 Goto(I7,*) I5 Goto(I8,+) I4 Goto(I8,*) I5

Bng phn tch SLR ng c xy dng nh sau : Trng thi 0 1 2 3 4 5 6 7 8 9 s3 s3 s4 s4 / r1 s4 / r2 r3 s5 s5 / r1 s5 / r2 r3 s3 r4 r4 s2 s2 s9 r1 r2 r3 r1 r2 r3 r4 r4 7 8 Action id s3 s4 s5 + * ( s2 acc 6 ) $ Goto E 1

Hnh 4.16 - Bng phn tch c php SLR ng Nhn vo bng SLR trong hnh trn, ta thy c s ng ti action [7, +] v action [7,*]; action [8, +] v action [8,*]. Chng ta s gii quyt s ng ny bng quy tc kt hp v u tin ca cc ton t. Xt chui nhp id + id * id Stack 0 0 id 3 0E1 0E1+4 0 E 1 + 4 id 3 0E1+4E7 Input id + id * id $ + id * id $ Shift s3 + id * id $ Reduce by E id * id $ Shift s4 * id $ Shift s3 * id $ Reduce by E id 104 id Output

By gi n ng action[7, *] nn ly r1 hay s5? Lc ny chng ta phn tch qua phn chui id * id. Nu ta chn r1 tc l thu gn bi lut sinh E E + E, c ngha l chng ta thc hin php cng trc. Do vy nu ta mun tan t * c u tin cao hn + th phi chn s5. Nu chui nhp l id + id + id th qu trnh phn tch vn phm dn n hnh trng hin ti l : Stack 0E1+4E7 Output + id $

S phi xt action [7, +] nn chn r1 hay s4? Nu ta chn r1 tc l thu gn bi lut sinh E E + E tc l + thc hin trc hay ton t + c kt hp tri => action [7, +] = r1 Mt cch tng t nu ta quy nh php * c u tin cao hn + v php * kt hp tri th action [8, *] = r2 v * kt hp tri (xt chui id * id * id). Action [8,+] = r2 v ton t * c u tin cao hn + (trng hp xt chui id * id + id) Sau khi gii quyt c s ng ta c c bng phn tch SLR n gin hn bng phn tch ca vn phm tng ng (2) (ch s dng 10 trng thi thay v 12 trng thi). Tng t, ta c th xy dng bng phn tch LR chnh tc v LALR cho vn phm (1). 2. Gii quyt trng hp vn phm m h IF THEN ELSE Xt vn phm cho lnh iu kin: Stmt if expr then stmt else stmt | if expr then stmt | other n gin ta vit i thay cho if expr then, S thay cho stmt, e thay cho else v a thay cho other, ta c vn phm vit li nh sau : S S S S S iS eS (1) iS a (2) (3)

H tp hp mc C cc tp mc LR(0) l:

105

I0 : S' S, S iSeS S iS S a Goto (I0,S) I1 : S' S Goto (I0,i) I2 : S i SeS S i S S iSeS S iS S a Goto (I0,a) I3: S a

Goto (I2, S) I4:

S iS eS S iS

Goto (I4,e)

I5 :

S iSe S S iSeS S iS S a

Goto (I5,S)

I6 : S iSeS

Goto(I2,i) I2 Goto(I2,a) I3 Goto(I5,i) I2 Goto(I5,a) I3

Ta xy dng bng phn tch SLR ng nh sau: Trng Action thi i e 0 1 2 3 4 5 6 s2 r1 s2 r3 s5| r2 s3 s3 r3 r2 6 s2 Goto a s3 acc 4 $ S 1

Hnh 4.17 - Bng phn tch c php LR cho vn phm if - else gii quyt ng ti action[4, e]. Trng hp ny xy ra trong tnh trng chui k hiu if expr then stmt nm trong Stack v else l k hiu nhp hin hnh. S dng nguyn tc kt hp mi else vi mt then cha kt hp gn nht trc nn ta phi Shift else vo Stack kt hp vi then nn action [4, e] = s5. V d 4.29: Vi chui nhp i i a e a (if expr1 then if expr2 then a1 else a2)

106

Stack 0 0i2 0i2i2 0i2i2a3 0i2i2S4 0i2i2S4e5 0i2i2S4e5a3 0i2i2S4e5S6 0i2S4 0s1

Input iiaea$ i a e a $ Shift s2 a e a $ Shift s2 e a $ Shift s3

Output

a $ Reduce by S $ Shift s5 $ Shift s3 $ Reduce by S $ Reduce by S $ Reduce by S

a iS eS iS

VIII. B SINH B PHN TCH C PHP Phn ny trnh by cch dng mt b sinh b phn tch c php (parser generator) h tr cho vic xy dng k u ca mt trnh bin dch. Mt trong nhng b sinh b phn tch c php l YACC (Yet Another Compiler - Compiler). Phin bn u tin ca Yacc c S.C.Johnson to ra v hin Yacc c ci t nh mt lnh ca h UNIX v c dng ci t cho hng trm trnh bin dch. 1. B sinh th phn tch c php Yacc c t Yacc Translate.y Y.tab.c Input Yacc Compiler C Compiler a.out Y.tab.c a.out Output

Hnh 4.18 - To mt chng trnh dch input / output vi Yacc Mt chng trnh dch c th c xy dng nh Yacc bng phng thc c minh ha trong hnh 4.18 trn. Trc tin, cn chun b mt tp tin, chng hn l translate.y, cha mt c t Yacc ca chng trnh dch. Lnh yacc translate.y ca h UNIX s bin i tp tin translate.y thnh mt chng trnh C c tn l y.tab.C bng phng php LALR trnh by trn. Chng trnh y.tab.C l mt biu din ca b phn tch c php LALR c vit bng ngn ng C cng vi cc th tc C khc c th do ngi s dng chun b. Bng cch dch y.tab.C cng vi th vin ly cha chng trnh phn tch c php LR nh lnh cc y.tab.C - ly chng ta thu c mt chng trnh i tng a.out thc hin qu trnh dch c c t bi chng trnh Yacc ban u. Nu cn thm cc th tc khc, chng c th c bin dch hoc c ti vo y.tab.C ging nh mi chng trnh C khc.

107

2. c t YACC Mt chng trnh ngun Yacc bao gm 3 phn: Phn khai bo %% Cc lut dch %% Cc th tc V d 4.30: minh ha vic chun b mt chng trnh ngun Yacc, chng ta hy xy dng mt chng trnh my tnh b ti n gin, c mt biu thc s hc, c lng ri in ra gi tr s ca n. Chng ta xy dng bt u t vn phm sau : EE+T|T TT*F|F F (E) | digit Token digit l mt k hiu s t 0 n 9. Mt chng trnh Yacc dnh cho vn phm ny nh sau : %{ # include < ctype.h> %} % token DIGIT %% line : expr ; expr : expr | ; term : term | ; factor: | ; 108 '(' expr ')' { $$ = $2 ; } DIGIT factor '* ' factor { $$ = $1 * $3; } term '+' term { $$ = $1 + $3; } '\n' { print ("%d\n", $1); }

%% yylex ( ) { int c c = getchar ( ); if (isdigit(c)) { } return c; } Phn khai bo c th bao gm 2 phn nh: Khai bo C t nm trong cp du %{ v }%. Nhng khai bo ny s c s dng trong phn 2 v phn 3. Khai bo cc token (DIGIT l mt token). Cc token khai bo y s c dng trong phn 2 v phn 3. Mi lut sinh c dng <v tri> <alt1> | <alt2> | ... <altn> c m t trong Yacc : <v tri> : <alt1> | <alt2> ... | <altn> ; Trong lut sinh, cc k t nm trong cp du nhy n. 'c' l mt k hiu kt thc c, mt chui ch ci v ch s khng nm trong cp du nhy n v khng c khai bo l token s l k hiu cha kt thc. Hnh vi ng ngha ca Yacc l mt chui cc lnh C c dng: $$ Gi tr thuc tnh kt hp vi k hiu cha kt thc bn v tri. $I Gi tr thuc tnh kt hp vi k hiu vn phm th i (kt thc hoc cha) ca v phi. { hnh vi ng ngha n } { hnh vi ng ngha 1 } { hnh vi ng ngha 2 } yyval = c -'0'; return DIGIT;

Phn lut dch: Mi lut dch l mt lut sinh kt hp vi hnh vi ng ngha.

109

Phn th tc: L cc th tc vit bng ngn ng C y mt b phn tch t vng yylex( ) sinh ra mt cp gm token v gi tr thuc tnh kt hp vi n. Cc token c tr v phi c khai bo trong phn khai bo. Gi tr thuc kt hp vi token giao tip vi b phn tch c php thng qua bin yylval (mt bin c nh ngha bi yacc) Ch : Chng ta c th kt hp Lex v Yacc bng cch dng "lex.yy.c" thay cho th tc yylex( ) trong phn th 3. #include

110

BI TP CHNG IV

4.1. Cho vn phm G cha cc lut sinh sau: S ( L) a LL,S|S a) Hy ch ra cc thnh phn ca vn phm phi ng cnh cho G. b) Vit vn phm tng ng sau khi loi b quy tri . c) Xy dng b phn tch c php d on cho vn phm. d) Hy dng b phn tch c php c xy dng v cy phn tch c php cho cc cu nhp sau: i) (a, a) ii) (a, (a, a)) iii) (a, (a, a), (a, a))) e) Xy dng dn xut tri, dn xut phi cho tng cu phn d f) Hy cho bit ngn ng do vn phm G sinh ra ? 4.2. Cho vn phm G cha cc lut sinh sau: S aSbS bSaS | a) Chng minh vn phm ny l m h bng cch xy dng 2 chui dn xut tri khc nhau cho cng cu nhp abab. b) Xy dng cc chui dn xut phi tng ng cho cu nhp abab. c) V cc cy phn tch c php tng ng. d) Vn phm ny sinh ra ngn ng g ? e) Xy dng b phn tch c php quy li cho vn phm trn. C th xy dng b phn tch c php d on cho vn phm ny khng ? 4.3. Cho vn phm G cha cc lut sinh sau: bexpr bexpr or bterm | bterm bterm bterm and bfactor | bfactor bfactor not bfactor | (bexpr) | true | false a) Hy xy dng b phn tch c php d on cho vn phm G. b) Xy dng cy phn tch c php cho cu : not ( true and false ) c) Chng minh rng vn phm ny sinh ra ton b cc biu thc boole. 111

d) Vn phm G c l vn phm m h khng ? Ti sao ? e) Xy dng b phn tch c php SLR cho vn phm. 4.4. Cho vn phm G cha cc lut sinh sau: R R + R | RR | R* | (R) | a | b a) Chng minh rng vn phm ny sinh ra mi biu thc chnh quy trn cc k hiu a v b. b) Chng t y l vn phm m h. c) Xy dng vn phm khng m h tng ng vi th t u tin ca cc php tan gim dn nh sau : php bao ng, php ni kt, php hp. d) V cy phn tch c php trong c hai vn phm trn cho cu nhp : a + b * c e) Xy dng b phn tch c php d on t vn phm khng m h. f) Xy dng bng phn tch c php SLR cho vn phm G. ngh mt quy tc gii quyt ng sao cho cc biu thc chnh quy c phn tch mt cch bnh thng. 4.5. Vn phm sau y l mt ngh iu chnh tnh m h cho vn phm cha cu lnh if - then - else: Stmt if expr then stmt | matched_stmt Matched_Stmt if expr then matched_stmt else stmt | other Chng minh rng vn phm ny vn m h. 4.6. Thit k vn phm cho cc ngn ng sau. Ngn ng no l chnh quy? a) Tp tt c cc chui 0 v 1 sao cho mi s 0 c t nht mt s 1 ngay sau n. b) Cc chui 0 v 1 vi s s 0 bng s s 1. c) Cc chui 0 v 1 vi s s 0 khng bng s s 1. d) Cc chui 0 v 1 khng cha chui 001 nh chui con. 4.7. Cho vn phm G cha cc lut sinh sau : S aSa | aa Xy dng b phn tch c php quy li cho vn phm vi yu cu phi th kh trin aSa trc aa.

112

4.8. Cho vn phm G cha cc lut sinh sau: S aAB A Abc | b B d a) Xy dng b phn tch c php d on cho vn phm . b) Hy dng b phn tch c php c xy dng pht sinh cy phn tch c php cho cu nhp: abbcd 4.9. Cho vn phm G cha cc lut sinh sau: E E or T | T T T and F | F F ( E) | not F | id a) Hy xy dng b phn tch c php d on cho vn phm. b) V cy phn tch c php cho cu nhp : id and not ( id or id ) 4.10. Cho vn phm G cha cc lut sinh sau: S AB A Ab | a B cB | d a) Xy dng b phn tch c php th t u tin cho vn phm . b) Hy dng b phn tch c php xy dng pht sinh cy phn tch c php cho cu nhp: abccd 4.11. Cho vn phm G: SDD|D D DB | B B0|1 a) Xy dng b phn tch c php th t u tin cho vn phm . b) Hy dng b phn tch c php xy dng pht sinh cy phn tch c php cho cu nhp: 101101 4.12. Cho vn phm G Assign id : = exp Exp Exp + Term | Term 113

Term Term * Factor | Factor Factor id | ( Exp ) a) Xy dng b phn tch c php th t u tin cho vn phm . b) Hy dng b phn tch c php c xy dng pht sinh cy phn tch c php cho cu nhp: id : = id + id * id 4.13. Cho vn phm m h nh sau: S AS | b A SA | a a) Xy dng h tp hp mc LR(0) cho vn phm ny. b) Xy dng bng phn tch c php SLR . c) Thc hin qu trnh phn tch c php SLR kh trin cho chui nhp : abab d) Xy dng bng phn tch c php chnh tc . e) Xy dng bng phn tch c php LALR . 4.14. Cho vn phm G nh sau: EE+T|T T TF | F FF*|a|b a) Xy dng bng phn tch c php SLR cho vn phm ny. b) Thc hin qu trnh phn tch c php SLR cho chui nhp : b + ab* a c) Xy dng bng phn tch c php LALR. 4.15. Chng t rng vn phm sau y: S Aa | bAc | dc | bda Ad l LALR(1) nhng khng phi SLR(1). 4.16. Cho vn phm G nh sau: E E sub R | E sup E | { E } | c R E sup E | E a) Xy dng bng phn tch c php SLR cho vn phm ny. b) ngh mt quy tc gii quyt ng cc biu thc text c th c phn tch mt cch bnh thng. 114

4.17. Vit mt chng trnh Yacc nhn chui input l cc biu thc s hc, sinh ra output l chui biu thc hu t tng ng. 4.18. Vit mt chng trnh Yacc nhn biu thc chnh quy lm chui input v sinh ra output l cy phn tch c php ca n.

115

You might also like