ly thuyet ngon ngu va phuong phap dich

Upload: no-promises

Post on 15-Jul-2015

427 views

Category:

Documents


0 download

TRANSCRIPT

Khoa cng ngh thng tin - i hc Thi NguynB mn cng ngh phn mm

GIO TRNH MN CHNG TRNH DCH(Compiler Construction)

Thi nguyn, 2007

LI NI U Mn hc chng trnh dch l mn hc ca ngnh khoa hc my tnh. Trong sut thp nin 50, trnh bin dch c xem l cc k kh vit. Ngy nay, vic vit mt chng trnh dch tr nn n gin hn cng vi s h tr ca cc cng c khc. Cng vi s pht trin ca cc chuyn ngnh l thuyt ngn ng hnh thc v automat, l thuyt thit k mt trnh bin dch ngy mt hon thin hn. C rt nhiu cc trnh bin dch hin i, c h tr nhiu tnh nng tin ch khc na. V d: b visual Basic, b studio ca Microsoft, b Jbuilder, netbean, Delphi Ti sao ta khng ng trn vai nhng ngi khng l m li i nghin cu cch xy dng mt chng trnh dch nguyn thu. Vi vai tr l sinh vin cng ngh thng tin ta phi tm hiu nghin cu xem mt chng trnh dch thc s thc hin nh th no? Mc ch ca mn hc ny l sinh vin s hc cc thut ton phn tch ng php v cc k thut dch, hiu c cc thut ton x l ng ngha v ti u ha qu trnh dch. Yu cu ngi hc nm c cc thut ton trong k thut dch. Ni dung mn hc : Mn hc Chng trnh dch nghin cu 2 vn : - L thuyt thit k ngn ng lp trnh ( cch to ra mt ngn ng gip ngi lp trnh c th i thoi vi my v c th t ng dch c). - Cch vit chng trnh chuyn i t ngn ng lp trnh ny sang ngn ng lp trnh khc. Hc mn chng trnh dch gip ta: - Nm vng nguyn l lp trnh: Hiu tng ngn ng, im mnh im yu ca n => chn ngn ng thch hp cho d n ca mnh. Bit chn chng trnh dch thch hp (VD vi pascal di Dos: chng trnh dch l turbo pascal. i vi ngn ng C: chn turbo C hay bolean C? Bolean C tin li, d dng, turbo C sinh m gn, khng phi lo v vn tng thch vi h iu hnh nhng kho dng hn). Phn bit c cng vic no do chng trnh dch thc hin v do chng trnh ng dng thc hin. - Vn dng: thc hin cc d n xy dng chng trnh dch. p dng vo cc ngnh khc nh x l ngn ng t nhin

vit c trnh bin dch ta cn c kin thc v ngn ng lp trnh, cu trc my tnh, l thuyt ngn ng, cu trc d liu, phn tch thit k gii thut v cng ngh phn mm. Nhng kin thc cua mn hoc cng co th c s dung trong cac linh vc khac nh x ly ngn ng t nhin. Ti liu tham kho: 1. Gio trnh s dng: Dick Grune, Ceriel Jacobs, Parsing Techniques: A Practical Guide, 1998 2. Mt s ti nguyn trc tuyn c th c tm thy bng vic s dng my tm kim, chng hn nh http://www.cppreference.com/ v http://www.sgi.com/tech/stl/. 3. Bai giang Ly thuyt va Thc hanh Chng Trinh Dich cua L Anh Cng, khoa Cng Ngh, HQG Ha ni, 2004. 4. Gio trnh l thuyt, thc hnh mn hc Chng trnh dch ca Phm Hng Nguyn, Khoa Cng Ngh, HQG H ni, 1998. 5. Ngn ng hnh thc ca Nguyn Vn Ba, HBK H ni, 1994 6. Thc hnh k thut bin dch ca Nguyn Vn Ba, HBK H ni, 1993 7. Compiler: principles techniques and tools ca A.V. Aho, Ravi Sethi, D. Ulman, 1986 8. Bn dch ca ti liu: Trnh bin dch: Nguyn l, k thut v cng c ca Trn c Quang, 2000.

Chng 1: Tng quan v ngn ng lp trnh v chng trnh dch 1. Ngn ng lp trnh v chng trnh dch. Con ngi mun my tnh thc hin cng vic th con ngi phi vit yu cu a cho my tnh bng ngn ng my hiu c. Vic vit yu cu gi l lp trnh. Ngn ng dng lp trnh gi l ngn ng lp trnh. C nhiu ngn ng lp trnh khc nhau. Da trn c s ca tnh khng ph thuc vo my tnh ngy cng cao ngi ta phn cp cc ngn ng lp trnh nh sau: - Ngn ng my (machine languge) - Hp ng (acsembly langguge) - Ngn ng cp cao (high level langguage) Ngn ng my ch gm cc s 0 v 1, kh hiu i vi ngi s dng. M ngn ng t nhin ca con ngi li di dng nhiu chi tit mp m, khng r rng i vi my. con ngi giao tip c vi my d dng cn mt ngn ng trung gian gn vi ngn ng t nhin. V vy ta cn c mt chng trnh dch cc chng trnh trn ngn ng ny sang m my c th chy c. Nhng chng trnh lm nhim v nh vy gi l cc chng trnh dch. Ngoi ra, mt chng trnh dch cn chuyn mt chng trnh t ngn ng nay sang ngn ng khc tng ng. Thng thng ngn ngc ngun l ngn ng bc cao v ngn ng ch l ngn ng bc thp, v d nh ngn ng Pascal hay ngn ng C sang ngn ng Acsembly. * nh ngha chng trnh dch: Chng trnh dch l mt chng trnh thc hin vic chuyn i mt chng trnh hay on chng trnh t ngn ng ny (gi l ngn ng ngun) sang ngn ng khc (gi l ngn ng ch) tng ng.chng trnh ngun (ngn ng bc cao)

chng trnh dch

chng trnh ch (ngn ng my)

Li

Hnh 1.1: S mt chng trnh dch

xy dng c chng trnh dch cho mt ngn ng no , ta cn bit v c t ca ngn ng lp trnh, c php v ng ngha ca ngn ng lp trnh c t ngn ng lp trnh, ta cn nh ngha: - Tp cc k hiu cn dng trong cc chng trnh hp l. - Tp cc chng trnh hp l.

- Ngha ca tng chng trnh hp l. Vic nh ngha tp cc k hiu cn dng ca ngn ng l d dng, ta ch cn lit k l . Vic xc nh cc chng trnh hp l th kh khn hn. Thng thng ta dng cc lut ca vn phm c t. Vic th 3, nh ngha ngha ca chng trnh hp l l kh khn nht. C 3 phng php xc nh ngha ca chng trnh hp l. + Phng php 1: nh ngh bng php nh x. nh x mi chng trnh vo mt cu trong ngn ng m ta c th hiu c. + Phng php 2: Xc nh ngha ca chng trnh bng mt my l tng. ngha ca chng rnh c c t trong ngn t ca my l tng. My l tng l b thng dch ca ngn ng. + Phng php 3: ngha cu chng trnh ngun l sn phm xut ra ca trnh bin dch, khi n dch chng trnh ngun. 2. Phn loi chng trnh dch. C th phn thnh nhiu loi tu theo cc tiu ch khc nhau. - Theo s ln duyt: Duyt n, duyt nhiu ln. - Theo mc ch: Ti v chy, g ri, ti u, chuyn i ngn ng, chuyn nh dng - Theo phc tp ca chng trnh ngun v ch: + Asembler (chng trnh hp dch): Dch t ngn ng asembly ra ngn ng my. + Preproccessor: (tin x l) : Dch t ngn ng cp cao sang ngn ng cp cao khc (thc cht l dch mt s cu trc mi sang cu trc c). + Compiler: (bin dch) dch t ngn ng cp cao sang ngn ng cp thp. - Theo phng php dch chy: + Thng dch: (din gii - interpreter) chng trnh thng dch c chng trnh ngun theo tng lnh v phn tch ri thc hin n. (V d h iu hnh thc hin cc cu lnh DOS, hay h qun tr c s d liu Foxpro). Hoc ngn ng ngun khng c chuyn sang ngn ng my m chuyn sang mt ngn ng trung gian. Mt chng trnh s c nhim v c chng trnh ngn ng trung gian nyChng hin tng cu lnh. Ngn ng trung gian c gi l ngn ng ca v thc CT NN trnh mt my o, chng trnh thng dch thc hin ngn ng ny gi l my o. trung gian Compiler Interpreterngun

Hnh 1.2 H thng thng dch

Kt qu

V d h thng dch Java. M ngun Java c dch ra dng Bytecode. File ch ny c mt trnh thng dch gi l my o Java thc hin. Chnh v vy m ngi ta ni Java c th chy trn mi h iu hnh c ci my o Java. + Bin dch: ton b chng trnh ngun c trnh bin dch chuyn sang chng trnh ch dng m my. Chng trnh ch ny c th chy c lp trn my m khng cn h thng bin dch na. - Theo lp vn phm: LL (1) (LL Left to right, leftmost) LR(1) (LR letf to right, right most) 1.3. Cu trc ca chng trnh dch. 1.3.1. cu trc tnh (cu trc logic)

1) Phn tch t vng: c lung k t to thnh chng trnh ngun t tri sang phi, tch ra thnh cc t t (token).

- T vng: Cng nh ngn ng t nhin, ngn ng lp trnh cng c xydng da trn b t vng. T vng trong ngn ng lp trnh thng c xy dng da trn b ch gm c: + ch ci: A .. Z, a . . z + ch s: 0..9 + cc k hiu ton hc: +, - , *, /, (, ), =, , !, %, / + cc k hiu khc: [, ], . . . Cc t vng c ngn ng hiu bao gm cc t kha, cc tn hm, tn hng, tn bin, cc php ton, . . . Cc t vng c nhng qui nh nht nh v d: tn vit bi ch ci u tin sau l khng hoc nhiu ch ci hoc ch s, php gn trong C l =, trong Pascal l :=,v. . . xy dng mt chng trnh dch, h thng phi tm hiu tp t vng ca ngn ng ngun v phn tch bit c tng loi t vng v cc thuc tnh ca n, V d: Cu lnh trong chng trnh ngun vit bng ngn ng pascal: a := b + c * 60 Chng trnh phn tch t vng s tr v: a l tn (tn (nh danh )) := l ton t gn b l tn (nh danh) + l ton t cng c l nh danh * l ton t nhn 60 l mt s Kt qu phn tch t vng s l: (tn, a), php gn, (tn, b) php cng (tn, c) php nhn, (s, 60)

2). Phn tch c php: Phn tch cu trc ng php ca chng trnh. Cc t t c nhm li theo cu trc phn cp.

- C php: C php l thnh phnquan trng nht trong mt ngn ng. Nh chng ta bit trong ngn ng hnh thc th ngn ng l tp cc cu tha mn vn phm ca ngn ng . V d nh cu = ch ng + v ng v ng = ng t + b ng v.v. . . Trong ngn ng lp trnh, c php ca n c th hin bi mt b lut c php. B lut ny dng m t cu trc ca chng trnh, cc cu lnh. Chng ta quan tm n cc cu trc ny bao gm: 1) cc khai bo 2) biu thc s hc, biu thc logic 3) cc lnh: lnh gn, lnh gi hm, lnh vo ra, . . . 4) cu lnh iu kin if 5) cu lnh lp: for, while 6) chng trnh con (hm v th tc) Nhim v trc tin l phi bit c b lut c php ca ngn ng m mnh nh xy dng chng trnh cho n. Vi mt chui t t v tp lut c php ca ngn ng, b phn tch c php t ng a ra cy c php cho chui nhp. Khi cy c php xy dng xong th qu trnh phn tch c php ca chui nhp kt thc thnh cng. Ngc li nu b phn tch c php p dng tt c cc lut hin c nhng khng th xy dng c cy c php ca chui nhp th thng bo rng chui nhp khng vit ng c php. Chng trnh phi phn tch chng trnh ngun thnh cc cu trc c php ca ngn ng, t kim tra tnh ng n v mt ng php ca chng trnh ngun. 3). Phn tch ng ngha: Phn tch cc c tnh khc ca chng trnh m khng phi c tnh c php. Kim tra chng trnh ngun tm li c php v s hp kiu. Da trn cy c php b phn tch ng ngha x l tng php ton. Mi php ton n kim tra cc ton hng v loi d liu ca chng c ph hp vi php ton khng.

VD: tn (bin) c khai bo kiu real, 60 l s kiu interge v vy trnh bin dch i thnh s thc 60.0.

- Ng ngha: ca mt ngn ng lp trnh lin quan n:+ Kiu, phm vi ca hng v bin + Phn bit v s dng ng tn hng, tn bin, tn hm Chng trnh dch phi kim tra c tnh ng n trong s dng cc i lng ny. V d kim tra khng cho gn gi tr cho hng, kim tra tnh ng n trong gn kiu, kim tra phm vi, kim tra s dng tn nh tn khng c khai bo trng, dng cho gi hm phi l tn c thuc tnh hm, . . . 4) Sinh m trung gian: Sinh chng trnh rong ngn ng trung gian nhm: d sinh v ti u m hn d chuyn i v m my hn. sau giai on phn tch th m trung gian sinh ra nh sau: temp1 := 60 temp2 := id3 * temp1 temp3 := id2 + temp 2 id1 := temp3 (1.2) (trong id1 l position; id2 l initial v id3 l rate) 5). Ti u m: Sa i chng trnh trong ngn ng trung gian hm ci tin chng trnh ch v hiu nng. V d nh vi m trung gian (1.2), chng ta c th lm tt hn on m to ra c cc m my chy nhanh hn nh sau: temp1 := id3 * 60 id1 := id2 + temp1 (1.3) 6). Sinh m: to ra chng trnh ch t chng trnh trong ngn ng trung gian ti u. Thng thng l sinh ra m my hay m hp ng. Vn quyt nh l vic gn cc bin cho cc thanh ghi. Chng hn s dng cc thanh ghi R1 v R2, cc ch th lnh MOVF, MULF, ADDF, chng ta sinh m cho (1.3) nh sau:

MOVF id3, R2MULF #60, R2 MOVF id2, R1 ADDF R2, R1 MOVF R1, id1

(1.4)

Ngoi ra, chng trnh dch cn phi thc hin nhim v:* Qun l bng k hiu: ghi li cc k hiu, tn s dng trong

chng trnh ngun cng cc thuc tnh km theo nh kiu, phm vi, gi tr ... dng cho cc bc cn n.

T t(token) + Thuc tnh (kiu, a ch lu tr) = Bng k hiu (Symbol table).

Trong qu trnh phn tch t vng, cc tn s c lu vo bng k hiu, sau t giai on phn tch ng ngha cc thng tin khc nh thuc tnh v tn (tn hng, tn bin, tn hm) s c b sung trong cc giai on sau. - Giai on phn tch t vng: lu tr tr t vng vo bng k hiu nu n cha c. - Giai on cn li: lu tr thuc tnh ca t vng hoc truy xut cc thng tin thuc tnh cho tng giai on. Bng k hiu c t chc nh cu trc d liu vi mi phn t l mt mu tin dng lu tr tr t vng v cc thuc tnh ca n. - Tr t vng: tn t t. - Cc thuc tnh: kiu, tm hot ng, s i s, kiu ca i s ...

V d: var position, initial, rate : real th thuc tnh kiu real cha th xc nh. Cc giai on sau nh phn tch ng ngha v sinh m trung gian mi a thm cc thng tin ny vo v s dng chng. Ni chung giai on sinh m s s dng bng k hiu gi cc thng tin chi tit v danh biu.* X l li: Khi pht hin ra li trong qu trnh dch th n ghi li v tr gp li, loi li, nhng li khc c lin quan n li ny thng bo cho ngi lp trnh. Mi giai on c th c nhiu li, ty thuc vo trnh bin dch m c th l: - Dng v thng bo li khi gp li du tin (Pascal). - Ghi nhn li v tip tc qu trnh dch (C). + Giai on phn tch t vng: c li khi cc k t khng th ghp thnh mt token (v d: 15a, a@b,...) + Giai on phn tch c php: C li khi cc token khng th kt hp vi nhau theo cu trc ngn ng (v d: if stmt then expr). + Giai on phn tch ng ngha bo li khi cc ton hng c kiu khng ng yu cu ca php ton. * Giai on phn tch c u vo l ngn ng ngun, u ra l ngn ng trung gian gi l k trc (fron end). Giai on tng hp c u vo l ngn ng trung gian v u ra l ng ng ch gi l k sau (back end).

i vi cc ngn ng ngun, ta ch cn quan tm n vic sinh ra m trung gian m khng cn bit m my ch ca n. iu ny lm cho cng vic n gin, khng ph thuc vo my ch. Cn giai on sau tr nn n gin hn v ngn ng trung gian thng th gn vi m my. V n cn th hin u im khi chng ta xy dng nhiu cp ngn ng. V d c n ngn ng ngun, mun xy dng chng trnh dch cho n ngn ng ny sang m ngn ng ch th chng ta cn n*m chng trnh dch; cn nu chng ta xy dng theo kin trc front end v back end th chng ta ch cn n+m chng trnh dch. 1.3.2. Cu trc ng.

Cu trc ng (cu trc theo thi gian) cho bit quan h gia cc phn khi hot ng.Cc thnh phn c lp ca chng trnh c th hot ng theo 2 cch: ln lt hay ng thi. mi khi mt phn no ca chng trnh dch xong ton b chng trnh ngun hoc chng trnh trung gian th ta gi l mt ln duyt.* Duyt n (duyt mt ln): mt s thnh phn ca chng trnh c thc

hin ng thi. B phn tch c php ng vai tr trung tm, iu khin c chng trnh. N gi b phn tch t vng khi cn mt t t tip theo v gi b phn tch ng ngha khi mun chuyn cho mt cu trc c php c phn tch. B phn tch ng ngha li a cu trc sang phn sinh m trung gian sinh ra cc m trong mt ngn M ngun Phn tch ng trung gian c php ri a vo b ti u Phn tch t vng v sinh m.Phn tch t vng Phn tch ng ngha Phn tch c php

Phn tch ng ngha Chng trnh ngun Sinh m trung gian Ti u m Sinh m Sinh m trung gian Ti u m

Chng trnh ch

Sinh m ch

m ch

Chng trnh dch duyt n

Chng trnh dch duyt nhiu ln

* Duyt nhiu ln: cc thnh phn trong chng trnh c thc hin ln lt v c lp vi nhau. Qua mi mt phn, kt qu s c lu vo thit b lu tr ngai li c c vo cho bc tip theo. Ngi ta ch mun c mt s t lt bi v mi lt u mt thi gian c v ghi ra tp tin trung gian. Ngc li nu gom qu nhiu giai on vo trong mt lt th phi duy tr ton b chng trnh trong b nh, v 1 giai on cn thng tin theo th t khc vi th t n c to ra. Dng biu din trung gian ca chng trnh ln hn nhiu so vi ct ngun hoc ct ch, nn s gp vn v b nh. u v nhc im ca cc loi: Trong gio trnh ny chng ta nghin cu cc giai on ca mt chng trnh dch mt cch ring r nhng theo thit k duyt mt lt. So snh tc b nh phc tp Cc ng dng ln duyt n tt km km Km duyt nhiu ln Km tt tt tt

1.4. Mi trng bin dch Chng trnh dch l 1 chng trnh trong h thng lin hon gip cho ngi lp trnh c c mt mi trng hon chnh pht trin cc ng dng ca h. Chng trnh dch trong h thng th hin trong s sau:

Chng trnh ngun nguyn thy

Tin x l

Chng trnh ngun Chng trnh dch

Chng trnh ch hp ng

Assembler

M my nh v li c Ti / Lin kt Th vin v cc file i tng nh v li c

M my tht s

Hnh 1.3: H thng x l ngn ng * B tin x l: Chui k t nhp vo chng trnh dch l cc k t ca chng trnh ngun nhng trong thc t, trc khi l u vo ca mt chng trnh dch, ton b file ngun s c qua mt thm ch mt vi bo tin x l. Sn phm ca cc b tin x l ny mi l chng trnh ngun thc s ca chng trnh dch. B tin x l s thc hin cc cng vic sau: - X l Macro: Cho phep ngi dng nh ngha cc macro l cch vit tt ca cc cu trc di hn. - Chn tp tin: B sung ni dung ca cc tp tin cn dng trong chng trnh. V d : Trong ngn ng Pascal c khai bo th vin

Uses crt; b tin x l s chn tp tin crt vo thay cho li khai bo. - B x l ho hp: h tr nhng ngn ng xa hn bng cc cu trc d liu hoc dng iu khin hin i hn. - M rng ngn ng: gia tng kh nng ca ngn ng bng cc macro c sn. * Trnh bin dch hp ng: Dch cc m lnh hp ng thnh m my. * Trnh ti/ lin kt: Trnh ti nhn cc max my kh ti nh v, thay i cc a ch kh ti nh v, t cc ch th v d liu trong b nh c sa i vo cc vik tr ph hp. Trnh lin kt cho php to ra mt hcng rnh t cc tp tin th vin hoc nhiu tp tin m my kh ti nh v m chng l kt qu ca nhng bin dch khc nhau.

CHNG 2

PHN TCH T VNG

1. Vai tr ca b phn tch t vng. 1.1. Nhim v. B phn tch t vng c nhim v l c cc k t vo t vn bn chng trnh ngun v phn tch a ra danh sch cc t t (t vng v phn loi c php ca n) cng mt s thng tin thuc tnh. u ra ca b phn tch t vng l danh sch cc t t v l u vo cho phn tch c php. Thc t th phn tch c php s gi ln lt mi t t t b phn tch x l, ch khng gi mt lc ton b danh sch t t ca c chng trnh ngun. Khi nhn c yu cu ly mt t t tip theo t b phn tch c php, b phn tch t vng s c k t vo cho dn khi a ra c mt t t.yu cu ly t t tip theo chng trnh ngun

Phn tch t vngt t

Phn tch c php

Bng k hiu

Hinh 2.4: S phn tch t t

1.2. Qu trnh phn tch t vng 1). Xa b k t khng c ngha (cc ch thch, dng trng, k hiu xung dng,k t trng khng cn thit)

Qu trnh dch s xem xt tt c cc k t trong dng nhp nn nhng k t khng c ngha (khong trng (blanks, tabs, newlines) hoc li ch thch phi b b qua. Khi b phn tch t vng b qua cc khong trng ny th b phn tch c php khng bao gi quan tm n n na. 2). Nhn dng cc k hiu: nhn dng cc t t.

V d ghp cc ch s c mt s v s dng n nh mt n v trong sut qu trnh dch. t num l mt token biu din cho mt s nguyn. Khi mt chui cc ch s xut hin trong dng nhp th b phn tch s gi cho b phn tch c php num. Gi tr ca s nguyn c chuyn cho b phn tch c php nh l mt thuc tnh ca token num. 3). S ho cc k hiu: Do con s x l d dng hn cc xu, t kho, tn, nn xu thay bng s, cc ch s c i thnh s thc s biu din trong my. Cc tn c ct trong danh sch tn, cc xu ct trong danh sch xu, cc chui s trong danh sch hng s. 1.2. T v (lexeme), t t (token), mu (patter). * T v: l mt nhm cc k t k nhau c th tun theo mt quy c (mu hay lut) no . * T t: l mt thut ng ch cc t vng c cng ngha c php (cng mt lut m t). - i vi ngn ng lp trnh th t t c th c phn vo cc loi sau: + t kho + tn ca hng, hm, bin + s + xu ky t + cc ton t + cc k hiu.V d: position := initial + 10 * rate ; ta c cc t vng position, :=, initial, +, 10, *, rate, ; trong position, initial, rate l cc t vng c cng ngha c php l cc tn. := l php gn + l php cng * l php nhn 10 l mt con s ; l du chm phy Nh vy trong cu lnh trn c 8 t vng thuc 6 t t.

Phn tch c php s lm vic trn cc t t ch khng phi t vng, v d nh l lm vic trn khi nim mt s ch khng phi trn 5 hay 2; lm vic trn khi nim tn ch khng phi l a, b hay c. * Thuc tnh ca t t:Mt t t c th ng vi mt tp cc t v khc nhau, ta buc phi thm mt s thng tin na khi cn c th bit c th l t v no. V d: 15 v 267 u l mt chui s c t t l num nhng n b sinh m phi bit c th l s 15 v s 267.

Thuc tnh ca t t l nhng thng tin kt hp vi t t . Trong thc t, mt t t s cha mt con tr tr n mt v tr trn bng k hiu c chcc thng tin v n.V d: position := initial + 10 * rate ; ta nhn c dy t t:

* Mu (lut m t - patter): cho b phn tch t vng nhn dng c cc t t, th i vi mi t t chng ta phi m ta c im xac inh mt t vng co thuc t t o khng, m ta o c goi la mu t t hay lut m ta.Token const if quan h (relation) tn (id) S (num) Xu (literal) Tr t vng const if = pi, count, d2 3.1416, 0, 5 "hello" Mu (lut m t) const if < hoc hoc >= m u l ch ci theo sau l ch ci, ch s bt k hng s no bt k cc character nm gia " v " ngoi tr "

Ta c th coi: t v ging cc t c th trong t in nh nh, ca t t gn ging khi nim t loi nh danh t ng t Cc mu (lut m t) dng nhn dng loi t t, ging nh nhng quy nh nhn dng mt t l danh t hay ng t

Tr t vng c so cng vi mu ca t t l chui k t v l n v ca t vng. Khi c chui k t ca chng trnh ngun b phn tch t vng s so snh chui k t vi mu ca t t nu ph hp n s on nhn c t t v a t t vo bng k hiu cng vi tr t vng ca n. 1.4. Cch lu tr tm thi chng trnh ngun.Vic c tng k t trong chng trnh ngun tn mt thi gian ng k nn n nh hng ti tc chng trnh dch. gii quyt vn ny, thit k c vo mt lc mt chui

k t lu tr vo vng nh tm buffer. Nhng vic c nh vy gp kh khn do khng th xc nh c mt chui nh th no th cha chn vn 1 t t. V phi phn bit c mt chui nh th no th cha chn vn mt t t.C 2 phng php gii quyt nh sau: 1. Cp b m (buffer pairs)

* Cu to: - Chia buffer thnh 2 na, mt na cha n k t ( n = 1024, 4096, ). - S dng 2 con tr d tm trong buffer: p1: (lexeme_ beginning) t ti v tr u ca mt t v. p2: (forwar):di chuyn trn tng k t trong buffer xc nh t t. E = M * C * * 2 EOF * Hot ng: - c n k t vo na u ca buffer, 2 con tr trng nhau ti v tr bt u. - Con tr p2 tin sang phi cho ti khi xc nh c mt t t c t v l chui k t nm gia 2 con tr. Di p1 ln trng vi p2, tip tc d tm t t mi. - khi p2 cui na u ca buffer th c tip n k t vo na u th 2. Khi p2 nm na cui ca buffer th c tip n k t vo na u ca buffer v p2 c di v u ca b m. - Nu s k t trong chng trnh ngun cn li t hn n th mt k t c bit c a vo buffer sau cc k t va c bo hiu chng trnh ngun c c ht.* Gii thut hnh thc if p2 cui na u then begin c vo na cui. p2 := p2 + 1; end else if p2 cui ca na th hai then begin c vo na u. p2 := p2 + 1; end else p2 := p2 + 2

2. Phng php cm canh. Phng php trn mi ln di chuyn p2 phi kim tra xem c phi ht mt na buffer cha nn km hiu qu v phi 2 ln test. Khc phc: - Mi ln ch c n-1 k t vo mi na buffer cn k t th n l k t c bit (thng l EOF). Nh vy ta ch cn mt ln test. E = M * EOF C * * 2 EOF EOF

Gii thut: p2 := p2 + 1; if p2( = eof then begin if p2 cui ca na u then begin c vo na cui; p2 := p2 + 1 end else if p2 cui ca na cui then begin c vo na u; Di p2 vo u ca na u else /* eof gia ch ht chng trnh ngun */ kt thc phn tch t vngend

end

2. XC NH T T. 2.1. Biu din t tCch biu din cc lut n gin nht l biu din bng li. Tuy nhin cch ny thng gp hin tng nhp nhng ( cng mt li ni c th hiu theo nhiu ngha khc nhau), pht biu theo nhiu cch khc nhau kh a vo my tnh. Cc t t khc nhau c cc mu hay lut m t khc nhau. Cc mu ny l c s nhn dng cc t t. Ta cn thit phi hnh thc ho cc mu ny lm sao c th lp trnh c. Vic ny c th thc hin c nh biu thc chnh qui v tmt hu hn. Ngoi ra ta c th dng cch biu din trc quan ca vn phm phi ng cnh l th chuyn m t cc loi t t.

2.1.1. Mt s khi nim v ngn ng hnh thc. 2.1.1.1. K hiu, Xu, ngn ng. * Bng ch ci: l mt tp hu hn hoc v hn cc i tng. Mi phn t a gi l k hiu hoc ch ci (thuc bng ch ci ). * Xu: L mt dy lin tip cc k hiu thuc cng mt bng ch ci. - di xu: l tng v tr ca tt c cc k hiu c mt trong xu, k hiu l | w|. - Xu rng: l t c di = 0 k hiu l hoc di ca t rng = 0. . - Xu v l Xu con ca w nu v c to bi cc k hiu lin k nhau trong w. * Tp tt c cc t trn bng ch ci k hiu l *. Tp tt c cc t khc rng trn bng ch ci k hiu l +. * = + { } * Tin t: ca mt xu l mt xu con bt k nm u xu. Hu t ca mt xu l xu con nm cui xu. (Tin t v hu t ca mt xu khc hn chnh xu ta gi l tin t v hu t thc s)

* Ngn ng: Mt ngn ng L l mt tp cc chui ca cc k hiu t mt b ch ci no . (Mt tp con A * c gi l mt ngn ng trn bng ch ci ). - Tp rng c gi l ngn ng trng (hay ngn ng rng). Ngn ng rng l ngn ng trn bt k bng ch ci no. (Ngn ng rng khc ngn ng ch gm t rng:ngn ng khng c phn t no trong khi ngn ng { } c mt phn t l chui rng )

* Cc php ton trn ngn ng. + Php giao: L = L1 L2 = {x * | xL1 hoc x L2} + Php hp: L = L1 L2 = {x * | xL1 v x L2} + Php ly phn b ca ngn ng L l tp CL = { x * | x L}+ Php ni kt (concatenation) ca hai ngn ng L1/

v L2/ L1L2 = {w1w2 | w1 L1 v w2 L2 }/ 1 21

2

l :

K hiu Ln = L.L.LL (n ln). Li = LLi - 1. - Trng hp c bit : L0 = { }, vi mi ngn ng L. + Php bao ng (closure) : + Bao ng (Kleene) ca ngn ng L, k hiu L* l hp ca mi tp tch trn L: L* = Ii= 0 Li + Bao ng dng (positive) ca ngn ng L, k hiu L+ c nh ngha l hp ca mi tch dng trn L : L: L+ = i = 1 LI 2.1.1.2. Vn phm. * nh ngha vn phm. (vn phm sinh hay vn phm ng cu) - L mt h thng gm bn thnh phn xc nh G = ( , , P, S), trong : : tp hp cc k hiu kt thc (terminal). : tp hp cc bin hay k hiu cha kt thc (non terminal) (vi =

)

P : tp hu hn cc quy tc ng php c gi l cc sn xut (production), mi sn xut biu din di dng , vi , l cc chui ( )*. S : k hiu cha kt thc dng lm k hiu bt u (start)Quy c: - Dng cc ch ci Latinh vit hoa (A, B, C, ...) ch cc k hiu trong tp bin . - Cc ch ci Latinh u bng vit thng (a, b, c, ...) ch k hiu kt thc thuc tp - Xu thng c biu din bng cc ch ci Latinh cui bng vit thng (x, y, z, ...).

* Phn loi Chosmky. - Lp 0: l vn phm ng cu (Phrase Structure) vi cc lut sn xut c dng: -> vi V+, V* - Lp 1: l vn phm cm ng cnh (Context Sensitive) vi cc lut sn xut c dng: -> vi V+, V* , || < || - Lp 2: l vn phm phi ng cnh (Context Free Grammar - CFG ) vi cc lut sn xut c dng: A -> vi A N, V* - Lp 3: l vn phm chnh qui (Regular Grammar) vi lut sn xut c dng: A -> a, A -> Ba hoc A-> a, A-> aB vi A, B N v a TCc lp vn phm c phn loi theo th t phm vi biu din ngn ng gim dn, lp vn phm sau nm trong phm vi ca lp vn phm trc:

Lp 0 Lp 1 Lp 2 Lp 3 2.1.1.3. Vn phm chnh quy v biu thc chnh quy. * Vn phm chnh quy:V d 1: Tn trong ngn ng Pascal l mt t ng u l ch ci, sau c th l khng hoc nhiu ch ci hoc ch s.

Biu din bng BTCQ: tn -> ch_ci (ch_ci | ch_s)* Biu din bng vn phm chnh qui: Tn -> ch_ci A; A -> ch_ci A | ch_s A |

* Biu thc chnh qui c nh ngha trn b ch ci nh sau: - l biu thc chnh quy, biu th cho tp { } - a , a l biu thc chnh quy, biu th cho tp {a} - Gi s r l biu thc chnh quy biu th cho ngn ng L(r), s l biu thc chnh quy, biu th cho ngn ng L(s) th: + (r)|(s) l biu thcchnh quy biu th cho tp ngn ng L(r) L(s) + (r)(s) l biu thc chnh quy biu th cho tp ngn ng L(r)L((s) + (r)* l biu thc chnh quy biu th cho tp ngn ng L(r)* Biu thc chnh quy s dng cc k hiu sau: | l k hiu hoc (hp) () l k hiu dng nhm cc k hiu * l lp li khng hoc nhiu ln + l lp li mt hoc nhiu ln ! l lp li khng hoc mt lnV d 2: Vit biu thc chnh qui v th chuyn biu din cc xu gm cc ch s 0 v 1, trong tn ti t nht mt xu con 11 Biu thc chnh qui: (0|1)*11(0|1)* Biu din biu thc chnh quy di dng th chuyn:0

0|1 1 2 1 0|1 2 0|1 start 0 1 1 2 1 2

start 0

1

0 th chuyn n nh th chuyn khng n nh

2.1.1.3. tmt hu hn. * nh ngha: Mt Otomat hu hn n nh l mt h thng M = (, Q, , q0, F), trong : l mt b ch hu hn, gi l b ch vo Q l mt tp hu hn cc trng thi q0 Q l trng thi u

F Q l tp cc trng thi cui l hm chuyn trng thi c dng: : Q x -> Q th M gi l tmt mt n nh (k hiu H). : Q x -> 2Q th M gi l tmt khng n nh (k hiu HK). * Hnh trng: ca mt OH l mt xu c dng qx vi q Q l trng thi hin thi v x * l phn xu vo cha c on nhn. V d: = {0, 1}; Q = {q0, q1, q2}; q0 l trng thi ban u; F={q2}. Hm chuyn trng thi c m t nh bng sau:(HK)

Q0 Q1 Q2 q0 q2

0 q2 q2

1 q0, q1start q0

0|1 1 q1 1 0|1

q2

th chuyn khng n nh Hm chuyn trng thi H0

0|1 1 q1

Q0 Q1 Q2 q0 q0 q2

0 q1 q2 q2

1

start q0

1

q2

0 th chuyn n nh

2.1.1. Biu din t t bng biu thc chnh quy. * Mt s t t c m t bng li nh sau: - Tn l mt xu bt u bi mt ch ci v theo sau l khng hoc nhiu ch ci hoc ch s - S nguyn bao gm cc ch s - S thc c hai phn: phn nguyn v phn thc l xu cc ch s v hai phn ny cch nhau bi du chm - Cc ton t quan h =, , = * M t cc mu t t trn bng biu thc chnh qui: Tn t t biu thc chnh quy biu din t t . - ch_ci A|B|C||Z|a|b|c||z - ch_s 0|1||2|3|4|5|6|7|8|9

- Tn ch_ci (ch_ci | ch_s)* - S nguyn (ch_s)+ - S thc (ch_s)+.(ch_s) - Ton t quan h: + Ton t b hn (LT): + Ton t b hn hoc bng (LE): + Ton t ln hn (GT): + Ton t ln hn hoc bng (GE): + Ton t bng (EQ): + Ton t khc (NE): 2.1.2. Biu din t t bng th chuyn.ch_ci ch_ci

< >= = ch s ch_s

0

1

2 *

0

1

2 *

ch_s ch_s ch_s ch_s

. 1 2

0

3 *

Ton t quan h:0

NE

4 *

LT

=

EQ

5>

6

=

GE

7

8 *

GT

xy dng mt chng trnh nhn dng tt c cc loi t t ny, chng ta phi kt hp cc th ny thnh mt th duy nht:ch_ci ch_ci

0

1ch_s ch_s ch_s

2 *

tn

ch_s

. 3khc =

5 4 * 8>

6 *s nguyn

s thc

EQ

1 2

=

1 3 14 *

GE

GT

2.1.3. Biu din bi OH Vi v d trn chng ta xy dng tmt vi cc thng s nh sau: Q = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14} F = {2,4,6,10,14} q0 = 0

hm chuyn trng thi c m t bi bng sau: 0 1 3 5 7 12 ch_ci 1 1 4 6 10 14 ch_s 3 1 3 5 10 14 . li 2 5 6 10 14 < 7 2 4 6 10 14 = 11 2 4 6 8 13 > 12 2 4 6 9 14 khc li 2 4 6 10 14

Cc trng thi F l trng thi kt thc Cc trng thi c du * l kt thc tr v k hiu cui cho t t tip theo 2.2. Vit chng trnh cho th chuyn. 2.2.1. Lp b phn tch t vng bng phng php din gii th chuyn. on chng trnh m t vic nhn dng t t bng cch din gii th chuyn. Chng s s dng cc hm sau:. int IsDigit ( int c); // hm kim tra mt k hiu l ch s int IsLetter ( int c); // hm kim tra mt k hiu l ch ci int GetNextChar(); // hm ly k t tip theoenum Token {IDENT, INTEGER, REAL, LT, LE, GT, GE, NE, EQ, ERROR}; // hm ny tr v loi t t // t v nm trong s Token GetNextToken(char *s) { int state=0; int i=0; while(1) { int c=GetNextChar(); switch(state) { case 0: if(IsLetter(c)) state=1;

else if(IsDigit(c)) state=3; else if(c==) state=12; else return ERROR; s[i++]=c; break; case 1: if(IsLetter(c)||IsDigit(c)) state=1; else return ERROR; break; case 2: case 3: s[i]=0; GetBackChar(); return IDENT; if(IsLetter(c)) state=4; else if(IsDigit(c)) state=3; else if(c==.) state=5; else return 4; s[i++]=c; case 4: case 5: break; s[i]=0; GetBackChar(); return INTEGER; if(IsDigit(c)) state=5; else state=6; s[i++]=0; break; case 6: case 7: s[i]=0; GetBackChar(); return REAL; if(c===) state=8; else if(c==>) state=9; else state=10; s[i++]=c; break; case 8: case 9: s[i]=0; return LE; s[i]=0; return NE;

case 10: case 11: case 12:

case 13: case 14: } if(c==0) break; }// end while }// end function

s[i]=0; GetBackChar(); return LE; s[i]=0; return EQ; if(c===) state=13; else state=14; s[i++]=c; break; s[i]=0; return GE; s[i]=0; return GT;

Nhn xt: u im: chng trnh d vit v trc quan i vi s lng cc loi t t l b. Nhc im: gp nhiu kh khn nu s lng loi t t l ln, v khi cn b sung loi t t hoc sa i mu t t th chng ta li phi vit li chng trnh.Ch : Trong thc t khi xy dng b phn tch t vng, chng ta phi nhn dng cc tn trong chng trnh trnh ngun, sau da vo bng lu tr phn bit c th cc t kho i vi cc tn.

2.2.2. Lp b phn tch t vng bng bng. xy dng chng trnh bng phng php ny, iu c bn nht l chng ta phi xy dng bng chuyn trng thi. tng qut, thng tin ca bng chuyn trng thi nn

c lu mt file d liu bn ngoi, nh vy s thun tin cho vic chng ta thay i d liu chuyn trng thi ca tmt m khng cn quan tm n chng trnh. i vi cc trng thi khng phi l trng thi kt thc th chng ta ch cn tra bng mt cch tng qut s bit c trng thi tip theo, v do chng ta ch cn thc hin cc trng hp c th i vi cc trng thi kt thc bit t t cn tr v l g. Gi s ta c hm khi to bng trng thi l: int InitStateTable(); Hm phn loi k hiu u vo (k hiu kt thc): int GetCharType(); Khi on chng trnh s c m t nh di y:#define STATE_NUM 100

#define TERMINAL _NUM 100 #define STATE_ERROR 1 // trng thi li int table[STATE_NUM][TERMINAL_NUM] // ban u gi hm khi to bng chuyn trng thi. InitStateTable(); int GetNextChar(); // hm ly k t tip theo enum Token {IDENT, INTEGER, REAL, LT, LE, GT, GE, NE, EQ, ERROR}; // hm ny tr v loi t t // t v nm trong s Token GetNextToken(char *s) { int state=0; int i=0; while(1) { int c=GetNextChar(); int type=GetCharType(c); switch(state) { case 2: s[i]=0; GetBackChar(); return IDENT; case 4: s[i]=0; GetBackChar(); return INTEGER; case 6: s[i]=0; GetBackChar(); return REAL; case 8: s[i]=0; return LE; case 9: s[i]=0; return NE; case 10: s[i]=0; GetBackChar(); return LE; case 11: s[i]=0; return EQ; case 13: s[i]=0; return GE; case 14: s[i]=0; return GT; case STATE_ERROR: return ERROR; defaulf: state=table[state][type]; s[i++]=c; } if(c==0) break; }// end while }// end function

Nhn xt: u im: + Thch hp vi b phn tch t vng c nhiu trng thi, khi chng trnh s gn hn. + Khi cn cp nht t t mi hoc sa i mu t t th chng ta ch cn thay i trn d liu bn ngoi cho bng chuyn trng thi m khng cn phi sa chng trnh ngun hoc c sa th s rt t i vi cc trng thi kt thc. Nhc im: kho khn cho vic lp bang, kich thc bang nhiu khi la qua ln, va khng trc quan. 3. XC NH LI TRONG PHN TCH T VNG. Ch c rt t li c pht hin trong lc phn tch t vng, v b phn tch t vng ch quan st chng trnh ngun mt cch cc b, khng xt quan h cu trc ca cc t vi nhau.V d: khi b phn tch t vng gp xu fi trong biu thc fi a= b then . . . th b phn tch t vng khng th cho bit rng fi l t vit sai ca t kho if hoc l mt tn khng khai bo. N s nghim nhin coi rng fi l mt tn ng v tr v mt t t tn. Ch li ny ch c pht hin bi b phn tch c php.

Cc li m b phn tch t vng pht hin c l cc li v mt t v khng thuc mt loi t t no, v d nh gp t v 12xyz.B x l li phi t mc ch sau: - Thng bo li mt cch r rng v chnh xc. - Phc hi li mt cch nhanh chng xc nh li tip theo. - Khng lm chm tin trnh ca mt chng trnh ng.

Khi gp nhng li c 2 cch x l: + H thng s ngng hot ng v bo li cho ngi s dng. + B phn tch t vng ghi li cc li v c gng b qua chng h thng tip tc lm vic, nhm pht hin ng thi thm nhiu li khc. Mt khc, n cn c th t sa (hoc cho nhng gi cho nhng t ung i vi t b li). Cch khc phc l: - Xo hoc nhy qua k t m b phn tch t vng khng tm thy t t (panic mode). - Thm k t b thiu. - Thay mt k t sai thnh k t ng.

- Tro 2 k t ng cnh nhau. 4. CC BC XY DNG B PHN TCH T VNG. Cc bc tun t nn tin hnh xy dng c mt b phn tch t vng tt, hot ng chnh xc v d ci tin, bo hnh, bo tr. 1) Xac inh cc lut t t, cc lut ny c m t bng li. 2) V th chuyn cho tng mu mt, trc c th m t bng biu thc chnh qui tin theo di v chnh sa, v d dng cho vic dng th chuyn. 3) Kt hp cc lut ny thnh mt th chuyn duy nht. 4) Chuyn th chuyn thnh bng. 5) Xy dng chng trnh. 6) B sung thm phn bo li thnh b phn tch t vng hon chnh.

Bai tp 1. Phn tch cc chng trnh pascal v C sau thnh cc t t v thuc tnh tng ng.a) pascal:Function max(i,j:integer): Integer; {Tr li s lon nht trong 2 s nguyn i, j } Begin If i>j then max:=i; Else max:=j; End;

B) C:Int max(int i, int j)/* Tr li s lon nht trong 2 s nguyn i, j*/

{return i>j?i:j;}

Hy cho bit c bao nhiu t t c a ra v chia thnh bao nhiu loi?

2. Phn tch cc chng trnh pascal v c sau thnh cc t t v thuc tnh tng ng.a) pascalvar i,j; begin for i= 0 to 100 do j=i; write(i=, j:=,j); end;

B) C:Int i,j: Main(void {

for (i=0; i=100;i++) printf(i=%d;,i,j=%d,j= =i); }

3. M t cc ngn ng ch nh bi cc biu thc chnh quy sau: a. 0(0|1)*0 b.(( |0)1*)* 4. Vit biu thc chnh quy cho: tn, s nguyn, s thc, char, string trong pascal. Xy dng th chuyn cho chng. Sau , kt hp chng thnh th chuyn duy nht. 5. Dng th chuyn cho cc m t di y. a. Tt c cc xu ch ci c 6 nguyn m a, e, i, o, u, y theo th t. V d: abeiptowwrungfhy b. tt c cc xu s khng c mt s no b lp. c. tt c cc xu s c t nht mt s no b lp. d. tt c cc xu gm 0,1, khng cha xu con 011.

Bai tp thc hanhBi 1: Xy dng b phn tch t vng cho ngn ng pascal chun. Bi 2: Xy dng b phn tch t vng cho ngn ng C chun.

CHNG 3

PHN TCH C PHP V CC PHNG PHP PHN TCH C BN.1. MC CH. Phn tch c php nhn u vo l danh sch cc t t ca chng trnh ngun thnh cc thnh phn theo vn phm v biu din cu trc ny bng cy phn tch hoc theo mt cu trc no tng ng vi cy.Chng trnh ngun yu cu t t

Phn tch t vng t t

Phn tch c php

Phn tch ng ngha

Bng k hiu

B phn tch c php nhn chui cc token t b phn tch t vng v to ra cy phn tch c php. Trong thc t cn mt s nhim v thu nhp thng tin v token vo bng k hiu, thc hin kim tra kiu v phn tch ng ngha cng nh sinh m trung gian. Cc phn ny s c trnh by trong cc chng k. 2. HOT NG CA B PHN TCH. 2.1.Vn phm phi ng cnh. 2.1.1. nh ngha. * nh ngha: Vn phm PNC (nh trn). * Dng BNF (Backus Naur Form) ca vn phm phi ng cnh + Cc k t vit hoa: biu din k hiu khng kt thc, (c th thay bng mt xu t trong du ngoc < > hoc mt t in nghing). + Cc k t vit ch nh v du ton hc: biu din cc k hiu kt thc (c th thay bng mt xu t trong cp du nhy kp hoc mt t in m). + k hiu -> hoc = l: k hiu ch phm tr c php v tri c gii thch bi v phi. + k hiu | ch s la chn.V d: hoc = | | ( ) TonHng -> Tn | S | ( BiuThc

2.1.2. th chuyn biu din vn phm phi ng cnh: - Cc vng trn vi k hiu bn trong biu th cho trng thi. Cc ch trn cc cung biu th cho k hiu vo tip theo. Trng thi v bng mt vng trn kp l trng thi kt thc. Nu trng thi kt thc c du * ngha l k hiu cui khng thuc xu on nhn. 2.1.3. Cy suy dn. 2.1.3.1. Suy dn. Cho vn phm G=(T,N,P,S). - Suy dn trc tip l mt quan h hai ngi k hiu => trn tp V* nu l mt xu thuc V* v -> l mt sn xut trong P, th => . k k - Suy dn k bc, k hiu l = hay = > nu tn ti dy 0, 1, . . . , k sao > cho: = 0 => 1 => . . . => k = * - Xu suy dn xu nu k>=0 v k hiu l => - Xu suy dn khng tm thng xu nu k>0 v k hiu l = > 2.1.3.2. Cy phn tch (cy suy dn) * nh ngha: Cy phn tch trong mt vn phm phi ng cnh G = (T,N,P,S) l mt cy tha mn cc iu kin sau: 1. Mi nt c mt nhn, l mt k hiu trong (T N {}) 2. Nhn ca gc l S 3. Nu mt nt c nhn X l mt nt trong th X N Nu nt n c nhn X v cc nt con ca n theo th t tri qua phi c nhn Y1, Y2, . . ., Yk th X->Y1Y2 . . . Yk s l mt sn xut P4. 5.+

chu cai Start chu cai khac

0

1

2 *

chu cai

Hnh 2.1: th chuyn cho t t Tn

Nt l c nhn thuc T hoc l

* Suy dn tri nht (ni gn l suy dn tri), nu mi bc suy dn, bin c thay th l bin nm bn tri nht trong dng cu. * Suy dn phi nht: (ni gn l suy dn phi), nu mi bc suy dn, bin c thay th l bin nm bn phi nht trong dng cu. 2.1.3.3. qui

* nh ngha: K hiu khng kt thc A ca vn phm gi l qui nu tn + + ti: A => A vi , V

Nu = th A gi l qui Nu = th A gi l qui Nu , th A gi l qui

tri.

phi.

trong. * C 2 loi d quy tri : Loi ttrc tip: c dng A A ( A + A ) Loi gin tip: Gy ra do nhiu bc suy dn. (V d: S Aa | b; AAc | Sd; S l qui tri v S Aa Sda) * Loi b qui tri: (loi b suy dn A =>+ A ) - Gi s c lut qui tri A->A | chng ta thay cc lut ny bng cc lut: A -> A A -> A | - Tng qut ho ln ta c: Nu c cc lut qui tri: A -> A 1 | A 2 | . . .| A m | 1 | 2 | . . .| n trong khng i no bt u bng mt A . Thay cc sn xut ny bi cc sn xut: A -> 1A | 2A | . . . | nA A -> 1A | 2A | . . . | mA | V d2: Xt vn phm biu thc s hc sau: E -> E + T | T ; T -> T * F | F; F -> ( E ) | id Loi b qui tri trc tip cho cc sn xut ca E ri ca T, ta c vn phm mi khng cn sn xut c qui tri nh sau: E -> TE; E-> +TE | ; T -> FT; T -> *FT | ;

F -> (E) | idQui tc ny loi b c qui tri trc tip nm trong cc sn xut nhng khng loi b c qui tri nm trong cc dn xut c hai hoc nhiu bc. Qui tc ny cng khng loi b c qui tri ra khi sn xut A->A.

Vi qui tri gin tip v ni chung l qui tri, ta s dng gii thut sau: Input: Vn phm khng tun hon hoc e_sx (khng c dng A+A hoc Ae) 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 Aj d 1g | d 2g |.. .. |d kg Trong Aj d1g | d2g |.. .. |dky l cc lut sinh hin ti End Loi b qui tri trc tip trong s cc Ai loi End;V d : Vi S Aa | b; AAc | Sd. Sp xp cc k hiu cha kt thc theo th t S,A.. Vi i=1, khng c qui tri trc tip nn khng c iu g xy ra. vi i=2 , thay lut sinh ASd c AAc | Aad | bd. Loi b qui tri trc tip cho A, ta c: SAa |b; AbdA'; A' cA' | adA' | e

* Php tha s ho tri Tha s ho tri (left factoring) l mt php bin i vn phm nhm sinh ra mt vn phm thch hp cho vic phn tch c php khng quay lui. tng c bn l khi khng r sn xut no trong trong hai sn xut c cng v tri l A c dng khai trin A th ta c th vit li cc sn xut ny nhm hon li quyt nh, cho n khi c thng tin a ra c quyt nh la chn sn xut no. - Nu c hai sn xut A -> 1 | 2 th ta khng bit phi khai trin A theo 1 hay 2. Khi , thay hai sn xut ny bng:

A -> A;

A -> 1 |

2

V d: S -> iEtS | iEtSeS | a;

E -> b

Khi c tha s ho tri, vn phm ny tr thnh: S -> iEtSS | a; S -> eS | ; E -> bv th khi cn khai trin S vi k hiu xu vo hin ti l i, chng ta c th la chn iEtSS m khng phi bn khon gia iEtS v iEtSeS ca vn phm c.

Gii thut to tha s ho tri (yu t tri) cho mt vn phm: Input: Vn phm G Output: Vn phm tng ng vi nhn 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 a l chui c di ln nht chung cho tt c cc v phi (a l nhn t tri) Gi s A ab1| ab2|.. .. | abn | g Trong g khng c chui dn u chung vi cc v phi khc. Bin i lut sinh thnh A a A' | g A' b 1| b 2 | .. .. | b n

2.1.3.4. Nhp nhng Mt vn phm G c gi l vn phm nhp nhng nu c mt xu l kt qu ca hai cy suy dn khc nhau trong G. Ngn ng do vn phm ny sinh ra gi l ngn ng nhp nhng.V d: Xt vn phm G cho bi cc sn xut sau: S -> S + S | S * S | ( S ) | a Vi xu vo l w = a+a*a ta c: Vn phm ny l nhp nhng v c hai cy i vi cu vo w nh sau: S S S

S

*

S

+

S

S

+

S

a

a

S

*

S

a

a

a

a

Chng ta c v d i suy dn tri (i vi cy u tin) l: S => S * S => S + S => S + S * S => a + S * S => a + a * S => a + a * a suy dn phi (i vi cy u tin ) l: S => S * S => S * a => S + S * a => S + a * a => a + a * a.

2.2. cc phng php phn tch.- Mi ngn ng lp trnh u c cc lut m t cc cu trc c php. Mt chng trnh vit ng phi tun theo cc lut m t ny. Phn tch c php l tm ra cu trc da trn vn phm ca mt chng trnh ngun. - Thng thng c hai chin lc phn tch:

+ Phn tch trn xung (topdown): Cho mt vn phm PNC G = ( , , P, S) v mt cu cn phn tch w. Xut pht t S p dng cc suy dn tri, tin t tri qua phi th to ra cu w. + Phn tch di ln (bottom-up): Cho mt vn phm PNC G = ( , , P, S) v mt cu cn phn tch w. Xut pht t cu w p dng thu gn cc suy dn phi, tin hnh t tri qua phi i ti k hiu u S.Theo cch ny th phn tch Topdown v LL(k) l phn tch trn xung, phn tch Bottomup v phn tch LR(k) l phn tch di ln.

* iu kin thut ton dng: + Phn tch trn xung dng khi v ch khi G kng c quy tri. + Phn tch di ln dng khi G khng cha suy dn A + A v sn xut A .* C cc phng php phn tch. 1) Phng php phn tch topdown. 2) Phng php phn tch bottom up. 3) Phng php phn tch bng CYK. 4) Phng php phn tch LL. 5) Phng php phn tch LR.Phng php 1 v 2: l cc phng php c bn, km hiu qu. Phng php 5,6 l phng php phn tch hiu qu.

2.3.1. phn tch topdown.

Phng php phn tch Top-down xy dng cy phn tch cho mt xu vo bng cch xut pht t k hiu bt u lm gc v s dng cc lut sn xut i t gc n l. - nh du th t cc la chn ca cc sn xut c cng v tri. V d nu cc sn xut c dng S -> aSbS | aS | c th aSbS l la chn th nht, aS l la chn th hai v c l la chn th ba trong vic khai trin S. - Ti mi bc suy din, ta cn trin khai mt k hiu khng kt thc A v vn phm c cc sn xut c v tri l A l A-> 1 | 2 | . . .| k Khi ta c k th t la chn, nh du th t la chn cc sn xut sau khai trin A theo mt la chn, nu qu trnh phn tch l khng thnh cng th quay lui ti v tr ny v khai trin A theo la chn tip theo. Phn tch Top-down l phng php phn tch c quay lui v to ra suy dn tri nht.

V d: Cho vn phm S -> aSbS | aS | c Hy phn tch xu vo aacbc bng thut ton Top-down, v cy phn tch trong qu trnh phn tch quay lui.S a S S

a

S

b

S a

b

S

S

b

S

a

S

b

S

a *

S

b S

S

(1)

a *

S

(2)

S a S b S

a

S

b

S a

a

S

b

S

S

b

S

(4)S

c c a * S b S

a *

(3)

S

S

a

S

b

S

a

S

b

S

a

S

b

S a *

a

S

(6)b S

c

c *

S

(5)

S a S S a * S b S

a

(7)

S S a a S b S a S a S a c S a S * b b S c c S S S b S

a

S

a *

(8)S

c

(9)

10

2.3.1.1. M t thut ton phn tch Top-down

- Input: Vn phm PNC G = ( , , P, S) khng quy tri, xu w = a1, a2, an - Output: Cy phn tch t trn xung ca xu w (w L(G)), bo li (w L(G)). - Method: Dng mt con tr ch n xu vo w. K hiu trn xu vo do con tr ch n gi l k hiu vo hin ti. 1) Khi to cy vi gc l S, con tr tr n k hiu u tin ca xu w l a1. 2) Nu nt ang xt (l k hiu khng kt thc) A th chn sn xut c v tri l A trong P, gi s sn xut A X1...Xk . + Nu k > 0: ly nt X1 lm nt ang xt. + Nu k=0 (sn xut rng) th ly nt ngay bn phi A lm nt ang xt. 3) Nu nt ang xt (l k hiu kt thc) a th i snh a vi k hiu vo hin ti. + Nu trng nhau: th ly nt ngay bn phi a lm nt ang xt, con tr dch sang bn phi mt k hiu trn xu w. + Nu khng: quay li nt trc v lp li b2 vi th la chn tip theo. Th tc trn lp li sau hu hn bc v c 2 kh nng xy ra: - Nu gp trng hp i snh ht xu vo v cy khng cn nt no cha xt na th ta c mt cy phn tch. - Nu quay lui ht tt c cc trng hp m khng sinh c cy phn tch th kt lun xu vo khng phn tch c bi vn phm cho.

* iu kin mt vn phm phi ng cnh phn tch c bi thut ton Topdown l vn phm khng c qui tri. (V vy ta phi thc hin loi b quy tri trckhi phn tch vn phm theo phng php topdown)

* phc tp thut ton l hm s m n vi n l di xu vo. 2.3.2. phn ttch bottom - up.Phng php phn tch Bottom-up v t tng l ngc li vi phng php Top-down.

- Xy dng c php cho xu nhp bt u t l ln ti gc. y l qu trnh rt gn mt xu thnh mt k hiu m u ca vn phm. Ti mi bc rt gn, mt xu con bng mt xu phi ca mt sn xut no th xu con ny c thay th bi v tri ca sn xut . (cn gi l phng php gt thu gn - shift reduce parsing).C 2 vn : xc nh handle v chn lut sinh.

* Cu to: - 1 STACK lu cc k hiu vn phm. - 1 BUFFER INPUT gi chui cn phn tch w. - Dng $ nh du y stack v cui chui nhp. * Hot ng: - Khi u th stack rng v w nm trong input buffer. B phn tch gt ln lt cc k hiu u vo t tri sang phi vo ngn xp n khi not c mt thu gn th thu gn (thay th v phi xut hin trn nh ngn xp bi v tri ca sn xut ).Nu c nhiu cch thu gn ti mt trng thi th lu li cho qu

trnh quay lui. Qu trnh c tip tc, nu dng li m cha t n trng thi kt thc th quay li ti bc quay lui gn nht. - Nu qu trnh t n trng thi ngn xp l $S v xu vo l $ th qu trnh kt thc v phn tch thnh cng. - Nu xt ht tt c cc trng hp, tc l khng quay lui c na m cha t n trng thi kt thc th dng li v thng bo xu vo khng phn tch c bi vn phm cho.V d: S -> aABe; A -> Abc | b; B -> d; qu trnh phn tch Bottom-up nh sau:Ngn xp $ $a $ab $aA $aAb u vo abbcde$ bbcde$ bcde$ bcde$ cde$

Phn tch cu vo abbcde

Hnh ng gt gt thu gn A -> b gt thu gn A -> b (2)

$aAA $aAAc $aAAcd $aAAcB $aAAcBe $aAAcde $aAbc $aA $aAd $aAB $aABe $S

cde$ de$ e$ e$ $ $ de$ de$ e$ e$ $ $

gt gt thu gn B -> d (1) gt dng, quay lui 1 (gt) dng, quay lui 2 (gt) thu gn A -> Abc gt thu gn B -> d gt thu gn S -> aABe chp nhn A A*

V cy cho qu trnh phn tch v quay lui trn, chng ta c kt qu nh sau:A A B * a a b b c d e S Qu trnh 2 b b c d e

Qu trnh 1

A

A

B

a

b

b

c

d

e

(2c) Qu trnh 3 Qu trnh suy dn cng c th c vit li nh sau: Abbcde => aAbcde (A -> b) => aAde (A -> Abc) => aABe (B -> d) => S (S -> aABe) Nu vit ngc li chng ta s c dn xut phi nht: S =>rm aABe =>rm aAde =>rm aAbcde =>rm abbcde

- Qu trnh phn tch Bottom-up l qu trnh sinh dn sut phi nht

- Phn tch Bottom-up khng phn tch c vn phm c cc sn xut B-> hoc c suy dnA =>+ A * Handle ca mt chui Handle ca mt chui l mt chui con ca n v l v phi ca mt sn xut trong php thu gn n thnh k hiu v tri ca 1 sn xut. V d: Trong v d trn.Ngn xp $ $a $ab $aA $aAb $aAA $aAAc $aAAcd $aAAcB $aAAcBe $aAAcde $aAbc $aA $aAd $aAB $aABe $S u vo abbcde$ bbcde$ bcde$ bcde$ cde$ cde$ de$ e$ e$ $ $ de$ de$ e$ e$ $ $ Hnh ng gt gt thu gn A -> b gt thu gn A -> b (2) gt gt thu gn B -> d (1) gt dng, quay lui 1 (gt) dng, quay lui 2 (gt) thu gn A -> Abc gt thu gn B -> d gt thu gn S -> aABe chp nhn Handle Suy dn phi abbcde abbcde aAbcde aAbcde Tin t kh tn a ab aA aAb

b b

d khng phi l handle do p dng thu gn ny l khng thnh cng

Abc d

AAbcde AAde

Ch Handle l chui m chui phi l mt kt qu ca suy dn phi t S v php thu gn xy ra trong suy dn .ai ai+1...

an

$

Sn xut A ->

W = a1a2... an

Stack

Trn ngn xp cha xu y = , l v phi ca mt sn xut c b phn tch p dng thu gn v bc thu gn ny phi dn n qu trnh phn tch thnh cng th l handle ca chui v (v l phn chui cn li trn input buffer).

Vy nu S =>*rm Aw =>rm w th l handle ca suy dn phi w

Trong vic s dng ngn xp phn tch c php gt thu gn, handle lun lun xut hin trn nh ca ngn xp. * Tin t kh tn (viable prefixes) Xu k hiu trong ngn xp ti mi thi im ca mt qu trnh phn tch gt thu gn l mt tin t kh tn.V d: ti mt thi im trong ngn xp c d liu l v xu vo cn li l w th

w l mt dng cu dn phi v l mt tin t kh tn.

2.3.2.Phn tch LL. T tng ca phng php phn tch LL l khi ta trin khai mt k hiu khng kt thc, la chn cn thn cc sn xut nh th no trnh vic quay lui mt thi gian.Tc l phi c mt cch no xc nh dc ngay la chn ng m khngphi th cc la chn khc. Thng tin xc nh la chn da vo nhng g bit trng thi v k hiu kt thc hin ti.

LL: l mt trong cc phng php phn tch hiu qu, n cng thuc chin lc phn tch topdown nhng n hiu qu ch n l phng php phn tch khng quay lui. - B phn tch tt nh: Cc thut ton phn tch c c im chung l xu vo c qut t tri sang phi v qu trnh phn tch l hon ton xc nh, do ta gi l b phn tch tt nh. (Phn tch topdown v bottom up c phi l phn tch tt nh khng? khng do qu trnh phn tch l khng xc nh).L: left to right ( qut t phi qua tri ) L : leftmosst derivation (suy dn tri nht) ; k l s k hiu nhn trc a ra quyt nh phn tch. Gi s k hiu khng kt thc A c cc sn xut: A -> 1 | 2 | . . . | n tho mn tnh ch:t cc xu 1, 2, . . ., n suy dn ra cc xu vi k hiu ti v tr u tin l cc k hiu kt thc khc nhau, khi chng ta ch cn nhn vo k hiu u vo tip theo s xc nh c cn khai trin A theo i no. Nu cn ti k k hiu u tin th mi phn bit c cc xu 1, 2, . . ., n th khi chn lut sn xut no cho khai trin A chng ta cn nhn k k hiu u vo tip theo.

Vn phm LL(k) l vn phm cho php xy dng b phn tch lm vic tt nh nu b phn tch ny c php nhn k k hiu vo nm ngay bn phi ca v tr vo hin ti.

Ngn ng sinh ra bi vn phm LL(k) l ngn ng LL(k). Thng thng chngta xt vi k=1.

2.3.2.1. First v follow. * First ca mt xu:First( ) cho chng ta bit xu c th suy dn n tn cng thnh mt xu bt u bng k hiu kt thc no.

nh ngha First( ) First( ) l tp cha tt c cc k hiu kt thc a m a c th l bt u ca mt xu c suy dn t + First( ) = {a T | =>* a } + First( ) nu =>* Thut ton tnh First(X) vi X l mt k hiu vn phm: 1. nu X l k hiu kt thc th First(X) = {X} 2. nu X -> l mt sn xut th thm vo First(X) 3. nu X -> Y1...Yk l mt sn xut th thm First(Y1) vo First(X) tr nu First(Yt) cha vi mi t=1,...,i vi i aA | ; B -> bB | First(S) = {a,b, } Hy tnh First ca cc k hiu S, A, B Fisrt(A) = {a, }; First(B) = {b, };

* Follow ca mt k hiu khng kt thc: nh ngha follow(A) A l k hiu khng kt thc. Follow(A) vi A l k hiu khng kt thc l tp cc k hiu kt thc a m chng c th xut hin ngay bn phi ca A trong mt s dng cu. Nu A l k hiu bn phi nht trong mt s dng cu th thm $ vo Follow(A). + Follow(A) = {aT | S =>* Aa } + $ Follow(A) khi v ch khi tn ti suy dn S =>* A Thut ton tnh Follow(A) vi A l mt k hiu khng kt thc 1. thm $ vo Follow(S) vi S l k hiu bt u ( ch l nu ta xt mt tpcon vi mt k hiu E no lm k hiu bt u th cng thm $ vo Follow(E)).

nu c mt sn xut dng B-> A v trong First( ) tr vo Follow(A).2. tn ti S =>* 1B 3.1

th thm cc phn t

tht vy: nu a First( ) th tn ti =>*a , khi , do c lut B-> A nn => 1 A 1=> 1 Aa 1

Theo nh ngha ca Follow

th ta c a Follow(A)

nu c mt sn xut dng B-> A hoc B-> A vi First(B) th mi phn t thuc Follow(B) cng thuc Follow(A)tht vy: nu a Follow(B) th theo nh ngha Follow ta c S =>* 1Ba1

=>*

1 Aa 1 , suy ra a Follow(A)

- tnh Follow ca cc k hiu khng kt thc: ln lt xt tt c cc sn xut. Ti mi sn xut, p dng cc qui tc trong thut ton tnh Follow thm cc k hiu vo cc tp Follow . Lp li v dng khi no gp mt lt duyt m khng b sung c k hiu no vo cc tp Follow.V d trn, ta tnh c tp Follow cho cc k hiu S, A, B nh sau: Follow(S) = {$}V d2: Vi vn phm E T E'; E' + T E' | ; T F T'; T' * F T' | ; F (E) | id Theo nh ngha FIRST V F E) FIRST(F) = {(, id} F (id) T T F T' v ( ( FIRST(F) ( FIRST(T)= FIRST(F) T E T E' v ( ( FIRST(T) ( FIRST(E)= FIRST(T) V E' FIRST(E')

Follow(A) = {b,$} Follow(B) = {}

Mt khc do E' ( +T E' m FIRST(+)={ +} ( FIRST(E')= {+, (} Tng t FIRST(T')= { *, (} Vy ta c FIRST(E)= FIRST(T)= FIRST(F)= { (, id} FIRST(E')= {+, } FIRST(T')= { *, } Tnh follow : t $ vo trong FOLLOW(E). 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 ETE' mi phn t # ca FIRST(E') tc + (FOLLOW(T). p dng lut 3 cho E' E' +TE' , E' FOLLOW(E') FOLLOW(T) FOLLOW(T) = { +, , $ }. Ap dng lut 3 cho TFT' th FOLLOW(T') =FOLLOW(T)={+, $, }. Ap dng lut 2 cho T FT' * FOLLOW(F) Ap dng lut 3 cho T' * F T' ;T FOLLOW(F)= { *, +, $, )} Vy ta c FOLLOW(E)= FOLLOW(E') = { $, )} FOLLOW(T)= FOLLOW(T') = { +,$, )}'

th FOLLOW(T') ( FOLLOW(F)th

FOLLOW(F)= {*,+, $, )} 2.3.2.2. lp bng phn tch LL(1). Bng phn tch LL(1) l mt mng hai chiu: Mt chiu cha cc k hiu khng kt thc, chiu cn li cha cc k hiu kt thc v $. V tr M(A,a) cha sn xut A-> trong bng ch dn cho ta bit rng khi cn khai trin k hiu khng kt thc A vi k hiu u vo hin ti l a th p dng sn xut A-> . Thut ton xy dng bng LL(1): Input: Vn phm G. Output: Bng phn tch M. Phng php: 1. vi mi sn xut A-> , thc hin bc 2 v bc 3 2. vi mi k hiu kt thc a First( ), nh ngha mc M(A,a) l A>

First( ) v vi mi b Follow(A) th nh ngha mc M(A,b) l A-> (nu First( ) v $ Follow(A) th thm A-> vo M[A,$]) t tt c cc v tr cha c nh ngha trong bng l li.V d: E T E'; E' + T E' | ; id Tnh FIRST(TE') = FIRST(T) = {(,id} ( M[E,id] v M[E,( ] T F T'; T' * F T' | ; F (E) |

3. nu

K t cha kt thcE E' T T' F

K t kt thcId E TE' E +TE' T FT' T' F id T' +FT' F (E) T FT' T' T' + * ( E TE' E E' ) $

Xt lut sinh E TE' cha lut sinh E TE' Xt lut sinh E'+ TE' Tnh FIRST(+TE') = FIRST(+) = {+} ( M[E',+] cha E'+TE' Lut sinh E' v FIRST(() = FIRST(() FOLLOW(E') = { ), $} ( E nm trong M[E',)] v M[E',$] Lut sinh TFT' : FIRST(FT') = {*} Lut sinh T' : FIRST( ) v FOLLOW(T')= {+, ), $} Lut sinh F (E) ; FIRST(((E)) = {(} Lut sinh F id ; FIRST(id)={id}

2.3.2.3. vn phm LL (k) v LL (1) Gii thut trn c th p dng bt k vn phm G no sinh ra bng phn tch M. Tuy nhin c nhng vn phm ( quy tri v nhp nhng) th trong bng phn tch M c nhng cha nhiuhn mt lut sinh. V d: Vn phm S iEtSS | aS eS | K t cha kt thc

b

A

B

K t kt thc e i

t

$

S S' E

S a S E b

S iEtSS' S'

* nh ngha: Vn phm LL(1) l vn phm xy dng c bng phn tch M c cc ch c nh ngha nhiu nht l mt ln. * iu kin mt vn phm l LL(1) - kim tra vn phm c phi l vn phm LL(1) hay khng ta lp bng phn tch LL(1) cho vn phm . Nu c mc no trong bng c nh ngha nhiu hn mt ln th vn phm khng phi l LL(1), nu tri li th vn phm l LL(1). - Cch khc l da vo nh ngha, mt vn phm l LL(1) phi tho mn iu kin sau: nu A -> | l hai sn xut ca vn phm th phi tho mn: a) khng tn ti mt k hiu kt thc a m a First( ) v a First( ) b) khng th ng thi thuc First( ) v First( ). c) Nu First( ) th Follow(A) v First( ) khng c phn t no trng nhau. 2.3.2.4. Thut ton phn tch LL(1) * M t: C s ca phn tch LL l da trn phng php phn tch topdown v my tmt y xung.

- Vng m cha xu vo vi cui xu l k hiu kt thc xu $.

- Ngn xp cha cc k hiu vn phm th hin qu trnh phn tch. y ngn xp k hiu $. - Bng phn tch M l mt mng hai chiu M[A,a], trong A l k hiu cha kt thc, a l k hiu kt thc hoc $. - Thnh phn chnh iu khin phn tch. M hnh ca phn tch c php LL Ti thi im hin ti, gi s X l k hiu trn nh ngn xp v a l k hiu u vo. Cc hnh ng iu khin c thc hin nh sau: 1. nu X = a = $, qu trnh phn tch thnh cng 2. nu X = a $, ly X ra khi ngn xp v dch con tr u vo n k hiu tip theo 3. nu X l mt k hiu khng kt thc, xt mc M(X,a) trong bng phn tch. C hai trng hp xy ra: a) nu M(A,a) = X -> Y1. . .Yk th ly X ra khi ngn xp v y vo ngn xp Y1, . . ., Yk theo th t ngc li ( k hiu c phn tch tip theo trn nh ngn xp phi l Y1, to ra dn xut tri). b) nu M(A,a) l li th qu trnh phn tch gp li v gi b khi phc li. * Thut ton : - Input: Mt xu w v mt bng phn tch M ca vn phm G. - Output: a ra suy dn tri nht ca w nu w L(G), bo li nu w L(G). - Method: trng thi kh u ngn xp c t cc k hiu $S (S l nh ca cy phn tch cn xu vo l w$ ) t con tr ip tr n k t u tin ca xu w$ Repeat {Gi s X l k hiu nh ca ngn xp, a l k hiu vo tip theo} If (X ) or (X = $) then If x=a then Pop X t nh ngn xp v loi b a khi xu vo Else error (); Else {X khng phi l k t kt thc}

If M[X,a] = X Y1, Y2, Yk then Begin Pop X t ngn xp; Push Yk, Yk-1, Y1 vo ngn xp, vi Y1 nh; a ra sn xut X Y1, Y2, Yk ; End; Else Error(); Until X = $ {ngn xp rng}

V d 2: Cho vn phm: E->TE; E->+TE | ; T->FT; T->*FT | ; F>(E) | ida) b) c) d) tnh First v Follow cho cc k hiu khng kt thc. tnh First cho v phi ca cc sn xut. xy dng bng phn tch LL(1) cho vn phm trn phn tch LL i vi xu vo id+id*id

K hiu vn phm E E T T F Sn xut E->TE E->+TE T->FT T->*FT F->(E) F->id Bng phn tch LL(1)

First (, id +, (, id *, (, id First ca v phi (, id + (, id * ( Id

Follow ), $ ), $ +, ), $ +, ), $ +, *, ), $

K hiu V tri E E T T F

Id E->TE T->FT

+ E->+TE

K hiu u vo * ( E->TE T->FT

) E->

$ E-> T->

T-> F->id

T->*FT F->(E)

T->

Phn tch LL(1) cho xu vo id+id*id: Ngn xp $E $ET $ETF $ETid $ET $E $ET+ $ET $ETF $ETid $ET $ETF* $ETF $ETid $ET $E $ Xu vo 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$ $ $ $ u ra E->TE T->FT F->id rt gn id T-> E->+TE rt gn + T->FT F->id rt gn id T->*FT rt gn * F->id rt gn id T-> E->

T bng phn tch, chng ta c suy dn tri nh sau: E=>TE=>FTE=>idTE=>idE=>id+TE=>id+FTE=>id+idTE=>id+id *FTE=> id+id*idTE=>id+id*idE=>id=id*id .

2.3.4. Phn tch LR.LR l k thut phn tch c php t di ln kh hiu qu, c th c s dng phn tch mt lp kh ln cc vn phm phi ng cnh. K thut ny gi l phn tch c php LR(k), trong : - L l Left to right ch vic qut xu vo t tri qu phi. - R l Right most parsing ch vic suy dn sinh ra l suy dn phi. - k l s k hiu nhn trc a ra quyt nh phn tch. * Phn tch LR c nhiu u im: - Nhn bit c tt c cc cu trc ca ngn ng lp trnh c to ra da theo cc vn phm phi ng cnh. - LR l phng php phn tch c php gt - thu gn khng quay lui tng qut nht c bit n nhng li c th c ci t hiu qu nh nhng phng php gt - thu gn khc. - lp vn phm phn tch c nh phng php LR l mt tp bao hm thc s ca lp vn phm phn tch c bng cch phn tch c php d on. - Pht hin c li c php ngay khi c th trong qu trnh qut u vo t tri sang. * Nhc im ch yu: ta phi thc hin qu nhiu cng vic xy dng c b phn tch LR cho mt ngn ng lp trnh.

2.3.4.1. Thut ton phn tch LR.Phn tch LR l mt th phn tch c php gt - thu gn, nhng im khc bit so vi phn tch Bottom-up l n khng quay lui. Ti mi thi im n xc nh c duy nht hnh ng gt hay thu gn.

* M hnh: gm cc thnh phn sau: - 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 $) * Hot ng: 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 $) 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 phn tch c php LRInput: 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: Cho vn phm:

(1) E -> E + T (3) T -> T * F (5) F -> ( E )

(2) E -> T (4) T -> F (6) F -> a

Gi s chng ta xy dng c bng phn tch action v goto nh sau:ch : cc gi tr trong action c k hiu nh sau: a) si c ngha l shift i b) rj c ngha l reduce theo lut (j) c) acc c ngha l accept d) khong trng biu th li trng thi 0 1 2 3 4 5 6 7 8 9 10 11

Actiona s5 + s6 r2 r4 s5 r6 s5 s5 s6 r1 r3 r5 s7 r3 r5 r6 S4 S4 s11 r1 r3 r5 r1 r3 r5 * s7 r4 S4 r6 r6 9 ( S4 ) r2 r4 $ acc r2 r4 8 2 E 1

goto T 2 F 3

3 3 10

Bng phn tch c php

Chng ta s dng thut ton LR phn tch xu vo a*a+a i vi d liu trn nh sau:Ngn xp 0 0 id 5 0F3 0T2 0T2*7 0 T 2 * 7 id 5 0 T 2 * 7 F 10 0T2 0E1 0E1+6 0 E 1 + 6 id 5 0E1+6F3 u vo id * id + id $ * id + id $ * id + id $ * id + id $ id + id $ + id $ + id $ + id $ + id $ id $ $ $ Hnh ng gt thu gn F->id thu gn T->F gt gt thu gn F->id thu gn T->T*F thu gn E->T gt gt thu gn F->id thu gn T->F

0E1+6T9 0E1

$ $

thu gn E->E+T chp nhn (accepted)

Qu trnh phn tch LR

Mt s c im ca phn tch LR:- Mt tnh cht c bn i vi b phn tch c pht LR l xc nh c khi no handle xut hin trn nh ngn xp. - K hiu trng thi trn nh ngn xp xc nh mi thng tin ca qu trnh phn tch v n ch n tp mc c ngha ca tin t kh tn trong ngn xp. Da vo cc mc ny, chng ta c th xc nh khi no th gp mt handle trn nh ngn xp v thc hin hnh ng thu gn. - Mt ngun thng tin khc xc nh hnh ng gt-thu gn l k k hiu u vo tip theo. Thng thn chng ta xt k=0 hoc 1. - im khc bit gia phng php phn tch LR vi phng php phn tch LL l: cho mt vn phm l LR(k), chng ta phi c kh nng xc nh c s xut hin ca v phi ca mt sn xut khi thy tt c qu trnh dn xut t v phi vi thng tin thm l k k hiu u vo tip theo. iu kin ny r rng l chnh xc hn so vi iu kin ca vn phm LL(k) l vic s dng mt sn xut ch da vo k k hiu u vo tip theo. Chnh v vy m qu trnh phn tch LR t c xung t hn, hay ni cch khc l vn phm ca n rng hn LL rt nhiu.

2.3.4.2. Mt s khi nim. 1) Tin t kh tn (viable prefixes) Xu k hiu trong ngn xp ti mi thi im ca mt qu trnh phn tch gt thu gn l mt tin t kh tn.V d: ti mt thi im trong ngn xp c d liu l v xu vo cn li l w th

w l mt dng cu dn phi v l mt tin t kh tn.

2) Mc (Item) : Cho mt vn phm G. Vi mi sn xut A->xy, ta chn du chm vo to thnh A->x .y v gi kt qu ny l mt mc. Mc A->x.y cho bit qa trnh suy dn s dng sn xut A->xy v suy dn n ht phn x trong sn xut, qu trnh suy dn tip theo i vi phn xu vo cn li s bt u t y. V d: Lut sinh A ( XYZ c 4 mc nh sau : A XYZ A XYZ A XYZ A XYZ Lut sinh A ch to ra mt mc A 3) Mc c ngha (valid item) Mt mc A-> 1. 2 gi l mc c ngha(valid item) i vi tin t kh tn 1 nu tn ti mt dn xut: S =>*rm Aw =>rm 1 2w

Tp tt c cc mc c ngha i vi tin t kh tn gi l tp I.Mt tp mc c ngha i vi mt tin t kh tn ni ln rt nhiu iu trong qu trnh suy dn gt - thu gn: Gi s qu trnh gt thu gn ang trng thi vi ngn xp l x v phn k hiu u vo l v (*) ngn xp u vo $x v$ th th, qu trnh phn tch tip theo s ph thuc vo tp mc c ngha I ca tin t kh tn thuc x. Vi mt mc [A-> 1. 2] I, cho chng ta bit x c dng 1, v qu trnh phn tch phn cn li w ca xu u vo nu theo sn xut A-> 1 2 s c tip tc t 2 ca mc . Hnh ng gt hay thu gn s ph thuc vo 2 l rng hay khng. Nu 2 = th phi thu gn 1 thnh A, cn nu 2 th vic phn tch theo sn xut A-> 1 2 i hi phi s dng hnh ng gt.

Nhn xt: - Mi qu trnh phn tch tip theo ca trng thi (*) u ph thuc vo cc mc c ngha trong tp cc mc c ngha I ca tin t kh tn x. - C th c nhiu mc c ngha i vi mt tin t x. Cc mc ny c th c cc hnh ng xung t (bao gm c gt v thu gn), trong trng hp ny b phn tch s phi dng cc thng tin d on, da vo vic nhn k hiu u vo tip theo quyt nh nn s dng mc c ngha no vi tin t x (tc l s cho tng ng gt hay thu gn). Nu qu trnh ny cho nhng quyt nh khng xung t (duy nht) ti mi trng thi th ta ni vn phm phn tch c bi thut ton LR. - T tng ca phng php phn tch LR l phi xy dng c tp tt c cc mc c ngha i vi tt c cc tin t kh tn. 4) Tp chun tc LR(0) LR(0) l tp cc mc c ngha cho tt c cc tin t kh tn. LR(0) theo ngha: LR ni ln y l phng php phn tch LR, cn s 0 c ngha l s k t nhn trc l 0. 5) Vn phm gia t(Augmented Grammar)(m rng) Vn phm G - 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 gia t.V d: cho vn phm G gm cc sn xut S -> aSb | a th vn phm gia t ca G, k hiu l G gm cc sn xut S-S, S->aSb | a vi S l k hiu bt u.

Ta xy dng vn phm gia t ca mt vn phm theo ngha, i vi vn phm ban u, qu trnh phn tch s bt u bi cc sn xut c v tri l S. Khi , chng ta xy dng vn phm gia t G th mi qu trnh phn tch s bt u t sn xut S->SS dng hai php ton: php tnh bao ng closure(I) ca mt tp mc I v php sinh ra tp mc cho cc tin t kh tn mi goto(I,X) nh sau:

6) Php ton closure Nu I l mt tp cc mc ca mt vn phm G th closure(I) l tp cc mc c xy dng t I bng hai qui tc sau: 1. khi u mi mc trong I u c a vo closure(I) 2. nu [A -> .B ] closure(I) v B-> l mt sn xut th thm [B -> . ] vo closure(I) nu n cha c . p dng qui tc ny n khi khng thm c mt mc no vo closure(I) na. Trc quan: nu [A -> .B ] l mt mc c ngha i vi mt tin t kh tn x th vi B-> l mt sn xut ta cng c [B->. ] l mt mc c ngha i vi tin t kh tn x . Php ton tnh bao ng ca mt mc l tm tt c cc mc c ngha tng ng ca cc mc trong tp .Theo nh ngha ca mt mc l c ngha i vi mt tin t kh tn, chng ta c suy dn S =>*rm xAy =>rm x B y s dng sn xut B -> ta c suy dn S =>*rm x y. Vy th [B->. ] l mt mc c ngha ca tin t kh tn x

V d: Xt vn phm m rng ca biu thc:E' E E E+T|T T T*F|F F (E) | id Nu I l tp hp ch gm vn phm {E' E} th closure(I) bao gm: E' E (Lut 1) E E + T (Lut 2) E T (Lut 2) T T * F (Lut 2) T F (Lut 2) F (E) (Lut 2) F id (Lut 2) E' E c t vo closure(I) theo lut 1. Khi c mt E i ngay sau mt , bng lut 2 ta thm cc sn xut E vi cc chm nm u tri ( E E + T v E T). By gi li c T i theo sau mt , ta li thm T T * F v T F vo. Cui cng ta c Closure(I) nh trn. 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.

* Php ton goto goto(I,X) vi I l mt tp cc mc v X l mt k hiu vn phm.

goto(I,X) c nh ngha l bao ng ca tp tt c cc mc [A-> X. ] sao cho [A-> .X ] I. Trc quan: Nu I l tp cc mc c ngha i vi mt tin t kh tn no th goto(I,X) l tp cc mc c ngha i vi tin t kh tn X. gi tp J=goto(I,X) th cch tnh tp J nh sau: 1. nu [A-> .X ] I th thm [A-> X. ] vo J 2. J=closure(J) Php ton goto l php pht trin xy dng tt c cc tp mc cho tt c cc tin t kh tn c th.V d : Gi s I = {E' E, E E + T}. Ta c J = { E E + T} goto (I, +) = closure(I') bao gm cc mc : EE+T (Lut 1) TT*F (Lut 2) TF (Lut 2) F (E) (Lut 2) F id (Lut 2) Tnh Goto(I,+) bng cch kim tra I cho cc mc vi du + ngay bn phi chm. E E khng phi mc nh vy nhng E E + T th ng. Ta chuyn du chm qua bn kia du + nhn c E E + T v sau tnh closure cho tp ny.Nh vy, cho trc mt vn phm, ta c th s dng hai php ton trn sinh ra tt c cc tin t kh tn c th v tp mc c ngha ca tng tin t kh tn. Vi vic s dng php tnh closure v goto nh trn, chng ta xy dng c tp cc mc gi l tp mc LR(0).

Tnh goto (I, +) ?

Thut ton xy dng LR(0) nh sau: Cho vn phm G, vn phm gia t ca n l G Tp C l tp cc tp mc LR(0) c tnh theo thut ton nh sau: 1). C = {closure({[S->.S]})} 2). i vi mi mc I trong C v mi k hiu vn phm X, tnh goto(I,X). Thm goto(I,X) vo C nu khng rng v khng trng vi bt k tp no c trong C Thc hin bc 2 n khi no khng thm c tp no na vo CC l tp xc nh tt c cc mc c ngha i vi tt c cc tin t kh tn v chng ta xut pht t mc [S -> .S] v xy dng cc mc c ngha cho tt c cc tin t kh tn.

Xy dng tp C da trn hm goto c th c xem nh mt s chuyn trng thi ca mt DFA. Trong , I0 l trng thi xut pht, bng cch xy dng cc trng thi tip bng chuyn trng thi theo u vo l cc k hiu vn phm. ng i ca cc k hiu u vo chnh l cc tin t kh tn. Cc trng thi chnh l tp cc mc c ngha ca cc tin t kh tn . V d: Cho vn phm G: E -> E + T | T; Hy tnh LR(0) - Xt vn phm G l vn phm gia t ca G. Vn phm G gm cc sn xut sau: E -> E; E -> E + T | T; T -> T * F | F; F -> ( E ) | a F -> a. Tnh theo thut ton trn ta c kt qu nh sau: T -> T * F | F; F -> ( E ) | id

Closure({E' E}):I0: E -> .E E -> .T T -> .F F -> .(E) F -> .a

Goto (I0, id) I5:

Goto (I0, E)E -> E.+T

I1:

E -> E.

Goto (I1, +)E -> E+.T

I6:

E -> .E+T

T -> .T*F T -> .F F -> .(E) F -> .a

Goto (I0, T)

I2:

E -> T. T -> T.*F

Goto (I2, *)F -> .(E) F -> .a

I7:

T -> T*.F

S chuyn trng thi ca DFA cho cc tin t kh tn: I0

E

I1

+

I6

T F(

I9

*

I7

I3

I4

a T I2

I5

*

I7

F(

I10 I4

a F I3

I5

(

(

I4

E

I8

)

I11 I6

+ T F a a I5

I2

I3

2.3.4.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 ni chung lta c th trnh c nhng vn phm ny trong hu ht cc kt cu ngn ng lp trnh in hnh.

S khc bit rt ln gia cc vn phm LL v LR: i vi vn phm LR(k), ta phi c kh nng nhn din c s xut hin ca v phi ca mt sn xut no bng cch xem tt c nhng g suy dn c t v phi qua k k hiu vo c nhn vt qu. i hi ny t kht khe hn so vi cc vn phm LL(k). i vi vn phm LL(k): ta phi nhn bit c sn xut no c dng ch vi k k hiu u tin m v phi ca n suy dn ra. V vy, cc vn phm LR c th m t c nhiu ngn ng hn so vi cc vn phm LL. 2.3.4.3. Xy dng bng phn tch 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. Phng php th 2 l phng php LR chun ( canonical LR): phng php mnh nht nhng tn km nht. Phng php th 3: LR nhn vt (LALR LookaheadLR) l phng php trung gian v sc mnh v chi ph gi 2 phng php trn. Phng php ny lm vic vi hu ht cc vn phm. Trong phn ny ta s xem xt cch xy dng cc hm action v goto ca phn tch SLR t tmt hu hn n nh dng nhn dng cc tin t c th c.

Cho vn phm G, ta tm vn phm gia t ca G l G, t G xy dng C l tp chun cc tp mc cho G, xy dng hm phn tch Action v hm nhy goto t C bng thut ton sau. 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 SV d Ta xy dng bng phn tch c php SLR cho vn phm tng cng G' trong v d trn. E' E E E + T | T T T * F | F F (E) | id (0) E' E (1) E E + T (2) E T (3) T T * F (4) T F (5) F (E) (6) F 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". E T T T * 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: K n xt I2:trng thi 0 1 2 3 4 5 6 7 8 9 10 11 Action a + s5 s6 r2 r4 s5 r6 s5 s5 s6 r1 r3 r5 * ( S4 ) $ acc r2 r4 8 r6 S4 S4 s7 r3 r5 s11 r1 r3 r5 r1 r3 r5 r6 9 3 10 2 3 goto E 1 T 2 F 3

s7 r4 S4 r6

r2 r4

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). I0 : S' S Mi vn phm SLR(1) u khng m h, Tuy nhin c nhng vn phm khng m h nhng khng phi l S L = R SLR(1). S R L * R V d: Xt vn phm G vi tp lut sinh nh sau: L id S L = R : L R S id L * R I5 R L L id R L y l mt vn phm khng m h nhng khng I1 : S' S phi l vn phm SLR(1). I6 : L H tp hp cc mc C baoSgm: = R R L I2 : S L = R L * R RL L id I3 : I4 : S R L * R R L L * R L id I7 : I8 : I9 : L * R R L S L = R

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). 2.3.4.4. Xy dng bng phn tch LR chun. * 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 $.* Thut ton xy dng h tp hp mc LR(1)

Gii thut: 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 Thm goto(I, X) vo C; Until Khng cn tp cc mc no c th thm cho C; end; V d: Xy dng bng LR chnh tc cho vn phm gia t G' c cc lut sinh sau : S' S (1) S L = R3 (2) S R (3) L * R (4) L id (5) R L Trong : tp k hiu cha kt thc ={S, L, R} v tp k hiu kt thc {=, *, id, $} I0 : S' S, $ Goto (I4,R) I7 : L * R, = | $ Closure (S' S, $) S L = R, $ Goto (I4, L) I8 : R L, = | $ S R, $ L * R, = | $ Goto (I6,R) I9 : S L = R, $ L id, = | $ R L, $ Goto (I6,L) I10 :R L, $ Goto (I0,S) I1 : S' S , $ Goto (I6,*) I11 :L * R, $ R L, $ Goto (I0, L) I2 : S L = R, $ L * R, $ R L , $ R id, $ Goto (I 0,R) I3: S R , $ Goto (I6, id) I12 :L id , $ Goto (I0,*) I4: L * R, = | $ Goto (I11,R) I13 :R * R, $ R L, = | $ L * R, = | $ Goto (I11,L) I10 R id, = | $ Goto (I0,id) I5 : Goto (I2,=) I6 : L id , = | $ S L = R, $ R L, $ L * R, $ L id, $ Goto (I11,*) I11 Goto (I11,id) I12

* Thut ton xy dng bng phn tch c php LR chnh tc

Gii thut: 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 : Xy dng bng phn tch LR chnh tc cho vn phm v d trn Trng thi 0 1 2 3 4 5 6 7 8 9 10 11 Action * id s4 s5 Goto S L 1 2 3

=

$ acc r5 r2

R

s6 s4 r4 s11 r3 r5 s12 s5

8 10

7 9

r1 r5 s11 s12 10 13

12 13

r4 r3

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 .

2.3.4.5. Xy dng bng phn tch 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 : 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 thu: 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 }

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 : Vi v d trn, ta c h tp hp mc C' nh sau C' = {I0, I1, I2, I3, I411, I512, I6, I713, I810, I9 } I512 = Goto (I0,id), Goto (I6,id) : I0 : S' S, $ L id , = | $ closure (S' S, $) : S L = R, $ S R, $ L * R, = I6 = Goto(I2,=) : S L = R,$ L id, = R L, $ R L, $ L * R, $ L id, $ I1 = Goto (I0,S) : S' S , $ I2 = Goto (I0, L) : $ S L = R, I713 = Goto(I411, R) : L * R, = | $ R L , $ I810 = Goto(I411, L), Goto(I6, L): R L, = | $ SR I9 = Goto(I6, R) : S L = R, $

I3 = Goto (I 0,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 :Action * id s411 s512 acc s6 Goto L 2

State 0 1 2

=

$

S 1

R 3

3 411 512 6 713 810 9

r2 810 r4 s411 s512 r3 r5 r3 r5 r1 Hnh - Bng phn tch c php LALR r4 810 9 713

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).

2.4. Bt li. * Giai on phn tch c php pht hin v khc phc c kh nhiu li. V d li do cc t t t b phn tch t vng khng theo th t ca lut vn phm ca ngn ng. * B bt li trong phn phn tch c php c mc ch: + Pht hin, ch ra v tr v m t chnh xc r rang cc li. + Phc hi qu trh phn tch sau khi gp li nhanh c th pht hin ra cc li tip theo. + Khng lm gim ng k thi gian x l cc chng trnh vit ng. * Cc chin lc phc hi li. - C nhiu chin lc m b phn tch c th dng phc hi qu trnh phn tch sau khi gp mt li c php. Khng c chin lc no tng qut v hon ho, c mt s phng php dng rng ri. + Phc hi kiu trng pht: Phng php n gin nht v c p dng trong a s cc b phn tch. Mi khi pht hin li b phn tch s b qua mt hoc mt s k hiu vo m khng kim tra cho n khi n gp mt k hiu trong tp t t ng b. Cc t t ng b thng c xc nh trc ( VD: end, ; ) Ngi thit k chng trnh dch phi t chn cc t t ng b. u im: n gin, khng s bj vng lp v hn, hiu qu khi gp cu lnh c nhiu li.

+ Khi phc cm t: Mi khi pht hienj li, b phn tch c gng phn tch phn cn li ca cu lnh. N c th thay th phn u ca phn cn li xu ny bng mt xu no cho php b phn tch lm vic tip. Nhng vic ny do ngi thit k chng trnh dch ngh ra. + Sn xut li: Ngi thit k phi c hiu bit v cc li hng gp v gia c vn phm ca ngn ng ny ti cc lut sinh ra cu trc li. Dng vn phm ny khi phc b phn tch. Nu b phn tch dng mt lut li c th ch ra cc cu trc li pht hin u vo.Ngoi ra ngi ta c cch bt li c th hn trong tng phng php phn tch khc nhau.

2.4.1. Khi phc li trong phn tch tt nh LL. * Mt li c pht hin trong phn tch LL khi: - K hiu kt thc nm trn nh ngn xp khng i snh c vi k hiu u vo hin ti. - Mc M(A,a) trong bng phn tch l li (rng). * Khc phc li theo kiu trng pht l b qua cc k hiu trn xu vo cho n khi xut hin mt k hiu thuc tp k hiu xc nh trc gi l tp k hiu ng b. Xt mt s cch chn tp ng b nh sau: a) a tt c cc k hiu trong Follow(A) vo tp ng b ho ca k hiu khng kt thc A. Nu gp li, b qua cc t t ca xu vo cho n khi gp mt phn t ca Follow(A) th ly A ra khi ngn xp v tip tc qu trnh phn tch. b) a tt c cc k hiu trong First(A) vo tp ng b ho ca k hiu khng kt thc A. Nu gp li, b qua cc t t ca xu vo cho n khi gp mt phn t thuc First(A) th qu trnh phn tch c tip tc. V d: vi v d trn, ta th phn tch xu vo c li l )id*+id vi tp ng b ho ca cc k hiu khng kt thc c xy dng t tp First v tp Follow ca k hiu . Ngn xp $E $E $ET $ETF $ETid Xu vo )id*+id$ id*+id$ id*+id$ id*+id$ id*+id$ Hnh ng M(E,)) = li, b qua ) gp id First(E) E->TE T->FT F->id rt gn id

$ET $ETF* $ETF

*+id$ *+id$ +id$

$ETF $ETid $ET $E $

id$ id$ $ $ $

T->*FT rt gn * M(F,+) = li, b qua. Ti y xy ra hai trng hp(ta chn a): a).b qua + v id First(F) b).b qua F v + Follow(F) F->id rt gn id T-> E->

2.4.2. Khi phc li trong phn tch LR. Mt b phn tch LR s pht hin ra li khi n gp mt mc bo li trong bng action (ch s khng bao gi b phn tch gp thng bo li trong bng goto). Chng ta c th thc hin chin lc khc phc li c gng c lp on cu cha li c php: qut dc xung ngn xp cho n khi tm c mt trng thi s c mt hnh ng goto trn mt k hiu khng kt thc A ngay sau n. Sau b i khng hoc nhiu k hiu u vo cho n khi gp mt k hiu kt thc a thuc Follow(A), lc ny b phn tch s a trng thi goto(s,A) vo ngn xp v tip tc qu trnh phn tch.

Phng php phn tch bng CYK (Cocke Younger Kasami) - Gii thut lm vic vi tt c cc VP PNC. Thi gian phn tch l: n 3 (n l di xu vo cn phn tch), nu vn phm khng nhp nhng th thI gian phn tch l: n2. - iu kin ca thut ton l vn phm PNC dng chun chmsky (CNF) v khng c sn xut (sn xut A ) v cc k hiu v ch. Gii thut CYK: - To mt hnh tam gic (mi chiu c di l n , n l di ca xu). Thc hin gii thut: Begin 1) For i:=1 to n do ij = { A | A a l mt sn xut v a l k hiu th i trong w}; 2) For j:=2 to n do For i:=1 to (n j +1) do Begin ij = ; For k:=1 to (j -1) do ij = ij { A | A BC l mt sn xut; B ik C }; end; end; V d: Xt vn phm chun chmsky S AB|BC; A BA|a; B CC|b; C AB|a; (1) (2) (3) (4) (5) (6) (7) (8) Xu vo w= baaba; i j b a a b a B A,C A,C A,C B S,A B S,C S,A B B S,A,C

i+k, j -k

S,A,Cb B a a b a

S,A S,A,C

A,C B B S,A,C

A,C S,C B

B S,A

A,C

- Qu trnh tnh

. VD: tnh 24 , Tnh: 21 = {A,C}, 33 = {B}, 21 33 = {AB,CB} Do (1), (7) nn a S,C voij

24

. {B}, 42 = {S,A}, 22 42 = {BS,BA} Do (3) nn a A vo 24. 23 = {B}, 51 = {A,C}, 23 51 = {BA,BC} (2),(3) nn a S,C vo 22 =

24

.

Kt qu: 24 = {S,A,C}. - Nu S cui cng th ta kt lun: Xu vo phn tch thnh cng v c th dng c cy phn tch cho n. S lng cy phn tch = s lng S c trong ny.S

b a B A,C S,A B B S,A,C S,A,C

a A,C S,C B

b B S,A

a A,CBB b

A C A C a

B C

A B a a b

Bi tp Luyn tp: cho vn phm E -> T + E | T T -> a Hy xy dng bng SLR(1) cho vn phm trn Thc hnh: Th nghim trn vn phm biu thc nu trn 1) xy dng tp LR(0) t ng 2) xy dng bng phn tch SLR(1) t ng 3) phn tch xu vo

CHNG 5 1. MC CH, NHIM V.

BIN DCH DA C PHP.

- Cc hnh ng dch ph thuc rt nhiu vo c php ca chng trnh ngun cn dch.Qu trnh dch c iu khin theo cu trc c php ca chng trnh ngun, c php ny c xc nh thng qua b phn tch c php. - Nhm iu khin cc phn hot ng theo c php, cch thng dng l gia c cc lut sn xut ( m ta bit c th nhng lut no v th t thc hin ra sao thng qua cy phn tch) bng cch thm cc thuc tnh cho vn phm y, v cc qui tc sinh thuc tnh gn vi tng lut c php. Cc qui tc , ta gi l qui tc ng ngha (semantic rules). - thc hin cc qui tc ng ngha s cho thng tin v ng ngha, dng kim tra kiu, lu thng tin vo bng k hiu v sinh m trung gian. - C hai tip cn lin kt (c t) cc qui tc ng ngha vo cc lut c php (sn xut) l c php iu khin (syntax-directed definition) v lc dch (translation scheme). - Cc lut ng ngha cn c cc hnh ng ph (ngoi vic sinh thuc tnh cho cc k hiu vn phm trong sn xut) nh in ra mt gi tr hoc cp nht mt bin ton cc.Cc kin thc trong phn ny khng nm trong khi chc nng ring r no ca chng trnh dch m c dng lm c s cho ton b cc khi nm sau khi phn tch c php. Mt xu vo Cy phn tch th ph thuc th tnh gi cho cc lut ng ngha.

2. NH NGHA C PHP IU KHIN. C php iu khin (syntax-directed definition) l mt dng tng qut ho ca vn phm phi ng cnh, trong mi k hiu vn phm c mt tp thuc tnh i km, c chia thnh 2 tp con l thuc tnh tng hp (synthesized attribute) v thuc tnh k tha (inherited attribute) ca k hiu vn phm . Mt cy phn tch c php c trnh by cc gi tr ca cc thuc tnh ti mi nt c gi l cy phn tch c php c ch gii (hay gi l cy phn tch nh du) (annotated parse tree). 2.1. C php iu khin. 2.1.1. Dng ca nh ngha c php iu khin. Trong mi c php iu khin, mi sn xut A-> c th c lin kt vi mt tp cc qui tc ng ngha c dng b = f(c1, . . .,ck) vi f l mt hm v a) b l mt thuc tnh tng hp ca A, cn c1, . . .,ck l cc thuc tnh ca cc k hiu trong sn xut . Hoc b) b l mt thuc tnh k tha ca mt trong nhng k hiu v phi ca sn xut, cn c1, . . . ,ck l thuc tnh ca cc k hiu vn phm.

Ta ni l thuc tnh b ph thuc vo cc thuc tnh c1, . . .,ck. - Mt vn phm thuc tnh (Attribute Grammar) l mt c php iu khin m cc lut ng ngha khng c hnh ng ph. V d: Sau y l vn phm cho mt chng trnh my tnh b ti vi val l mt thuc tnh biu din gi tr ca k hiu vn phm.Sn xut Lut ng ngha L -> E n Print(E.val) E -> E1 + T E.val = E1.val + T.val E -> T E.val = T.val T -> T1 * F T.val = T1.val * F.val T -> F T.val = F.val F -> ( E ) F.val = E.val F -> digit F.val = digit.lexval T t digit c thuc tnh Lexval: l gi tr ca digit c tnh nh b phn tch t vng. K hiu n : xung dng, Print : in kt qu ra mn hnh.

2.1.2. Thuc tnh tng hp. Trn mt cy phn tch, thuc tnh tng hp c tnh da vo cc thuc cc nt con ca nt , hay ni cch khc thuc tnh tng hp c tnh cho cc k hiu v tri ca sn xut v tnh da vo thuc tnh ca cc k hiu v phi. Mt c php iu khin ch s dng cc thuc tnh tng hp c gi l c php iu khin thun tnh S (S-attribute definition). Mt cy phn tch cho vn phm c php iu khin thun tnh S c th thc hin cc lut ng ngha theo hng t l n gc v c th s dng trong phng php phn tch LR. L V d: v cy cho u vo: 3*4+4nE1 E2 T1 v d 1 T2 * F2 + T3 F3 4 n

Chng ta duyt v thc hin cc hnh F1 ng ng ngha ca v d trn theo qui 4 trn xung: khi gp mt nt ta s thc hin tnh thuc tnh tng hp ca cc 3 con ca n ri thc hin hnh ng ng ngha trn nt . Ni cch khc, khi phn tch c php theo kiu bottom-up, th khi no

gp hnh ng thu gn, chng ta s thc hin hnh ng ng ngha nh gi thuc tnh tng hp.

F1.val=3 (syntax: F1->3 semantic: F1.val=3.lexical) F2.val=4 (syntax: F2->3 semantic: F2.val=4.lexical) T2.val=3 (syntax: T2->F1 semantic: T2.val=F1.val ) T1.val=3*4=12 (syntax: T1->T2*F2 semantic: T1.val=T2.val*F2.val) F3.val=4 (syntax: F3->4 semantic: F3.val=4.lexical) T3.val=4 (syntax: T3->F3 semantic: T3.val=F3.val ) E1.val=12+4=16 (syntax: E1->E2+T3 semantic: E1.val=E2.val+T3.val) 16 (syntax: L->E1 n semantic: print(E1.val)) 2.1.3. Thuc tnh k tha. Thuc tnh k tha (inherited attribute) l thuc tnh ti mt nt c gi tr c xc nh theo gi tr thuc tnh ca cha hoc anh em ca n. Thuc tnh k tha rt c ch trong din t s ph thuc ng cnh. V d chng ta c th xem mt nh danh xut hin bn tri hay bn phi ca ton t gn quyt nh dng a ch hay gi tr ca nh danh. V d v khai bo:sn xut D -> T L T -> int T -> real L -> L1, id L -> id lut ng ngha L.in := T.type T.type := interger T.type := real L1.in := L.in ; addtype(id.entry, L.in) addtype(id.entry,L.in) D

V d: int a,b,c Ta c cy c php:

T L2

L1 , a

int

Chng ta duyt v thc hin cc hnh ng ng ngha s c kt qu nh sau:

L3

,

b

c

T.type = interger (syntax:T->int semantic: T.type=interger) L1.in = interger (syntax: D -> T L1 semantic: L1.in=T.type)

L2.in = interger (syntax: L1 -> L2 , a semantic: L2.in = L1.in ) a.entry = interger (syntax: L1 -> L2 , a semantic: addtype(a.entry,L1.in) ) L3.in = interger (syntax: L2 -> L3 , b semantic: L3.in = L2.in ) b.entry = interger (syntax: L2 -> L3 , b semantic: addtype(b.entry,L2.in) ) c.entry = interger (syntax: L3 -> c semantic: addtype(c.entry,L3.in) )

Bi luyn tp:1) Cho vn phm sau nh ngha mt s h c s 2 B -> 0 | 1 | B 0 | B 1 Hy nh ngha mt c php iu khin dch mt s h c s 2 thnh mt s h c s 10 (hay ni cch khc l tnh gi tr ca mt s h c s 2). Xy dng cy nh du(xy dng cy c php cng vi gi tr thuc tnh trn mi nt) vi u vo l 1001. M rng: sinh vin t lm bi ton ny vi cc sn xut nh ngha mt s thc h c s 2: S->L.L | L L->LB | B B->0 | 1 Li gii: nh ngha thuc tnh tng hp val ca k hiu B cha gi tr tnh c ca s biu din bi B. xut pht t cch tnh: (anan-1 . . . a1a0)2 := an*2n+an-1*2n-1+. . . +a1*2+a0 := 2*(an*2n-1+. . .+a1)+a0 := 2*(an. . .a1)+a0 Do nu c B -> B1 1 th B.val := 2*B1.val+1 B -> B1 0 th B.val := 2*B1.val V vy, chng ta xy dng cc lut dch nh sau: Lut phi ng cnh B->0 B->1 B->B1 0 B->B 1 Cy nh du: B: val:=2*4+1=9 Lut dch B.val=0; B.val:=1; B.val:=2*B1.val +0 B.val:=2*B1.val+1

B: val:=2*2+0=4

1

B: val:=2*1+0=2

0

0

B: val:=1

1

Xt mt cy nh du khc cho xu vo 1011 B: val:=5*2+1=11

B: val:=2*2+1=5

1

B: val:=2*1+0=2

1

B: val:=1

0

1

2.2. th ph thuc.Nu mt thuc tnh b ti mt nt trong cy phn tch c php ph thuc vo mt thuc tnh c