You are on page 1of 157

Khoa cng ngh thng tin - i hc Thi Nguyn

B 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 ny v thc hin tng cu lnh. Ngn ng trung gian c gi l ngn ng ca CT NN Chng mt my o, chng trnh thng dch thc hin ngn ng ny gi l my o. trung gian trnh ngun Compiler Interpreter

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 xy


dng 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 phn


quan 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, R2
MULF #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 ng trung gian ri Phn tch a vo b ti M ngun c php u v sinh m.
Phn tch t vng Phn tch t vng Phn tch ng ngha Phn tch c php

Chng trnh ngun Sinh m trung gian Ti u m Sinh m

Phn tch ng ngha

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 vng


t 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: <tn, con tr tr n position trn bng k hiu> <php gn, > <tn, con tr tr n initial trn bng k hiu> <php cng, > <tn, con tr tr n rate trn bng k hiu> <php nhn> <s nguyn, gi tr s nguyn 60>

* 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 =hoc <> hoc <> 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 end else /* eof gia ch ht chng trnh ngun */ kt thc phn tch t vng
end

2. XC NH T T. 2.1. Biu din t t


Cch 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/ 1 v L2/2 l :

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

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 T
Cc 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 ln
V 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

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, q1
start q0

0|1 1 q1 1 0|1

q2

th chuyn khng n nh Hm chuyn trng thi H


0

0|1 1 q1

Q0 Q1 Q2 q0 q0 q2

0 q1 q2 q2

start q0

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

2 *

2 *

ch_s ch_s ch_s ch_s

. 1 2

3 *

Ton t quan h:
0
<

2 3

LE

>

NE

4 *

LT

EQ

5
>

GE

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

1
ch_s ch_s ch_s

2 *

tn

ch_s

. 3
khc =

5 4 * 8
>

6 *
s nguyn

s thc

<

LE NE 10 * LT

1 1
>

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 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(); switch(state) { case 0: if(IsLetter(c)) state=1;

else if(IsDigit(c)) state=3; else if(c==<) state=7; else if(c===) state=11; 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) pascal
var 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 hanh


Bi 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 <Ton hng> = <Tn> | <S> | ( <Biu thc> ) 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 P
4. 5.
+

chu cai Start chu cai khac

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 -> A1 | A2 | . . .| Am | 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) | id

Qui 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 -> b


v 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

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 Bottom-up 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

S a

a*

b S

(1)

a*

(2)

S a S b S

S a

(4)
S

c c a* S b S

a*

(3)

(6)
b S

a* c c*

(5)

S a S S a* S b S

(7)

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

(8)
a* S

(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 trc
khi 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 no
t 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 Qu trnh 1 c d e S Qu trnh 2 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 khng
phi 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 chng ta


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<k th thm First(Yi+1) vo First(X) tr . Nu trng hp i=k th thm vo First(X) Cch tnh First() vi l mt xu. Gi s = X1X2 . . . Xk. Ta tnh nh bc 3 ca thut ton trn: 1. thm First(X1) vo First() tr 2. nu First(Xt) cha vi mi t=1,...,i vi i<k th thm First(X i+1) vo First() tr . Nu trng hp i=k th thm vo First() - Tnh First 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 First thm cc k hiu vo cc tp First. Lp li v dng khi no gp mt lt duyt m khng b sung thm c bt k k hiu no vo tp First v ta tnh xong cc tp First cho cc k hiu.
V d 1: Cho vn phm sau: Kt qu: S -> AB; A -> aA | ; B -> bB | Hy tnh First ca cc k hiu S, A, B Fisrt(A) = {a, }; First(B) = {b,}; First(S) = {a,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 tp
con 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 th thm cc phn t trong First() tr vo Follow(A).


2. tht vy: nu a First() th tn ti =>*a , khi , do c lut B->A nn tn ti S =>* 1B1 => 1A1=>1Aa 1 Follow(A) 3. Theo nh ngha ca Follow th ta c 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 =>* 1Aa1 , 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 ' th FOLLOW(T') ( FOLLOW(F)th FOLLOW(F)= { *, +, $, )} Vy ta c FOLLOW(E)= FOLLOW(E') = { $, )} FOLLOW(T)= FOLLOW(T') = { +,$, )}

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-> 3. nu 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' | ; T F T'; T' * F T' | ; F (E) | id Tnh FIRST(TE') = FIRST(T) = {(,id} ( M[E,id] v M[E,( ]

K t cha kt thc
E E' T T' F

K t kt thc
Id 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 | b
K t cha kt thc S S' E E b

A
S a

K t kt thc e i
S iEtSS' S

$
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) | id


a) 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) K hiu V tri E E

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

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

Id E->TE

+ E->+TE

K hiu u vo * ( E->TE

) E->

$ E->

T T F

T->FT T-> F->id 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$ $ $ $ T->*FT

T->FT T-> F->(E) T->

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 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: Cho vn phm: (1) E -> E + T (2) E -> T

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

(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

Action
a 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 0E1+6T9 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 thu gn E->E+T

0E1

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 12w

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->12 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->12 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->S
S 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 xBy s dng sn xut B -> ta c suy dn S =>*rm xy. 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 C
C 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) I1:


E -> E.+T

E -> E.

Goto (I1, +) I6:


E -> E+.T

E -> .E+T

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

Goto (I0, T) I2:

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

Goto (I2, *) I7:


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

T -> T*.F

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


0

I
1

I
6

T F
(

I
9

I
7

I
3

I
4

a T I
2

I
5

I
7

F
(

I10 I
4

a F I
3

I
5

I
4

I
8

I11 I
6

+ T F a a I
5

I
2

I
3

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 l ta
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 S
V 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". K n xt I2: 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:
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). 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: Xt vn phm G vi tp lut sinh nh sau: S L = R S R L * R L id R L I0 S' S y l mt: vn phm khng m h nhng khng phi l vn phm SLR(1). H tp hp cc mc C bao gm: S L = R S R I L L 5: * R id L id R L I : S L = R I1 : 6S' S R L L * R I2 : S L =L id R R L I7 : L * R I3 : S R I8 : R L I4 : L * R I9 : R L S L = R L * R L id

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 12 13 = Action * id s4 s5 $ acc r5 r2 s4 r4 s11 r3 r5 r1 r5 s11 s12 r4 r3 10 13 s12 10 9 s5 8 7 Goto S L 1 2 3 R

s6

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 } I0 : S' S, $ closure (S' S, $) : S L = R, $ S R, $ L * R, = L id, = R L, $ I1 = Goto (I0,S) : I2 = Goto (I0, L) : S' S , $ S L = R, $ R L , $ S R I512 = Goto (I0,id), Goto (I6,id) : L id , = | $ 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, = | $ 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 r2 810 r4 s411 s512 r3 r5 r3 r5 r1 r4 810 9 713 Goto L 2

State 0 1 2 3 411 512 6 713 810 9

S 1

R 3

Hnh - Bng phn tch c php LALR


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 $ET $ETF* $ETF Xu vo )id*+id$ id*+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 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->

$ETF $ETid $ET $E

id$ id$ $ $

$ 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 i+k, j -k }; 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 S,A,C

b B

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 ij . VD: tnh 24 , Tnh:

21 = {A,C}, 33 = {B}, 2133 = {AB,CB} Do (1), (7) nn a S,C vo


24

22 = {B}, 42 = {S,A}, 2242 = {BS,BA} Do (3) nn a A vo 24. 23 = {B}, 51 = {A,C}, 2351 = {BA,BC} (2),(3) nn a S,C vo 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,C
BB 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+4n
E1 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 con 3 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

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

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

B: val:=1

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

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

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

B: val:=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, th th hnh ng ng ngha cho b ti nt phi c thc hin sau khi thc hin hnh ng ng ngha cho c. S ph thuc qua li ca cc thuc tnh tng hp v k tha ti cc nt trong mt cy phn tch c php c th c m t bng mt th c hng gi l th ph thuc (dependency graph).

- th ph thuc l mt th c hng m t s ph thuc gia cc thuc tnh ti mi nt ca cy phn tch c php. Trc khi xy dng mt th ph thuc cho mt cy phn tch c php, chng ta chuyn mi hnh ng ng ngha thnh dng b := f(c1,c2,. . .,ck) bng cch dng mt thuc tnh tng hp gi b cho mi hnh ng ng ngha c cha mt li gi th tc. th ny c mt nt cho mi thuc tnh, mt cnh i vo mt nt cho b t mt nt cho c nu thuc tnh b ph thuc vo thuc tnh c. Chng ta c thut ton xy dng th ph thuc cho mt vn phm c php iu khin nh sau: for mi nt n trong cy phn tch c php do for mi thuc tnh a ca k hiu vn phm ti n do

xy dng mt nt trong th ph thuc cho a; for mi nt n trong cy phn tch c php do for mi hnh ng ng ngha b:=f(c1,c2, . . .,ck) i km vi sn xut c dng ti n do for i:=1 to k do xy dng mt cnh t nt ci n nt b
VD 1: Da vo cy phn tch ( nt t on) v lut ng ngha ng vi sn xut bng, ta thm cc nt v cnh thnh th ph thuc: E Sn xut E E1 | E2 Lut ng ngha E.val = E1.val + E2.val E1 Val E2 Val

V d 2: Vi v d 2, ta c mt th ph thuc nh sau: ch : + chuyn hnh ng ng ngha addentry(id.entry,L.in) ca sn xut L->L , id thnh thuc tnh gi f ph thuc vo entry v in sn xut lut ng ngha D -> T L L.in := T.type T -> int T.type := interger T -> real T.type := real L -> L1, id L1.in := L.in ; addtype(id.entry, L.in) L -> id addtype(id.entry,L.in) D
in

type in f

f entry

L rea l
in

,
entry

entry

2.3. Th t nh gi thuc tnh. Trn th DAG c xy dng nh v d trn, chng ta phi xc nh th t ca cc nt lm sao cho khi duyt cc nt theo th t ny th mt nt s c th t sau nt m n ph thuc ta gi l mt sp xp topo. Tc l nu cc nt c nh th t m1, m2, . . .,mk th nu c mi ->mj l mt cnh t mi n mj th mi xut hin trc mj trong th t hay i<j. Nu chng ta duyt theo th t c sp xp ny th s c mt cch duyt hp l cho cc hnh ng ng ngha. Ngha l trong mt sp xp topo, gi tr cc thuc tnh ph thuc c1,c2, . . . ,ck trong mt hnh ng ng ngha b:=f(c1,c2, . . . ,ck) c tnh trc khi ta c lng f. i vi mt th tng qut, chng ta phi n cc c im sau: + xy dng th ph thuc cho cc thuc tnh ca k hiu vn phm phi c xy dng trn cy c php. Tc l xy dng cy c php vi mi nt (nh) i din cho mt k hiu vn phm sau mi xy dng th ph thuc theo thut ton 5.1 + trong th ph thuc, mi nt i din cho mt thuc tnh ca mt k hiu vn phm. + c th mt loi thuc tnh ny li ph thuc vo mt loi thuc tnh khc, ch khng nht thit l ch cc thuc tnh cng loi mi ph thuc vo nhau. Trong v d trn, thuc tnh entry ph thuc vo thuc tnh in. + c th c vng trong th ph thuc, khi chng ta s khng tnh c gi tr ng ngha cho cc nt v gp mt hin tng khi tnh a cn tnh b, m khi tnh b li cn tnh a. Chnh v vy, trong thc t chng ta ch xt n vn phm c php ng ngha m th ph thuc ca n l mt DAG khng c vng. i vi v d trn, chng ta xy dng c mt th t ph thuc trn cc thuc tnh i vi cy c php cho cu vo real a,b,c nh sau:
D
in: 5

type: 4 in: 7

f: 6 entry: 3

L rea l
in: 8 f: 9

f: 8

,
entry: 2

entry: 1

Sau khi chng ta c th ph thuc ny, chng ta thc hin cc hnh ng ng ngha theo th t nh sau (k hiu ai l gi tr thuc tnh nt th i): - i vi nt 1,2 ,3 chng ta duyt qua nhng cha thc hin hnh ng ng ngha no c - nt 4: ta c a4 := real - nt 5: a5 := a4 := real - nt 6: addtype(c.entry,a5) = addtype(c.entry,real) - nt 7: a7 := a5 := real - nt 8: addtype(b.entry,a7) = addtype(b.entry,real) - nt 9: addtype(a.entry,a8) = addtype(a.entry,real)

Cc phng php duyt hnh ng ng ngha


1. Phng php dng cy phn tch c php. Kt qu tr v ca phn tch c

php phi l cy phn tch c php, sau xy dng mt th t duyt hay mt sp xp topo ca th t cy phn tch c php . Phng php ny khng thc hin c nu th ph thuc c vng. 2. Phng php da trn lut. Vo lc xy dng trnh bin dch, cc lut ng ngha c phn tch (th cng hay bng cng c) th t thc hin cc hnh ng ng ngha i km vi cc sn xut c xc nh trc vo lc xy dng. 3. Phng php qun lng (oblivious method). Mt th t duyt c la chn m khng cn xt n cc lut ng ngha. Th d nu qu trnh dch xy ra trong khi phn tch c php th th t duyt phi ph hp vi phng php phn tch c php, c lp vi lut ng ngha. Tuy nhin phng php ny ch thc hin trn mt lp cc c php iu khin nht nh.
Phng php da trn qui tc v phng php qun lng khng nht thit phi xy dng mt th ph thuc, v vy n rt l hiu qu v mt thi gian cng nh khng gian tnh ton. Trong thc t, cc ngn ng lp trnh thng thng c yu cu qu trnh phn tch l tuyn tnh, qu trnh phn tch ng ngha phi kt hp c vi cc phng php phn tch c php tuyn tnh nh LL, LR. thc hin c iu ny, cc thuc tnh ng ngha cng cn tho mn iu kin: mt thuc tnh ng ngha s c sinh ra ch ph thuc vo cc thng tin trc n. Chnh v vy chng ta s xt mt lp c php iu khin rt thng dng v c s dng hiu qu gi l c php iu khin thun tnh L.

C php iu khin thun tnh L


Mt th t duyt t nhin c trng cho nhiu phng php dch Top-down v Bottom-up l th tc duyt theo chiu su (depth-first order). Th tc duyt theo chiu su c trnh by nh di y: procedure dfvisit(n:node);

begin for mi con m ca n tnh t tri sang phi do begin tnh cc thuc tnh k tha ca m dfvisit(m) end tnh cc thuc tnh tng hp ca n end Mt lp cc c php iu khin c gi l c php iu khin thun tnh L hay gi l iu khin thun tnh L (L-attributed definition) c cc thuc tnh lun c th tnh ton theo chiu su.

C php iu khin thun tnh L:


Mt c php iu khin gi l thun tnh L nu mi thuc tnh k tha ca Xi v phi ca lut sinh A -> X1 X2 . . . Xn vi 1<=j<=n ch ph thuc vo: 1. cc thuc tnh ca cc k hiu X1, X2, . . .,Xj-1 bn tri ca Xj trong sn xut v 2. cc thuc tnh k tha ca A Ch rng mi c php iu khin thun tnh S u thun tnh L v cc iu kin trn ch p dng cho cc thuc tnh k tha. Ta thy nu ngn ng m ng ngha ca mt t t c xc nh ch ph thuc vo ng cnh bn tri (cc t t bn tri) th mt phng php duyt c php t tri sang phi cho u vo c th kt hp vi iu khin ng ngha duyt c c php v ng ngha ng thi. T , ta thy c php iu khin thun tnh L tho mn iu kin ny. Hay vi c php iu khin thun tnh L, ta c th duyt u vo t tri sang phi sinh cc thng tin c php v ng ngha mt cch ng thi. Vi phng php phn tch c php tuyn tnh LL v LR, ta c th kt hp thc hin c cc hnh ng ng ngha thun tnh L. Nhng nu m t cc hnh ng ng ngha theo c php iu khin th khng xc nh th t ca cc hnh ng trong mt sn xut. V vy y ta xt mt tip cn khc l dng lc dch m t lut ng ngha ng thi vi th t thc hin chng trong mt sn xut. Thc hin hnh ng ng ngha trong phn tch LL Thit k dch l dch mt lt: khi ta c u vo n u th chng ta s phn tch c php n v thc hin cc hnh ng ng ngha lun. Mt phng php xy dng chng trnh phn tch c php kt hp vi thc hin cc hnh ng ng ngha nh sau: - vi mi mt k hiu khng kt thc c gn vi mt hm thc hin. Gi s vi k hiu khng kt thc A, ta c hm thc hin void ParseA(Symbol A); - mi k hiu kt thc c gn vi mt hm i snh xu vo

gi s k hiu khng kt thc A l v tri ca lut A-> 1 | 2 | . . . | n Nh vy hm phn tch k hiu A s c nh ngha nh sau: void ParseA(Symbol A, Rule r, ...) { if(r==A->1) gi hm x l ng ngha tng ng lut A->1 else if(r==A->2) gi hm x l ng ngha tng ng lut A->2 ... else if(r==A->n) gi hm x l ng ngha tng ng lut A->n } i chiu k hiu u vo v A, tm trong bng phn tch LL xem s khai trin A theo lut no. Chng hn k hiu xu vo hin thi a first(i), chng ta s khai trin A theo lut A -> X1. . . Xk vi i = X1. . . Xk y, ta s s dng lc dch kt hp phn tch c php v ng ngha. Do khi khai trin A theo v phi, ta s gp 3 trng hp sau: 1. nu phn t ang xt l mt k hiu kt thc, ta gi hm i snh vi xu vo, nu tho mn th nhy con tr u vo ln mt bc, nu tri li l li. 2. nu phn t ang xt l mt k hiu khng kt thc, chng ta gi hm duyt k hiu khng kt thc ny vi tham s bao gm cc thuc tnh ca cc k hiu anh em bn tri, v thuc tnh k tha ca A. 3. nu phn t ang xt l mt hnh ng ng ngha, chng ta thc hin hnh ng ng ngha ny.

V d:
E -> R -> R -> T -> T -> T {R.i:=T.val} R {E.val:=R.s} + T {R1.i:=R.i+T.val} R1 {R.s:=R1.s} {R.s:=R.i} ( E ) {T.val:=E.val} num {T.val:=num.val}

void ParseE(...) { // ch c mt lc dch: // E -> T {R.i:=T.val} // R {E.val:=R.s} ParseT(...); R.i := T.val ParseR(...); E.val := R.s }

void ParseR(...) { // trng hp 1 //R -> + //T {R1.i:=R.i+T.val} //R1 {R.s:=T.val+R1.i} if(lut=R->TR1) { match(+);// i snh ParseT(...); R1.i:=R.i+T.val; ParseR(...); R.s:=R1.s } else if(lut=R->) { // R -> {R.s:=R.i} R.s:=R.i } } Tng t i vi hm ParseT() By gi ta xt xu vo: 6+4

First(E)=First(T) = {(,num} First(R) = {,+} Follow(R) = {$,)} Xy dng bng LL(1)


E T R num E->TR T->num + R->+TR ( E->TR T->(E) ) $

R->

R->

u vo 6+4, sau khi phn tch t vng ta c num1 + num2 Ngn xp u vo Lut sn xut Lut ng ngha $E num1 + num2 $ E->TR $RT num1 + num2 $ T->num1 T.val=6 $Rnum1 num1 + num2 $ $R + num2 $ R->+TR1 R.i=T.val=6 $R1T+ + num2 $ $R1T num2 $ T->num2 T.val=4 $R1num2 num2 $ $R1 $ R1-> R1.i=T.val=4 $ $ R1.s=T.val+R1.i=10 R.s=R1.s=10

E.val=R.s=10

Nhn xt:

Mi c php iu khin thun tnh L da trn vn phm LL(1) u c th kt hp qu trnh phn tch c php tuyn tnh vi vic thc hin cc hnh ng ng ngha.

Thc hin hnh ng ng ngha trong phn tch LR


i vi c php iu khin thun tnh S (ch c cc thuc tnh tng hp), ti mi bc thu gn bi mt lut, chng ta thc hin cc hnh ng ng ngha tnh thuc tnh tng hp ca v tri da vo cc thuc tnh tng hp ca cc k hiu v phi c tnh. V d, i vi c php iu khin tnh gi tr biu thc cho my tnh b ti:
Lut c php L->E n E->E1+T E->T T->T1*F T->F F->(E) F->digit Lut ng ngha (lut dch) print(E.val) E.val:=E1.val+T.val E.val:=T.val T.val:=T1.val*F.val T.val:=F.val F.val:=E.val F.val:=digit.lexval

Chng hn chng ta s thc hin cc lut ng ngha ny bng cch sinh ra thm mt ngn xp lu gi tr thuc tnh val cho cc k hiu (gi l ngn xp gi tr). Mi khi trong ngn xp trng thi c k hiu mi, chng ta li t vo trong ngn xp gi tr gi tr thuc tnh val cho k hiu mi ny. Cn nu khi k hiu b loi b ra khi ngn xp trng thi th chng ta cng loi b gi tr tng ng vi n ra khi ngn xp gi tr. Chng ta c th xem qua qu trnh phn tch gt, thu gn vi v d cho xu vo 3*5+4: ch : + phn tch t t cho ta kt qu xu vo l (k hiu d l digit): d1(3)*d2(5)+d3(4)n + vi k hiu khng c gi tr val, chng ta k hiu - cho val ca n
xu vo d1 * d2 + d3 n * d2 + d3 n * d2 + d3 n ngn xp trng ngn xp gi tr lut c php, ng ngha thi gt d1 3 F->digit F 3 F.val:=digit.lexval

(loi b digit)
T->F

* d2 + d3 n

T.val:=F.val (loi b F)
gt gt F->digit

d2 + d3 n + d3 n + d3 n

*T d2 * T F*T

-3 5-3 53

F.val:=digit.lexval

+ d3 n + d3 n d3 n n n

T E +E d3 + E F+E

15 15 - 15 4 - 15 4 15

(loi b digit) T->T1*F T.val:=T1.val*F.val (loi b T1,*,F) E->T E.val:=T.val (loi b T) gt gt F->digit

F.val:=digit.lexval
(loi b digit) T->F T.val:=F.val (loi b F) E->E1+T E.val:=E1.val+T.val (loi b E1,+,T ) gt L->E n L.val:=E.val (loi b E,n)

n n

T+E E En L

4 - 15 19 - 19 19

Ch l khng phi mi c php iu khin thun tnh L u c th kt hp thc hin cc hnh ng ng ngha khi phn tch c php m khng cn xy dng cy c php. Ch c mt lp hn ch cc c php iu khin c th thc hin nh vy, trong r nht l c php iu khin thun tu S. Sau y, chng ta gii thiu mt s c php iu khin khc m cng c th thc hin khi phn tch LR bng mt s k thut: 1) loi b vic gn kt cc hnh ng ng ngha ra khi lc dch 2) k tha cc thuc tnh trn ngn xp 3) M phng thao tc nh gi cc thuc tnh k tha 4) Thay thuc tnh k tha bng thuc tnh tng hp Sinh vin t tham kho trong ti liu cc phn ny.

3. LC CHUYN I(Lc dch) - Translation Scheme Lc chuyn i l mt vn phm phi ng cnh trong cc thuc tnh c lin kt vi cc k hiu vn phm v cc hnh ng ng ngha nm gia hai du ngoc mc {} c chn vo mt v tr no bn v phi ca sn xut. + Lc dch vn c c thuc tnh tng hp v thuc tnh k tha + Lc dch xc nh th t thc hin hnh ng ng ngha trong mi sn xut

V d: mt lc dch sinh biu thc hu v cho mt biu thc nh sau: E -> T R R -> + T {print(+)} R R -> T -> num {print(num.val)} Xt biu thc 3+1+5 Chng ta duyt theo th tc duyt theo chiu su. Cc hnh ng ng ngha c nh th t ln lt 1,2,3, . . .
E T R
3: print(+)

3
1: print(3)

5: print(+)

1
2: print(1)

5
4: print(5)

Kt qu dch l 3 1 + 5 +
Ch l nu trong lc dch ta t hnh ng ng ngha v tr khc i, chng ta s c kt qu dch khc ngay. V d, i vi lc dch, ta thay i mt cht thnh lc dch nh sau:

E -> T R R -> + T R {print(+)} R -> T -> num {print(num.val)} Xt biu thc 3+1+5 Chng ta duyt theo th tc duyt theo chiu su. Cc hnh ng ng ngha c nh th t ln lt 1,2,3, . . .
E T R
5: print(+)

3
1: print(3)

4: print(+)

1
2: print(1)

5
3: print(5)

Kt qu dch l 3 1 5 + + Khi thit k lc dch, chng ta cn mt s iu kin m bo rng mt gi tr thuc tnh phi c sn khi chng ta tham chiu n n: 1. Mt thuc tnh k tha cho mt k hiu v phi ca mt sn xut phi c tnh mt hnh ng nm trc k hiu . 2. Mt hnh ng khng c tham chiu n thuc tnh ca mt k hiu bn phi ca hnh ng . 3. Mt thuc tnh tng hp cho mt k hiu khng kt thc v tri ch c th c tnh sau khi tt c thuc tnh n cn tham chiu n c tnh xong. Hnh ng nh th thng c t cui v phi ca lut sinh. V d lc dch sau y khng tho mn cc yu cu ny: S -> A1 A2 {A1.in:=1; A2.in:=2} A -> a {print(A.in)}
Ta thy thuc tnh k tha A.in trong lut th 2 cha c nh ngha vo lc mun in ra gi tr ca n khi duyt theo hng su trn cy phn tch cho u vo aa. tho mn thuc tnh L, chng ta c th sa li lc trn thnh nh sau:

S -> {A1.in:=1 } A1 {A2.in:=2} A2 A -> a {print(A.in)}


Nh vy, thuc tnh A.in c tnh trc khi chng ta duyt A.

Nhng iu kin ny c tho nu vn phm c iu khin thun tnh L. Khi chng ta s t cc hnh ng theo nguyn tc nh sau: 1. Hnh ng tnh thuc tnh k tha ca mt k hiu vn phm A bn v phi c t trc A. 2. Hnh ng tnh thuc tnh tng hp ca k hiu v tri c t cui lut sn xut. V d:

Cho vn phm biu din biu thc gm cc ton t + v - vi ton hng l cc s: E -> T R R -> + T R R -> - T R R -> T -> ( E ) T -> num Xy dng lc dch trn vn phm ny tnh gi tr ca biu thc. Gii p: Trc ht, chng ta th xem cy phn tch c php cho u vo 6+4-1
E T R

num(6 )

num(4 )

num(1 )

Gi val l thuc tnh cha gi tr tnh c ca cc k hiu vn phm E v T. Thuc tnh s l thuc tnh tng hp v i l thuc tnh k tha cha gi tr tnh c ca k hiu R. Chng ta t R.i cha gi tr ca phn biu thc ng trc R v R.s cha kt qu. Chng ta xy dng lc dch nh sau: E -> T {R.i:=T.val} R {E.val:=R.s} R -> + T {R1.i:=R.i+T.val} R1 {R.s:=R1.s } R -> T { R1.i:=R.i-T.val } R1 {R.s:=R1.s} R -> {R.s:=R.i}

T -> ( E ) {T.val:=E.val} T -> num {T.val:=num.val}

E val=9 T val=6
R i=6 s=9

num(6 )

T val=4
num(4 )

R i=10 s=9

T val=1

R i=9 s=9

num(1 )

Lu : nu chng ta xc nh mt cch duyt khc cch duyt theo hng su th cch t hnh ng dch vo v tr no s c lm khc i. Tuy nhin cch duyt theo hng su l cch duyt ph bin nht v t nhin nht (v ng ngha s c xc nh dn theo chiu duyt u vo t tri sang phi) nn chng ta coi khi duyt mt cy phn tch, chng ta s duyt theo hng su.

4. DNG CY C PHP. 4.1. Cy c php. Cy c php (syntax - tree) l dng rt gn ca cy phn tch c php dng biu din cu trc ngn ng. Trong cy c php cc ton t v t kha khng phi l nt l m l cc nt trong. V d vi lut sinh S if B then S1 else S2 c biu din bi cy c php:

Xy dng cy c php cho biu thc. Tng t nh vic dch mt biu thc thnh dng hu t. Xy dng cy con cho biu thc con bng cch to ra mt nt cho ton hng v ton t. Con ca nt ton t l gc ca cy con biu din cho biu thc con ton hng ca ton t . Mi mt nt c th ci t bng mt mu tin c nhiu trng. Trong nt ton t, c mt trng ch ton t nh l nhn ca nt, cc trng cn li cha con tr, tr ti cc nt ton hng. xy dng cy c php cho biu thc chng ta s dng cc hm sau y: 1/ mknode(op, left, right) : To mt nt ton t nhn l op v hai trng cha con tr, tr ti left v right. 2/ mkleaf(id, entry): To mt nt l vi nhn l id v mt trng cha con tr entry, tr ti trong bng k hiu danh biu. 3/ mkleaf(num,val): To mt nt l vi nhn l num v trng val, gi tr ca s. V d: xy dng cy c php cho biu thc: a - 4 + c ta dng mt dy cc li gi cc hm ni trn. (1): p1 := mkleaf(id, entrya) (4): p4 := mkleaf(id, entryc) (2): p2 := mkleaf(num,4) (5): p5 := mknode(" +", p3, p4) (3): p3 := mknode(" -", p1, p2) Cy c xy dng t di ln entrya l con tr, tr ti ca a trong bng k hiu entryc l con tr, tr ti ca c trong bng k hiu

* xy dng cy c php t nh ngha trc tip c php. Cn c vo cc lut sinh vn phm v lut ng ngha kt hp m ta phn b vic gi cc hm mknode v mkleaf to ra cy c php. V d: nh ngha trc tip c php gip vic xy dng cy c php cho biu thc l: Lut sinh Lut ng ngha E E1 + T E.nptr := mknode('+', E1.nptr, T.nptr) E E1 - T E.nptr := mknode('-', E1.nptr, T.nptr) E T E.nptr := T.nptr T (E) T.nptr := E.nptr T id T. nptr := mkleaf(id, id.entry) T num T.nptr := mkleaf(num, num.val) Vi biu thc a - 4 + c ta c cy phn tch c php (biu din bi ng chm)

Lut ng ngha cho php to ra cy c php. Cy c php c ngha v mt ci t cn cy phn tch c php ch c ngha v mt logic. 4.3. th DRAG. DAG ( Directed Acyclic Graph): th bao gm cc nh cha cc thuc tnh v cc cnh c hng biu th s ph thuc gia cc nh. Cng ging nh cy c php, tuy nhin trong cy c php cc biu thc con ging nhau biu din lp li cn trong DAG th khng. Trong DAG, mt nt con c th c nhiu "cha".

V d: cho biu thc a + a * (b - c) + (b - c) * d

xy dng mt DAG, trc khi to mt nt phi kim tra xem nt tn ti cha, nu tn ti th hm to nt (mknode, mkleaf) tr v con tr ca nt tn ti, nu cha th to nt mi. Ci t DAG Ngi ta thng s dng mt mng mu tin , mi mu tin l mt nt. Ta c th tham kho ti nt bng ch s ca mng. V d: Lnh gn DAG Biu din i := i + 10

Nt 1: c nhn l id, con tr tr ti entry i. Nt 2: c nhn l num, gi tr l 10. Nt 3: c nhn l +, con tri l nt 1, con phi l nt 2. Nt 4: c nhn l :=, con tri l nt 1, con phi l nt 3.

Gii thut 5.1: Phng php value_number xy dng mt nt trong DAG. Gi s rng cc nt c lu trong mt mng v mi nt c tham kho bi s gi tr ca n. Mi mt nt ton t l mt b ba <op, l, r > Input: Nhn op, nt l v nt r. Output: Mt nt vi <op, l, r> Phng php: Tm trong mng mt nt m c nhn l op con tri l l, con phi l r. Nu tm thy th tr v m, ngc li to ra mt nt mi n, c nhn l op, con tri l l, con phi l r v tr v m.

CHNG 6
1. MC CH NHIM V.

PHN TCH NG NGHA.

Nhim v: kim tra tnh ng n v mt ng ngha ca chng trnh ngun. Vic kim tra c chia lm hai loi l kim tra tnh v kim tra ng (Vic kim tra
ca chng trnh dch c gi l tnh, vic kim tra thc hin trong khi chng trnh ch chy gi l ng. Mt kiu h thng ng n s xo b s cn thit kim tra ng.).

Xt mt s dng ca kim tra tnh: - Kim tra kiu: kim tra v tnh ng n ca cc kiu ton hng trong biu thc. - Kim tra dng iu khin: mt s iu khin phi c cu trc hp l, v d
nh lnh break trong ngn ng pascal phi nm trong mt vng lp.

- Kim tra tnh nht qun: c nhng ng cnh m trong mt i tng c nh ngha ch ng mt ln. V d, trong Pascal, mt tn phi c khai bo duy
nht, cc nhn trong lnh case phi khc nhau, v cc phn t trong kiu v hng khng c lp li.

- Kim tra quan h tn: i khi mt tn phi xut hin t hai ln tr ln. V
d, trong Assembly, mt chng trnh con c mt tn m chng phi xut hin u v cui ca chng trnh con ny. Trong phm vi ti liu ny, ta ch xt mt s dng trong kim tra kiu ca chng trnh ngun. 2. BIU THC KIU (type expressions)

Kiu ca mt cu trc ngn ng c biu th bi biu thc kiu. Mt biu thc kiu c th l mt kiu c bn hoc c xy dng t cc kiu c bn theo mt s ton t no . Ta xt mt lp cc biu thc kiu nh sau: 1). Kiu c bn: Gm boolean, char, interger, real. C cc kiu c bn c bit l type_error ( tr v mt cu trc b li kiu), void (biu th cc cu trc khng cn xc nh kiu nh cu lnh). 2). Kiu hp thnh:

+ Mng: Nu T l mt biu thc kiu th array(I,T) l mt biu thc kiu i vi mt mng cc phn t kiu T v I l tp cc ch s.
V d, trong ngn ng Pascal khai bo: var A: array[1..10] of interger; s xc nh kiu ca A l array(1..10,interger)

+ Tch ca biu thc kiu: l mt biu thc kiu. Nu T1 v T2 l cc kiu biu thc kiu th tch cc ca T1xT2 l mt biu thc kiu. + Bn ghi: Kiu ca mt bn ghi chnh l biu thc kiu c xy dng t cc kiu ca cc trng ca n.
V d trong ngn ng Pascal: type row=record address: interger; lexeme: array[1..15] of char; end; var table: array[1..101] of row; nh vy mt bin ca row th tng ng vi mt biu thc kiu l: record((address x interger) x (lexeme x array(1..15,char)))

+ Con tr: Gi s T l mt biu thc kiu th pointer(T) l mt biu th mt biu thc kiu xc nh kiu cho con tr ca mt i tng kiu T.
V d, trong ngn ng Pascal: var p: ^row th p c kiu l pointer(row)

+ Hm: Mt hm l mt nh x t cc phn t ca mt tp vo mt tp khc. Kiu mt hm l nh x t mt kiu min D vo mt kiu phm vi R. Biu thc kiu cho mt hm nh vy s c k hiu l D->R.
V d trong ngn ng Pascal, mt hm khai bo nh sau: function f(a,b:interger): ^interger; c kiu min l interger x interger v kiu phm vi l pointer(interger). V nh vy biu thc kiu xc nh kiu cho hm l: 0 interger x interger -> pointer(interger)

3. CC H THNG KIU. Mt h thng kiu l mt tp cc lut xc nh kiu cho cc phn trong chng trnh ngun. Mt b kim tra kiu lm nhim v thc thi cc lut trong h thng kiu ny. y, h thng kiu c xc nh bi cc lut ng ngha da trn lut c php. Cc vn c nghin cu trong phn c php iu khin v lc dch.

Mt h thng kiu ng n s xo b s cn thit phi kim tra ng (v n cho php xc nh tnh, cc li khng xy ra trong lc chng trnh ch chy). Mt ngn ng gi l nh kiu mnh nu chng trnh dch ca n c th bo m rng cc chng trnh m n dch tt s hot ng khng c li v kiu. iu quan trng l khi b kim tra pht hin li, n phi khc phc li d tip tc kim tra. trc ht n thng bo v li m t v v tr li. Li xut hin gy nh hng ncc lut kim tra li, do vy phi thit k kiu h thng nh th no cc lut c th ng u vi cc li ny.

3.1. Mt s lut ng ngha kim tra kiu


i vi cu lnh khng c gi tr, ta c th gn cho n kiu c s c bit void. Nu c li v kiu c pht hin trong cu lnh th ta gn cho n gi tr kiu l type_error

Xt cch xy dng lut ng ngha kim tra kiu qua mt s v d sau: VD1: Vn phm cho khai bo: D -> D ; D D -> id : T T -> interger T -> char T -> ^ T T -> array [num] of T
Lut c php D -> id : T T -> char T -> interger T -> ^T1 T -> array [num] of T1 Lut ng ngha AddType(id.entry,T.type) T.type := char T.type := interger T.type := pointer(T1.type) T.type := array(num.val,T1.type)

VD2: Vn phm sau cho biu thc S -> id := E E -> E + E E -> E mod E

E -> E1 [ E2 ] E -> num E -> id

Lut c php S -> id := E

Lut ng ngha S.type := if id.type=E.type then void else type_error E.type:= if E1.type=interger and E2.type=interger then interger else if E1.type=interger and E2.type=real then real else if E1.type=real and E2.type=interger then real else if E1.type=real and E2.type=real then real else type_error E.type := interger E.type := GetType(id. entry) E.type := if E1.type=interger and E2.type=interger then interger else type_error E.type := if E2.type=interger and E1.type=array(s,t) then t else type_error

E -> E1 + E2

E -> num E -> id E -> E1 mod E2 E -> E1 [ E2 ]

VD3: Kim tra kiu cho cc cu lnh: S -> if E then S S -> while E do S S -> S1 ; S2

Lut c php

Lut ng ngha

S -> if E then S1

S.type := if E.type=boolean then S1.type else type_error

S -> while E do S1

S.type := if E.type=boolean then S1.type else type_error S.type := if S1.type=void and S2.type=void then void else type_error E -> E1 ( E2 )

S -> S1 ; S2

VD4: Kiu hm: lut c php sau y th hin li gi hm: V d: function f(a,b:char):^interger; begin ... end; var p:^interger; q:^char; x,y:interger; begin ... p:=f(x,y);// ng q:=f(x,y);// sai end;
Lut c php E -> E1 ( E2 ) Lut ng ngha

E.type := if E2.type=s and E1.type=s->t then t else type_error

3.2. V d v mt b kim tra kiu n gin.


V d v mt ngn ng n gin m kiu ca cc bin phi c khai bo trc khi dng. B kim tra kiu ny l mt c php dng lc chuyn i nhm tp hp kiu ca tng biu thc t cc kiu ca cc biu thc con. B kim tra kiu c th lm vic vi cc mng, cc con tr, lnh, hm. * Mt vn phm di y sinh ra cc chng trnh, biu din bi bin P, bao

gm mt chui cc khai bo D theo sau mt biu thc n E, cc kiu T. P D;E

D D;D|tn:T T char| integer| array| s| of T| ^T E ch ci| S | Tn| E mod E | E; E |E^ - Mt chng trnh c th sinh ra t vn phm trn nh sau: Key: Integer; Key mod 1999 * Lc chuyn i nh sau: P D; E D D;D D Tn:T {addtype (tn.entry, T.type)} T Char {T.type:= char} T integer {T.type:= integer} T ^T1 {T.type:= pointer(T1.type)} T array | s | of T1 {T.type:= aray(s.val,T1.type)}
Hnh ng ng vi sn xut D Tn:T lu vo bng k hiu mt kiu cho mt tn.

Hm
entry.

{addtype (tn.entry, T.type)} ngha l ct mt thuc tnh T.type vo bn k hiu v tr

* Kim tra kiu ca cc biu thc. Trong cc lut sau: E ch ci {E.type : = char} E S { E.type := integer} Kiu ca thuc tnh tng hp ca E cho biu thc c gn bng kiu h thng sinh biu thc bi E. Cc lut ng ngha cho thy cc hng s biu din bng t t ch ci v s c kiu char v integer. Ta dng hm lookup(e) ly kiu caats trong bng k hiu tr bi e. Khi mt tn xut hin trong biu thc kiu khao bo ca n c ly v gn cho thuc tnh kiu E tn {E.type:= lookup (tn.entry)} - Mt biu thc c to bi lnh mod cho 2 biu thc con c kiu integer th n cng c kiu l integer nu khng l kiu type_error. E E1 mod E2 {E.type : = if E1.type = integer and E2.type = integer then integer else type_error}

- i vi mng E1[E2 ]bieeur thc ch s E2 phi c kiu l integer cc phn t ca mng c kiu t chnh l kiu array(s,t) ca Et E E1[E2] {E.type :=if E2.type = integer and Et.type = array(s,t) then t else type_error} - i vi thut ton ly gi tr con tr. E Et^ {E.type := if E1.type = pointer (t) then else type_error} * Kim tra kiu ca cu lnh: i vi cu lnh khng c gi tr: gn kiu c bit void . nu c li c pht hin trong cu lnh : kiu cu lnh l : type_error. Cc cu lnh gm: lnh gn, iu kin, vng lp while. Chuooix cc cu lnh phn cch nhau bng du chm phy. mt chng trnh hon chnh c lut dng P D ; S cho bit mt chng trnh bao gm cc khai bo v theo sau l cc cu lnh . S tn: = E { S.type:= if tn.type= E.type then void else type _error } S if E else S1 {S.type := if E.type = boolean then S1.type else type_error } S While E do S1 {S.type:= if E.type = boolean then S1.type = void then void else type_error } * kim tra biu thc ca hm. Cc hm vi tham s c sn xut dng: E E (E) Cc lut ng vi kiu biu thc ca k hiu khng kt thc T c th lm tha s theo cc sn xut sau: T T1 T2 {T.type := T1.type T2.type} Lut kim tra kiu ca mt hm l: E E1(E2) {E.type : =if E2.type =s t then t else type_error} lut ny cho bit trong mt biu thc c to bng cch p dng E1 vo E2 kiu ca s t phi l mt hm t kiu ca s vo kiu no t. kiu E1(E2) l t. 3. MT S VN KHC CA KIM TRA KIU. 3.1. S tng ng ca kiu biu thc. Nhiu lut c dng if kiu ca 2 biu thc ging nhau th tr v kiu else tr v type _error Vy ln sao xc nh chnh xc khi no th 2 kiu biu thc l tng ng? Hm dng kim tra s tng ng v cu trc ca kiu biu thc.

Function sequiv(s,t): boolean; begin if s v t cng kiu c s then return true; else if s = array (s1,s2) and t = array (t1,t2) then return sequiv(s1,t1) and sequiv(s2,t2) else if s=pointer(s1) and t=pointer(t1) then return sequiv(s1,t1) else if s=s 1 s2 and t = t1 t2 then return sequiv(s 1,t1) and sequiv(s2,t2) else return false; end; 3.2. i kiu. Xt biu thc dng : x+i, (x: kiu real, i kiu integer)
Biu din real v integer trong my tnh l khc nhau ng thi cch thc hin php cng i vi s real v s integer khc nhau. thc hin php cng, trc tin chng trnh

dch i c 2 ton t v mt kiu (kiu real) sau thc hin cng. B kim tra kiu trong chng trnh dch c dng chn thm php ton vo cc biu din trung gian ca chng trnh ngun. V d: chn thm php ton inttoreal (dng chuyn mt s integer thnh s real) ri mi thc hin php cng s thc real + nh sau: xi inttoreal real + * p kiu: Mt php i kiu c gi l khng r (n) nu n thc hin mt cch t ng bi chng trnh dch, php i kiu ny cn gi l p kiu. (p kiu thng gy
mt thng tin)

Mt php i kiu c gi l r nu ngi lp trnh phi vit s th thc hin php i ny. V d: Sn xut E S E S.s E tn E.type:= integer E.type:= real E.type:= lookup (tn.entry) Lut ng ngha

E E1 op E2

E,type:= if E1.type = integer and E2.type = integer Then integer Else if E1.type = integer and E2.type = real Then real Else if E1.type = real and E2.type = integer Then real Else if E1.type = real and E2.type = real Then real Else type_error

3.3. nh ngha chng ca hm v cc php ton. K hiu chng l k hiu c nhiu ngha khc nhau ph thc vo ng cnh ca n.
VD: + l ton t chng, A+B ngha khc nhau i vi tng trng hp A,B l s nguyn, s thc, s phc, ma trn

nh ngha chng cho php to ra nhiu hm khc nhau nhng c cng mt tn. xc nh thc s dng nh ngha chng no ta phi cn c vo ng cnh lc p dng. iu kin thc hin ton t chng l phi c s khc nhau v kiu hoc s tham s. Do ta c th da vo lut ng ngha kim tra kiu v gi cc hm x l.

CHNG 7

BNG K HIU.

1. MC CH, NHIM V. Mt chng trnh dch cn phi thu thp v s dng cc thng tin v cc tn trong chng trnh ngun. Cc thng tin ny c lu trong mt cu trc d liu gi l mt bng k hiu. Cc thng tin bao gm tn, kiu, dng ca n ( mt bin hay l mt cu trc), v tr cu n trong b nh, cc thuc tnh khc ph thuc vo ngn gn lp trnh. Mi ln tn cn xem xt, chng trnh dch s tm trong bng k hiu xem c tn cha. Nu tn l mith thm vo bng. Cc thng tin v tn c tm v a vo bng trong giai on phn tch t vng v c php. Cc thng tin trong bng k hiu c dng trong phn tch ng ngha, ( kim travic dng cc tn c khp vi khai bo khng) trong giai on sinh m ( kch thc ca tn, loi b nh phi cp pht cho mt tn). Dng bng k hiu trong qu trnh pht hin v khi phc li. 2. CC YU CU I VI BNG K HIU. Ta cn c mt s kh nng lm vic vi bng nh sau: 1) pht hin mt tn cho trc c trong bng hay khng? 2) thm tn mi. 3) ly thng tin tng ng vi tn cho trc. 4) thm thng tin mi vo tn cho trc. 5) xo mt tn hoc nhm tn. Cc thng tin trong bng k hiu c th gm: 1) Xu k t to nn tn. 2) Thuc tnh ca tn. 3) cc tham s nh s chiu ca mng. 4) C th c con tr n tn cp pht. Cc thng tin a vo bgn trong nhng thi im khc nhau. 3. CU TRC D LIU CA BNG K KIU
C nhiu cch t chc bng k hiu khc nhau nh c th tch bng ring r ng vi tn bin, nhn, hng s, tn hm v cc kiu tn khc tu thuc vo tng ngn ng. V cch t chc d liu c th t chc bi danh sch tuyn tnh, cy tm kim, bng bm

Mi trong bng k hiu tng ng vi mt tn. nh dng ca cc ny thng khng ging nhau v thng tin lu tr v mt tn ph thuc vo vic s dng tn . Thng thng mt c ci t bi mt mu tin c dng ( tn, thuc tnh).

Nu mun c c s ng nht ca cc mu tin ta c th lu thng tin bn ngoi bng k hiu, trong mi ca bng ch cha cc con tr tr ti thng tin , Trong bng k hiu cng c th c lu cc t kha ca ngn ng. Nu vy th chng phi c a vo bng k hiu trc khi b phn tch t vng bt u.
* Nu ghi trc tip tn trong trng tn ca bng th: u im: n gin, nhanh.

Nhc im: di tn b gii hn bi kch thc ca trng , hiu qu s dng b nh khng cao.

Trng hp danh biu b gii hn v di th chui cc k t to nn danh biu c lu tr trong bng k hiu.
Name s o a r i e a d a r r a y r t Attribute

Hnh 7.19 - Bng k hiu lu gi cc tn b gii hn di

Trng hp di tn khng b gii hn th cc Lexeme c lu trong mt mng ring v bng k hiu ch gi cc con tr tr ti u mi Lexeme

Hnh 7.20 - Bng k hiu lu gi cc tn khng b gii hn di

3.1 Danh sch.


Cu trc n gin, d ci t nht cho bng k hiu l danh sch tuyn tnh ca cc mu tin.

Ta dng mt mng hoc nhiu mng tng ng lu tr tn v cc thng tin kt hp vi chng. Cc tn mi c a vo trong danh sch theo th t m chng c pht hin. V tr ca mng c nh du bi con tr available ch ra mt mi ca bng s c to ra. Vic tm kim mt tn trong bng k hiu c bt u t available n u bng. Trong cc ngn ng cu trc khi s dng quy tc tm tnh. Thng tin kt hp vi tn c th bao gm c thng tin v su ca tn. Bng cch tm kim t available tr v u mng chng ta m bo rng s tm thy tn trong tng gn nht.

Hnh 7.21 - Danh sch tuyn tnh cc mu tin

3.2. Cy tm kim. Mt trong cc dng cy tm kim hiu qu l: cy tm kim nh phn tm kim. Cc nt ca cy c kho l tn ca bn ghi, hai con tro Left, right. i vi mi nt trn cy phi tho mn: - Mi kho thuc cy con tri nh hn kho ca gc. - Mi nt ca cy con phi ln hn kho ca gc. Gii thut tm kim trn cy nh phn: - So snh gi tr tm kim x vi kho ca gc:

+ Nu trng: tm kim tho mn. + Nu < hn: Thc hin li cch tm kim vi cy con bn tri. + Nu > gc: thc hin li cch tm kim vi cy con bn phi.
m bo thi gian tm kim ngi ta thay th cy nh phn tm kim bng cy nh phn cn bng.

3.3. Bng Bm.


K thut s dng bng bm ci t bng k hiu thng c s dng v tnh hiu qu ca n.

Cu to bao gm hai phn; bng bm v cc danh sch lin kt.

Hnh 7.22 - Bng bm c kch thc 211

1. Bng bm l mt mng bao gm m con tr. 2. Bng danh biu c chia thnh m danh sch lin kt, mi danh sch lin kt c tr bi mt phn t trong bng bm. Vic phn b cc danh biu vo danh sch lin kt no do hm bm (hash function) quy nh. Gi s s l chui k t xc nh danh biu, hm bm h tc ng ln s tr v mt gi tr nm gia 0 v m- 1 h(s) = t => Danh biu s c a vo trong danh sch lin kt c tr bi phn t t ca bng bm.
C nhiu phng php xc nh hm bm.

Phng php n gin nht nh sau:

1. Gi s s bao gm cc k t c1, c2, c3, ..., ck. Mi k t cho ng vi mt s nguyn dng n1, n2, n3,...,nk; ly h = n1 + n2 +...+ nk. 2. Xc nh h(s) = h mod m

CHNG 8

SINH M TRUNG GIAN.

1. MC CH NHIM V. * Sinh m trung gian c nhng u im nh sau: - D thit k tng phn - Sinh c m c lp vi tng my tnh c th. T lm gim phc tp ca sinh m thc s. - D ti u m. * Cc vn ca b sinh m trung gian l: - Dng m trung gian no. - Thut ton sinh m trung gian.
Hnh ng sinh m trung gian thc hin qua c php iu khin. Ngn ng trung gian l ngn ng nm gia ngn ng ngun v ngn ng ch. Chng trnh vit bng ngn ng trung gian vn tng ng vi chng trnh vit bng ngn ng ngun v chc nng nhim v. Sau y ta xt loi m trung gian thng dng nht.

2. CC NGN NG TRUNG GIAN


Cy c php, k php hu t v m 3 a ch l cc loi biu din trung gian. 2.1. th.

Cy c php m t cu trc phn cp t nhin ca chng trnh ngun. DAG cho ta cng lng thng tin nhng bng cch biu din ngn gn hn trong cc biu thc con khng c biu din lp li.
V d 8.1: Vi lnh gn a := b * - c + b * - c, ta c cy c php v DAG:

Hnh 8.1 - Biu din th ca a :=b * - c + b * - c

K php hu t l mt biu din tuyn tnh ca cy c php. N l mt danh sch cc nt ca cy, trong mt nt xut hin ngay sau con ca n . a b c - * b c - * + := l biu din hu t ca cy c php hnh trn. Cy c php c th c ci t bng mt trong 2 phng php: - Mi nt c biu din bi mt mu tin, vi mt trng cho ton t v cc trng khc tr n con ca n. - Mt mng cc mu tin, trong ch s ca phn t mng ng vai tr nh l con tr ca mt nt. Tt c cc nt trn cy c php c th tun theo con tr, bt u t nt gc ti 10

Hnh 8.2 - Hai biu din ca cy c php trong hnh 8.1

2.2. K php hu t. nh ngha k php hu t ca mt biu thc: 1) E l mt bin hoc hng s, k php hu t ca E l E. 2) E l biu thc dng: E1 op E2vi op l ton t 2 ngi th k php hu t ca E l: E1E2op vi E1, E2 l k php hu t ca E1, E2 tng ng.

3) Nu E l biu thc dng (E1), th k php hu t ca E1 cng l k php hu t ca E. V d: V d: K php hu t ca (9-5)+2 l 95-2+; K php hu t ca 9-(5+2) l 952+-; K php hu t ca cu lnh if a then if c-d then a+c else a*c else a+b l a?(c-d?a+c:a*c):a+b tc l: acd-ac+ac*?ac+? * nh ngha c php iu khin to m hu t.

M 3 A CH.

M ba a l mt chui cc cu lnh, thng thng c dng:


ton hc, logic

x:= y op z

X,y,z l tn, hng do ngi lp trnh t t, op l mt php ton no php ton

Di y l mt s cu lnh ba a ch thng dng: 1. Cc cu lnh gn c dng x := y op z, trong op l mt php ton s hc hai ngi hoc php ton logic. 2. Cc php gn c dng x := op y, trong op l php ton mt ngi. Cc php ton mt ngi ch yu l php tr, php ph nh logic, php chuyn i kiu, php dch bt. 3. Cc cu lnh sao chp dng x := y, gn y vo x. 4. Lnh nhy khng iu kin goto L. Cu lnh ba a ch c nhn L l cu lnh c thc hin tip theo. 5. Cc lnh nhy c iu kin nh if x relop y goto L. Cu lnh ny thc hin mt php ton quan h cho x v y, thc hin cu lnh c nhn L nu quan h ny l ng, nu tri li s thc hin cu lnh tip theo. 6. Cu lnh param x v call p,n dng gi th tc. Cn lnh return y tr v mt gi tr lu trong y. V d gi th tc p(x1,x2,...,xn) th s sinh cc cu lnh ba a ch tng ng nh sau: param x1 param x2 ...

param xn call p, n 7. Cc php gn ch s c dng x := y[i] c ngha l gn cho x gi tr ti v tr i sau y tng t i vi x[i] := y 8. Php gn a ch v con tr c dng x := &y, x := *y, *x := y 2.1. Ci t cc cu lnh ba a ch
Trong chng trnh dch, nhng cu lnh m 3 a ch c th c ci t nh cc cu trc vi cc trng cha cc ton t v ton hng. Nhng biu din l b t (quadruple) v b ba (triple).

2.1.1. B t B t l mt cu trc bn ghi vi bn trng, c gi l op, arg1, arg2 v result.


V d: cu lnh x := y + z op l +, arg1 l y, arg2 l z v result cha x. i vi ton t mt ngi th khng dng arg2.

V d: Cu lnh a := -b * (c+d) s c chuyn thnh on m ba a ch nh sau: t1 := - b t2 := c+d t3 := t1 * t2 a := t3


v c biu din bng b t nh sau:

0 1 2 3 2.1.2. B ba

Op Uminus + * Assign

arg1 b c t1 t3

arg2 d t2

result t1 t2 t3 a

trnh phi a cc tn tm thi vo bng k hiu, chng ta c th tham chiu n mt gi tr tm bng v tr ca cu lnh dng tnh n (tham chiu n cu lnh chnh l tham chiu n con tr cha b ba ca cu lnh ). Nu

chng ta lm nh vy, cu lnh m ba a ch s c biu din bng mt cu trc ch gm c ba trng op, arg1 v arg2. V d trn s c chuyn thnh b ba nh sau: op uminus + * assign arg1 b c (0) a arg2 d (1) (2)

0 1 2 3

Ch , cu lnh sao chp t kt qu trong arg1 v tham s trong arg2 v ton t l assign.

Cc s trong ngoc trn biu din cc con tr ch n mt cu trc b ba, cn con tr ch n bng k hiu c biu din bng chnh cc tn. Trong thc hnh, thng tin cn din gii cc loi mc ghi khc nhau trong arg1 v arg2 c th c m ho vo trng op hoc a thm mt s trng khc. Ch , php ton ba ngi nh x[i] := y cn n hai mc trong cu trc b ba nh c ch ra nh sau: op []= assign arg1 x (0) arg2 i y

(0) (1)

tng t i vi php ton ba ngi x := y[i]

(0) (1)

op []= assign

arg1 y x

arg2 i (0)

2.2. C php iu khin sinh m ba a ch i vi mi k hiu X, k hiu:

- X.place l ni cha m ba a ch sinh ra bi X (dng cha cc kt qu

trung gian). V th s c mt hm nh ngha l newtemp dng sinh ra mt bin trung gian


(bin tm) gn cho X.place. - X.code cha on m ba a ch ca X - Th tc gen sinh ra cu lnh ba a ch. Sau y, chng ta xt v d sinh m ba a ch cho mt s dng cu lnh.

2.2.1. Sinh m ba a ch cho biu thc s hc: Sn xut S -> id := E E -> E1 + E2 Lut ng ngha S.code := E.code || gen(id.place := E.place) E.place := newtemp; E.code := E1.code || E2.code || gen(E.place := E1.place + E2.place) E.place := newtemp; E.code := E1.code || E2.code || gen(E.place := E1.place + E2.place) E.place := newtemp; E.code := E1.code || gen(E.place := uminus E1.place) E.place := E1.place E.code := E1.code E.place := id.place E.code :=

E -> E1 * E2

E -> - E1

E -> ( E1 )

E -> id

V d: Hy sinh m ba a ch cho cu lnh sau x := a + ( b * c ) S => x := E => x := E1 + E2 => x := a + E2 => x := a + ( E3 )

=> x := a + ( E4 * E5 ) => x := a+ ( b * E5 ) => x := a + ( b * c ) E5.place := c E5.code := E4.place := b E4.code := E3.place := t1 E3.code := t1 := b * c E2.place := t1 E2.code := t1 := b * c E1.place := a E1.code := E1.place := a E1.code := E.place := t2 E.code := t1 := b * c || t2 := a + t1 S.code := t1 := b * c || t2 := a + t1 || x := t2 2.2.2. Sinh m ba a ch cho biu thc Boole: i vi mt biu thc Boole E, ta dch E thnh mt dy cc cu lnh ba a ch, trong i vi cc php ton logic s sinh ra cc lnh nhy c iu kin v khng c iu kin n mt trong hai v tr: E.true, ni quyn iu khin s chuyn ti nu E ng, v E.false, ni quyn iu khin s chuyn ti nu E sai. V d: E c dng a<b. Th th m sinh ra s c dng if a<b goto E.true goto E.false V d if a>b then a:=a-b; else b:=b-a; c chuyn thnh m ba a ch nh sau E.true = L1 v E.false = L2 if a>b goto L1 goto L2 L1: t1 := a b a := t1 goto Lnext L2: t2 := b-a b := t2 Lnext: Mt s c php iu khin sinh m ba a ch cho cc biu thc Boole.
sinh ra cc nhn, chng ta s dng th tc newlable sinh ra mt nhn mi.

on lnh sau:

Sn xut E -> E1 or E2

Lut ng ngha E1.true := E.true; E1.false := newlable; E2.true := E.true; E2.false := E.false; E.code := E1.code || gen(E1.false :) || E2.code E1.true := newlable; E1.false := E.false; E2.true := E.true; E2.false := E.false; E.code := E1.code || gen(E1.true :) || E2.code E1.true := E.false; E1.false := E.true; E.code := E1.code; E1.true := E.true; E1.false := E.false; E.code := E1.code; E.code := gen(if id1.place relop.op id2.place goto E.true) || gen(goto E.false) E.code := gen(goto E.true) E.code := gen(goto E.false)

E -> E1 and E2

E -> not E1

E -> ( E1 )

E -> id1 relop id2 E -> true E -> false

V d: Sinh m ba a ch cho on chng trnh sau: if a>b and c>d then x:=y+z else x:=y-z Li gii: Nu coi E l biu thc logic a>b and c>d th on chng trnh trn tr thnh

if E then x:=y+z , khi m ba a ch cho on chng trnh c dng: E.code { if E=true goto E.true goto E.false } E.true: t1:= y+z x := t1; E.false : t2 := y-z x :=t2
Nh vy chng ta phi phn tch bn trong ca biu thc E, v d thy cc lnh nhy bn trong E chnh l E.true v E.false, iu gii thch ti sao chng ta li c cc lut ng ngha nh bng trn.

p dng cc lut sinh m ba a ch trong bng trn chng ta c on m ba a ch cho on chng trnh ngun trn l: if a>b goto L1 goto L3 L1: if c>d goto L2 goto L3 L2: t1 := y+z

x := t1 goto L4 L3: t2 := y-z x := t2 L4: 2.2.3. Sinh m ba a ch cho mt s lnh iu khin: Trong cc cu lnh iu khin c iu kin, ta da vo biu thc logic E chuyn vic thc hin cc cu lnh ti v tr thch hp. Do ta cn hai nhn: E.true ( xc nh v tr cu lnh chuyn ti khi biu thc logic E l ng), nhn E.false ( xc nh v tr cu lnh chuyn ti khi biu thc logic E l sai). sinh ra mt nhn mi, ta dng th tc newlable. Nhn S.next i vi khi lnh sinh ra bi k hiu S l nhn xc nh v tr tip theo ca cc lnh sau S.

i vi cu lnh S -> while E do S1 ta cn c mt nhn bt u ca khi lnh ny nhy n mi khi E ng, v vy cn nhn S.begin xc nh v tr bt u khi lnh ny. Sn xut S -> if E then S1
Lut ng ngha

E.true := newlable; E.false := S.next; S1.next := S.next; S.code := E.code || gen(E.true :) || S1.code E.true := newlable; E.false := newlable; S1.next := S.next; S2.next := S.next; S.code := E.code || gen(E.true :) || S1.code || gen(goto S.next) || gen(E.false :) || S2.code S.begin := newlable; E.true := newlable; E.false := S.next S1.next := S.begin; S.code := gen(S.begin :) || E.code || gen(E.true :) || S1.code || gen(goto S.begin)

S -> if E then S1 else S2

S -> while E do S1

V d 1: sinh on m ba a ch cho on m ngun sau: while a<>b do if a>b then a:=a-b else b:=b-a Li gii: L1: if a<>b goto L2 goto Lnext L2: if a>b goto L3 goto L4 L3: t1 := a-b

L4:

a := t1 goto L1 t2 := b-a b := t2 goto L1

Lnext: 2.2.3.Cc khai bo. i vi cc khai bo nh danh, ta khng sinh ra m lnh tng ng trong m ba a ch m dng bng k hiu lu tr. Nh vy c th hiu l kt qu ca sinh m ba
a ch t chng trnh ngun l tp lnh ba a ch v bng k hiu qun l cc nh danh.

Vi mi nh danh, ta lu cc thng tin v kiu v a ch tng i lu gi tr cho nh danh . V d: Gi s k hiu offset cha a ch tng i ca cc nh danh; mi s interger chim 4 byte, s real cha 8 byte v mi con tr cha 4 byte; gi s hm enter dng nhp thng tin v kiu v a ch tng i cho mt nh danh, chng ta c v d di y m ta vic sinh thng tin vo bng k hiu cho cc khai bo. Sn xut P -> D D -> D ; D D -> id : T T -> interger T -> real T -> array [ num ] of T1 T -> ^T1 enter(id.name,T.type, offset) ; offset := offset + T. width T.type := interger; T. width := 4 T.type := real; T. width := 8 T.type := array(num.val,T1.type); T.width := num.val * T1. width T.type := pointer(T1.type) T. width := 4 Lut ng ngha offset := 0

Trong cc on m ba a ch, khi cp n mt tn, ta s tham chiu n bng k hiu ly thng tin v kiu, a ch tng ng s dng trong cc cu lnh. Hay
ni cch khc chng ta c th thay mt nh danh bi ch mc ca nh danh trong bng k hiu.

Ch : a ch tng i ca mt phn t trong mng, v d x[i], c tnh bng a ch ca x cng vi i ln di ca mi phn t. Bi tp Bi tp 1: Hy chuyn cc cu lnh hoc on chng trnh sau thnh on m ba a ch: 1) a * - (b+c) 2) on chng trnh C main () { int i; int a[100]; i=1; while(i<=10) { a[i]=0; i=i+1; } }
.1. Dch biu thc : a * - ( b + c) thnh cc dng : a) Cy c php. b) K php hu t. c) M lnh my 3 - a ch. 8.2. Trnh by cu trc lu tr biu thc - ( a + b) * ( c + d ) + ( a + b + c) cc dng : a) B t . b) B tam. c) B tam gin tip. 8.3. Sinh m trung gian ( dng m my 3 - a ch) cho cc biu thc C n gin sau : a) x = 1 b) x = y c) x = x + 1 d) x = a + b * c e) x = a / ( b + c) - d * ( e + f ) 8.4. Sinh m trung gian ( dng m my 3 - a ch) cho cc biu thc C sau :

a) x = a [i] + 11 b) a [i] = b [ c[j] ] c) a [i][j] = b [i][k] * c [k][j] d) a[i] = a[i] + b[j] e) a[i] + = b[j] 8.5. Dch lnh gn sau thnh m my 3 - a ch : A [ i,j ] := B [ i,j ] + C [A[ k,l]] + D [ i + j ]

CHNG 9 1. MC CH NHIM V

SINH M

Giai on cui ca qu trnh bin dch l sinh m ch. K thut sinh m ch c


trnh by trong chng ny khng ph thuc vo vic dng hay khng dng giai on ti u m trung gian

Sinh m tt rt kh, m sinh ra thng gn vi mt loi my tnh c th no . u vo ca b sinh m l m trung gian, u ra l mt chng trnh vit dng m i tng no v gi l chng trnh ch.
u vo ca b sinh m gm biu din trung gian ca chng trnh ngun, cng thng tin trong bng danh biu c dng xc nh a ch ca cc i tng d liu trong thi gian thc thi. Cc i tng d liu ny c tng trng bng tn trong biu din trung gian. Biu din trung gian ca chng trnh ngun c th mt trong cc dng: k php hu t, m ba a ch, cy c php, DAG

Tiu chun quan trng nht i vi b sinh m l sinh m ng. Tnh ng ca m c mt ngha rt quan trng. Vi nhng quy nh v tnh ng ca m, vic thit k b sinh m sao cho n c thc hin, kim tra, bo tr n gin l mc tiu thit k quan trng .

2. CC DNG M I TNG. 2.1. M my nh v tuyt i. Mt chng trnh m my tuyt i c cc lnh m my c nh v tuyt i. Chng trnh dch xc nh hon ton chng trnh i tng ny. M c mt chng trnh dch thc s to ra v t vo cc v tr ny nn chng trnh c th hot ng ngay.

u im: gim s 2.2. M i tng c th nh v li c. 2.3. M i tng thng dch.


Vic to ra chng ch dng hp ng cho php ta dng b bin dch hp ng to ra m my.

3. CC VN THIT K CA B SINH M.
S la chn ch th Tp cc ch th ca my ch s xc nh tnh phc tp ca vic la chn ch th. Tnh chun v hon chnh ca tp ch th l nhng yu t quan trng. Nu my ch khng cung cp mt mu chung cho mi kiu d liu th mi trng hp ngoi l phi x l ring. Tc ch th v s biu din ca my cng l nhng yu t quan trng. Nu ta khng quan tm n tnh hiu qu ca chng trnh ch th vic la chn ch th s n gin hn. Vi mi lnh ba a ch ta c th phc ha mt b khung cho m ch. Gi s lnh ba a ch dng x := y + z, vi x, y, z c cp pht tnh, c th c dch sang chui m ch: MOV y, R0 ADD z, R0 MOV R0, x /* Lu y vo thanh ghi Ro */ /* cng z vo ni dung Ro, kt qu cha trong Ro */ /* lu ni dung Ro vo x */

Tuy nhin vic sinh m cho chui cc lnh ba a ch s dn n s d tha m. Chng hn vi: a:= b + c d:= a + e ta chuyn sang m ch: MOV b, Ro ADD c, Ro MOV Ro, a MOV a, R0 ADD e,Ro MOV Ro, d v ta nhn thy rng ch th th t l tha. Cht lng m c to ra, c xc nh bng tc v kch thc ca m. Mt my ch c tp ch th phong ph c th s cung cp nhiu cch hin thc mt tc v cho trc. iu ny c th dn n tc thc hin ch th rt khc nhau. Chng hn, nu my ch c ch th INC th cu lnh ba a ch a := a + 1 c th c ci t ch bng cu lnh INC a. Cch ny hiu qu hn l dng chui cc ch th sau:

MOV a, Ro ADD # 1, Ro MOV Ro ,a Nh ta ni, tc ca ch th l mt trong nhng yu t quan trng thit k chui m tt. Nhng, thng tin thi gian thng kh xc nh. Vic quyt nh chui m my no l tt nht cho cu lnh ba i ch cn ph thuc vo ng cnh ca ni ch cu lnh . Cp pht thanh ghi Cc ch th dng ton hng thanh ghi thng ngn hn v nhanh hn cc ch th dng ton hng trong b nh. V th, hiu qu ca thanh ghi c bit quan trng trong vic sinh m tt. Ta thng dng thanh ghi trong hai trng hp: 1. Trong khi cp pht thanh ghi, ta la chn tp cc bin lu tr trong cc thanh ghi ti mt thi im trong chng trnh. 2. Trong khi gn thanh ghi, ta ly ra thanh ghi c bit m bin s thng tr trong . Vic tm kim mt lnh gn ti u ca thanh ghi, ngay vi c cc gi tr thanh ghi n, cho cc bin l mt cng vic kh khn. Vn cng tr nn phc tp hn v phn cng v / hoc h iu hnh ca my ch yu cu qui c s dng thanh ghi.

3.3. Qun l b nh.


Trong phn ny ta s ni v vic sinh m qun l cc mu tin hot ng trong thi gian thc hin. Hai chin lc cp pht b nh chun c trnh by trong chng VII l cp pht tnh v cp pht Stack. Vi cp pht tnh, v tr ca mu tin hot ng trong b nh c xc nh trong thi gian bin dch. Vi cp pht Stack, mt mu tin hot ng c a vo Stack khi c s thc hin mt th tc v c ly ra khi Stack khi hot ng kt thc. y, ta s xem xt cch thc m ch ca mt th tc tham chiu ti cc i tng d liu trong cc mu tin hot ng. Nh ta ni chng VII, mt mu tin hot ng cho mt th tc c cc trng: tham s, kt qu, thng tin v trng thi my, d liu cc b, lu tr tm thi v cc b, v cc lin kt. Trong phn ny, ta minh ha cc chin lc cp pht s dng trng trng thi gi gi tr tr v v d liu cc b, cc trng cn li c dng nh cp chng VII. Vic cp pht v gii phng cc mu tin hot ng l mt phn trong chui hnh vi gi v tr v ca chng trnh con. Ta quan tm n vic sinh m cho cc lnh sau: 1. call 2. return 3. halt 4. action /* tng trng cho cc lnh khc */

Chng hn, m ba a ch, ch cha cc loi cu lnh trn, cho cc chng trnh c v p cng nh cc mu tin hot ng ca chng:

Hnh 9.2 - u vo ca b sinh m Kch thc v vic xp t cc mu tin c kt hp vi b sinh m nh thng tin v tn trong bng danh biu. Ta gi s b nh thi gian thc hin c phn chia thnh cc vng cho m, d liu tnh v Stack. 1. Cp pht tnh Chng ta s xt cc ch th cn thit thc hin vic cp pht tnh. Lnh call trong m trung gian c thc hin bng dy hai ch th ch. Ch th MOV lu a ch tr v. Ch th GOTO chuyn quyn iu khin cho chng trnh c gi. MOV # here + 20, callee.static_area GOTO callee.code_area Cc thuc tnh callee.static_area v callee.code_area l cc hng tham chiu ti cc a ch ca mu tin hot ng v ch th u tin trong on m ca chng trnh con c gi. # here + 20 trong ch th MOV l a ch tr v. N cng chnh l a ch ca ch th ng sau lnh GOTO. M ca chng trnh con kt thc bng lnh tr v chng trnh gi, tr chng trnh chnh, l lnh halt. Lnh ny tr quyn iu khin cho h iu hnh. Lnh tr v c dch sang m my l GOTO *callee_static_area thc hin vic chuyn quyn iu khin v a ch c lu gi nh u tin ca mu tin hot ng .

V d 9.1: M ch trong chng trnh sau c to ra t cc chng trnh con c v p hnh 9.2. Gi s rng: cc m c lu ti a ch bt u l 100 v 200, mi ch th action chim 20 byte, v cc mu tin hot ng cho c v p c cp pht tnh bt u ti cc a ch 300 v 364 . Ta dng ch th action thc hin cu lnh action. Nh vy, m ch cho cc chng trnh con: /* m cho c*/ 100: ACTION1 120: MOV #140, 364 132: GOTO 200 140: ACTION2 160: HALT 200: ACTION3 220: GOTO *364 300: 304: 364: 368: /* lu a ch tr v 140 */ /* gi p */

/* m cho p */ /* tr v a ch c lu ti v tr 364 */ /* 300-364 lu mu tin hot ng ca c */ /* cha a ch tr v */ /* d liu cc b ca c */ /* 364 - 451 cha mu tin hot ng ca p */ /* cha a ch tr v */ /* d liu cc b ca p */ Hnh 9.3 - M ch cho u vo ca hnh 9.2 S thc hin bt u bng ch th action ti a ch 100. Ch th MOV a ch 120 s lu a ch tr v 140 vo trng trng thi my, l t u tin trong mu tin hot ng ca p. Ch th GOTO 200 s chuyn quyn iu khin v ch th u tin trong on m ca chng trnh con p. Ch th GOTO *364 ti a ch 132 chuyn quyn iu khin sang ch th u tin trong m ch ca chng trnh con c gi. Gi tr 140 c lu vo a ch 364, *364 biu din gi tr 140 khi lnh GOTO ti a ch 220 c thc hin. V th quyn iu khin tr v a ch 140 v tip tc thc hin chng trnh con c. 2. Cp pht theo c ch Stack Cp pht tnh s tr thnh cp pht Stack nu ta s dng a ch tng i lu gi cc mu tin hot ng. V tr mu tin hot ng ch c xc nh trong thi gian thc thi. Trong cp pht Stack, v tr ny thng c lu vo thanh ghi. V th cc nh ca mu tin hot ng c truy xut nh l di (offset) so vi gi tr trong thanh ghi . Thanh ghi SP cha a ch bt u ca mu tin hot ng ca chng trnh con nm trn nh Stack. Khi li gi ca chng trnh con xut hin, chng trnh b gi c cp pht,

SP c tng ln mt gi tr bng kch thc mu tin hot ng ca chng trnh gi v chuyn quyn iu khin cho chng trnh con c gi. Khi quyn iu khin tr v cho chng trnh gi, SP gim i mt khong bng kch thc mu tin hot ng ca chng trnh gi. V th, mu tin ca chng trnh con c gi c gii phng. M cho chng trnh con u tin c dng: MOV # Stackstart, SP /* khi ng Stack */ on m cho chng trnh con HALT /* kt thc s thc thi */ Trong ch th u tin MOV #Stackstart, SP khi ng Stack theo cch t SP bng vi a ch bt u ca Stack trong vng nh. Chui gi s tng gi tr ca SP, lu gi a ch tr v v chuyn quyn iu khin v chng trnh c gi. ADD # caller.recordsize, SP MOV # here + 16, *SP GOTO callee.code_area /* lu a ch tr v */

Thuc tnh caller.recordsize biu din kch thc ca mu tin hot ng. V th, ch th ADD a SP tr ti phn bt u ca mu tin hot ng k tip. #here +16 trong ch th MOV l a ch ca ch th theo sau GOTO, n c lu ti a ch c tr bi SP. Chui tr v gm hai ch th: 1. Chng trnh con chuyn quyn iu khin ti a ch tr v GOTO *0(SP) /* tr v chng trnh gi */ SUB #caller.recordsize, SP Trong O(SP) l a ch ca nh u tin trong mu tin hot ng. *O(SP) tr v a ch c lu ti y. 2. Ch th SUB #caller.recordsize, SP: Gim gi tr ca SP xung mt khong bng kch thc mu tin hot ng ca chng trnh gi. Nh vy mu tin hot ng chng trnh b gi xa khi Stack . V d 9.2: Gi s rng kch thc ca cc mu tin hot ng ca cc chng trnh con s, p, v q c xc nh ti thi gian bin dch l ssize, psize, v qsize tng ng. nh u tin trong mi mu tin hot ng lu a ch tr v. Ta cng gi s rng, on m cho cc chng trnh con ny bt u ti cc a ch 100, 200, 300 tng ng, v a ch bt u ca Stack l 600. M ch cho chng trnh trong hnh 9.4 c m t trong hnh 9.5:

/* m cho s */ action1 call q action2 halt /* m cho p */ action3 return /* m cho q */ action4 call p action5 call q action6 call q return Hnh 9.4 - M ba a ch minh ho cp pht s dng Stack 100: MOV # 600, SP 108: ACTION1 128: ADD #ssize, SP 136: MOV #152, *SP 144: GOTO 300 152: SUB #ssize, SP 160: ACTION2 180: HALT 200: ACTION3 220: GOTO *0(SP) /* m cho s*/ /* khi ng Stack */ /* chui gi bt u */ /* lu a ch tr v */ /* gi q */ /* Lu gi SP */

/* m cho p */ /* tr v chng trnh gi */ /* m cho q */ 300: ACTION4 320: ADD #qsize, SP 328: MOV #344, *SP 336: GOTO 200 344: SUB #qsize, SP 352: ACTION5 372: ADD #qsize, SP 380: MOV #396, *SP 388: GOTO 300 /* nhy c iu kin v 456 */ /* lu a ch tr v */ /* gi p */

/* lu a ch tr v */ /* gi q */

396: SUB #qsize, SP 404: ACTION6 424: ADD #qsize, SP 432: MOV #448, *SP 440: GOTO 300 448: SUB #qsize, SP 456: GOTO *0(SP) 600:

/* lu a ch tr v */ /* gi q */ /* tr v chng trnh gi */ /* a ch bt u ca Stack trung tm */

Hnh 9.5 - M ch cho chui ba a ch trong hnh 9.4 Ta gi s rng action4 gm lnh nhy c iu kin ti a ch 456 c lnh tr v t q. Ngc li chng trnh quy q c th gi chnh n mi. Trong v d ny chng ta gi s ln gi u tin trn q s khng tr v chng tnh gi ngay, nhng nhng ln sau th c th. SP c gi tr lc u l 600, a ch bt u ca Stack. SP lu gi gi tr 620 ch trc khi chuyn quyn iu khin t s sang q v kch thc ca mu tin hot ng s l 20. Khi q gi p, SP s tng ln 680 khi ch th ti a ch 320 c thc hin, Sp chuyn sang 620 sau khi chuyn quyn iu khin cho chng trnh con p. Nu li gi quy ca q tr v ngay th gi tr lain nht ca SP trong sut qu trnh thc hin l 680. V tr c cp pht theo c ch Stack c th ln n a ch 739 v mu tin hot ng ca q bt u ti 680 v chim 60 byte. 3. a ch ca cc tn trong thi gian thc hin Chin lc cp pht lu tr v xp t d liu cc b trong mu tin hot ng ca chng trnh con xc nh cch thc truy xut vng nh ca tn. Nu chng ta dng c ch cp pht tnh vi vng d liu c cp pht ti a ch static. Vi lnh gn x := 0, a ch tng i ca x trong bng danh biu l 12. Vy a ch ca x trong b nh l static + 12. Lnh gn x:=0 c chuyn sang m ba a ch static[12] := 0. Nu vng d liu bt u ti a ch 100, m ch cho ch th l: MOV #0,112 Nu ngn ng dng c ch display truy xut tn khng cc b, gi s x l tn cc b ca chng trnh con hin hnh v thanh ghi R3 lu gi a ch bt u ca mu tin hot ng th chng ta s dch lnh x := 0 sang chui m ba a ch: t1 := 12 + R3 * t1 := 0 T ta chuyn sang m ch: MOV #0, 12(R3)

Ch rng, gi tr thanh ghi R3 khng c xc nh trong thi gian bin dch

3.4. Chn ch th lnh.


Tp cc ch th ca my ch s xc nh tnh phc tp ca vic la chn ch th. Tnh chun v hon chnh ca tp ch th l nhng yu t quan trng. Nu my ch khng cung cp mt mu chung cho mi kiu d liu th mi trng hp ngoi l phi x l ring. Tc ch th v s biu din ca my cng l nhng yu t quan trng. Nu ta khng quan tm n tnh hiu qu ca chng trnh ch th vic la chn ch th s n gin hn. Vi mi lnh ba a ch ta c th phc ha mt b khung cho m ch. Gi s lnh ba a ch dng x := y + z, vi x, y, z c cp pht tnh, c th c dch sang chui m ch: MOV y, R0 ADD z, R0 MOV R0, x /* Lu y vo thanh ghi Ro */ /* cng z vo ni dung Ro, kt qu cha trong Ro */ /* lu ni dung Ro vo x */

Tuy nhin vic sinh m cho chui cc lnh ba a ch s dn n s d tha m. Chng hn vi: a:= b + c d:= a + e ta chuyn sang m ch: MOV b, Ro ADD c, Ro MOV Ro, a MOV a, R0 ADD e,Ro MOV Ro, d v ta nhn thy rng ch th th t l tha. Cht lng m c to ra, c xc nh bng tc v kch thc ca m. Mt my ch c tp ch th phong ph c th s cung cp nhiu cch hin thc mt tc v cho trc. iu ny c th dn n tc thc hin ch th rt khc nhau. Chng hn, nu my ch c ch th INC th cu lnh ba a ch a := a + 1 c th c ci t ch bng cu lnh INC a. Cch ny hiu qu hn l dng chui cc ch th sau: MOV a, Ro ADD # 1, Ro MOV Ro ,a Nh ta ni, tc ca ch th l mt trong nhng yu t quan trng thit k chui m tt. Nhng, thng tin thi gian thng kh xc nh. Vic quyt nh chui m my no l tt nht cho cu lnh ba i ch cn ph thuc vo ng cnh ca ni ch cu lnh .

3.5. S dng thanh ghi.


Cc ch th dng ton hng thanh ghi thng ngn hn v nhanh hn cc ch th dng ton hng trong b nh. V th, hiu qu ca thanh ghi c bit quan trng trong vic sinh m tt. Ta thng dng thanh ghi trong hai trng hp: 1. Trong khi cp pht thanh ghi, ta la chn tp cc bin lu tr trong cc thanh ghi ti mt thi im trong chng trnh. 2. Trong khi gn thanh ghi, ta ly ra thanh ghi c bit m bin s thng tr trong . Vic tm kim mt lnh gn ti u ca thanh ghi, ngay vi c cc gi tr thanh ghi n, cho cc bin l mt cng vic kh khn. Vn cng tr nn phc tp hn v phn cng v / hoc h iu hnh ca my ch yu cu qui c s dng thanh ghi.

3.6. Th t lm vic.
Th t thc hin tnh ton c th nh hng n tnh hiu qu ca m ch . Mt s th t tnh ton c th cn t thanh ghi lu gi cc kt qu trung gian hn cc th t tnh ton khc. Vic la chn c th t tt nht l mt vn kh. Ta nn trnh vn ny bng cch sinh m cho cc lnh ba a ch theo th t m chng c sinh ra bi b m trung gian. Sinh m Tiu chun quan trng nht ca b sinh m l phi to ra m ng. Tnh ng ca m c mt ngha rt quan trng. Vi nhng quy nh v tnh ng ca m, vic thit k b sinh m sao cho n c thc hin, kim tra, bo tr n gin l mc tiu thit k quan trng .

4. MY CH.
Trong chng trnh ny, chng ta s dng my ch nh l my thanh ghi (register machine). My ny tng trng cho my tnh loi trung bnh. Tuy nhin, cc k thut sinh m c trnh by trong chng ny c th dng cho nhiu loi my tnh khc nhau. My ch ca chng ta l my tnh a ch byte vi mi t gm bn byte v c n thanh ghi : R0, R1 ... Rn-1 . My ch gm cc ch th hai a ch c dng chung: op source, destination Trong op l m tc v. Source (ngun) v destination (ch) l cc trng d liu. V d mt s m tc v: MOV ADD SUB chuyn source n destination cng source v destination tr source cho destination

Source v destination ca mt ch th c xc nh bng cch kt hp cc thanh ghi v cc v tr nh vi cc mode a ch. M t content (a) biu din cho ni dung ca thanh ghi hoc i ch ca b nh c biu din bi a. mode a ch cng vi dng hp ng v gi kt hp: Mode Absolute Register Indexed Indirect register Indirect indexed Dng M R c(R) *R *c(R) a ch M R c + contents ( R) contents ( R) contents (c+ contents ( R)) Gi 1 0 1 0 1

V tr nh M hoc thanh ghi R biu din chnh n khi c s dng nh mt ngun hay ch. di a ch c t gi tr trong thanh ghi R c vit l c( R). Chng hn: 1. MOV R0, M : Lu ni dung ca thanh ghi R0 vo v tr nh M . 2. MOV 4(R0), M : Xc nh mt a ch mi bng cch ly di tng i (offset) 4 cng vi ni dung ca R0, sau ly ni dung ti a ch ny, contains(4 + contains(R0)), lu vo v tr nh M. 3. MOV * 4(R0) , M : Lu gi tr contents (contents (4 + contents (R0))) vo v tr nh M. 4. MOV #1, R0 : Ly hng 1 lu vo thanh ghi R0. Gi ca ch th Gi ca ch th (instrustion cost) c tnh bng mt cng vi gi kt hp mode a ch ngun v ch trong bng trn. Gi ny tng trng cho chiu di ca ch th. Mode a ch dng thanh ghi s c gi bng khng v c gi bng mt khi n dng v tr nh hoc hng. Nu vn v tr nh l quan trng th chng ta nn ti thiu ha chiu di ch th. i vi phn ln cc my v phn ln cc ch th, thi gian cn ly mt ch th t b nh bao gi cng xy ra trc thi gian thc hin ch th. V vy, bng vic ti thiu ha di ch th, ta cn ti thiu ho c thi gian cn thc hin ch th. Mt s minh ha vic tnh gi ca ch th: 1. Ch th MOV R0, R1 : Sao chp ni dung thanh ghi R0 vo thanh ghi R1. Ch th ny c gi l mt v n ch chim mt t trong b nh . 2. MOV R5, M: Sao chp ni dung thanh ghi R5 vo v tr nh M. Ch th ny c gi tr l hai v a ch ca v tr nh M l mt t sau ch th.

3. Ch th ADD #1, R3: cng hng 1 vo ni dung thanh ghi R3. Ch th c gi l hai v hng 1 phi xut hin trong t k tip sau ch th. 4. Ch th SUB 4(R0), *12 (R1) : Lu gi tr ca contents (contents (12 + contents (R1))) - contents (4 + contents (R0)) vo ch *12( R1). Gi ca ch th ny l ba v hng 4 v 12 c lu tr trong hai t k tip theo sau ch th. Vi mi cu lnh ba a ch, ta c th c nhiu cch ci t khc nhau. V d cu lnh a := b + c - trong b v c l bin n, c lu cha trong cc v tr nh phn bit c tn b, c - c nhng cch ci t sau: 1. MOV b, Ro ADD c, R0 gi = 6 MOV Ro, a 2. MOV b, a gi = 6 ADD c, a 3. Gi s thanh ghi R0, R1, R2 gi a ch ca a, b, c. Chng ta c th dng hai a ch sau cho vic sinh m lnh: a := b + c => MOV *R1, *Ro gi = 2 ADD * R2, *Ro 4. Gi s thanh ghi R1 v R2 cha gi tr ca b v c v tr ca b khng cn lu li sau lnh gn. Chng ta c th dng hai ch th sau: ADD R2, R1 gi = 3 MOV R1, a Nh vy, vi mi cch ci t khc nhau ta c nhng gi khc nhau. Ta cng thy rng mun sinh m tt th phi h gi ca cc ch th . Tuy nhin vic lm kh m thc hin c. Nu c nhng quy c trc cho thanh ghi, lu gi a ch ca v tr nh cha gi tr tnh ton hay a ch a tr vo, th vic la chn ch th s d dng hn.

5. MT B SINH M N GIN.
Ta gi s rng, b sinh m ny sinh m ch t chui cc lnh ba a ch. Mi ton t trong lnh ba a ch tng ng vi mt ton t ca my ch. Cc kt qu tnh ton c th nm li trong thanh ghi cho ti bao lu c th c v ch c lu tr khi: (a) Thanh ghi c s dng cho s tnh ton khc (b) Trc khi c lnh gi chng trnh con, lnh nhy hoc lnh c nhn. iu kin (b) ch ra rng bt c gi tr no cng phi c lu vo b nh trc khi kt thc mt khi c bn. V sau khi ra khi khi c bn, ta c th i ti cc khi khc hoc ta c th i ti mt khi xc nh t mt khi khc. Trong trng hp (a), ta khng th lm c iu ny m khng gi s rng s lng c dng bi khi xut hin trong cng thanh ghi khng c cch no t ti khi . trnh li c th xy ra, gii thut sinh m n gin s lu gi tt c cc gi tr khi i qua ranh gii ca khi c bn cng nh khi gi chng trnh con.

Ta c th to ra m ph hp vi cu lnh ba a ch a := b + c nu ta to ra ch th n ADD Rj, Ri vi gi l 1. Kt qu a c a vo thanh ghi Ri ch nu thanh ghi Ri cha b, thanh ghi Rj cha c, v b khng c s dng na. Nu b trong Ri , c trong b nh , ta c th to ch th: ADD c, Ri gi = 2

Hoc nu b trong thanh ghi Ri v gi tr ca c c a t b nh vo Rj sau thc hin php cng hai thanh ghi Ri, Rj, ta c th to cc ch th: MOV c, Rj ADD Rj , Ri gi = 3

Qua cc trng hp trn chng ta thy rng c nhiu kh nng to ra m ch cho mt lnh ba a ch. Tuy nhin, vic la chn kh nng no li tu thuc vo ng cnh ca mi thi im cn to m. 1. M t thanh ghi v a ch Gii thut sinh m ch dng b m t (descriptor) lu gi ni dung thanh ghi v a ch ca tn. 1. B m t thanh ghi s lu gi nhng g tn ti trong tng thanh ghi cng nh cho ta bit khi no cn mt thanh ghi mi. Ta gi s rng lc u, b m t s khi ng sao cho tt c cc thanh ghi u rng. Khi sinh m cho cc khi c bn, mi thanh ghi s gi gi tr 0 hoc cc tn ti thi im thc hin. 2. B m t a ch s lu gi cc v tr nh ni gi tr ca tn c th c tm thy ti thi im thc thi. Cc v tr c th l thanh ghi, v tr trn Stack, a ch b nh. Tt c cc thng tin ny c lu cha trong bng danh biu v s c dng xc nh phng php truy xut tn. 2. Gii thut sinh m ch Gii thut sinh m s nhn vo chui cc lnh ba a ch ca mt khi c bn. Vi mi lnh ba a ch dng x := y op z ta thc hin cc bc sau: 1. Gi hm getreg xc nh v tr L ni lu gi kt qu ca php tnh y op z. L thng l thanh ghi nhng n cng c th l mt v tr nh. 2. Xc nh a ch m t cho y t xc nh y mt trong nhng v tr hin hnh ca y. Chng ta u tin chn thanh ghi cho y nu c thanh ghi v v tr nh ang gi gi tr ca y. Nu gi tr ca y cha c trong L, ta to ra ch th:

MOV y', L lu bn sao ca y vo L. 3. To ch th op z', L vi z' l v tr hin hnh ca z. Ta u tin chn thanh ghi cho z' nu gi tr ca z c lu gi c thanh ghi v b nh. Vic xc lp m t a ch ca x ch ra rng x ang trong v tr L. Nu L l thanh ghi th L l ang gi tr ca x v loi b x ra khi tt c cc b m t thanh ghi khc. 4. Nu gi tr hin ti ca y v/ hoc z khng cn c dng na khi ra khi khi, v chng ang trong thanh ghi th sau khi ra khi khi ta phi xc lp m t thanh ghi ch ra rng cc thanh ghi trn s khng gi tr y v/hoc z. Nu m ba a ch c php ton mt ngi th cc bc thc hin sinh m ch cng tng t nh trn. Mt trng hp cn c bit lu l lnh x := y. Nu y trong thanh ghi, ta phi thay i thanh ghi v b m t a ch, l gi tr ca x c tm thy thanh ghi chagi tr ca y. Nu y khng c dng tip th thanh ghi s khng cn lu tr ca y na. Nu y trong b nh, ta dng hm getreg tm mt thanh ghi ti gi tr ca y v xc lp rng thanh ghi l v tr ca x. Nu ta thng bo rng v tr nh cha gi tr ca x l v tr nh ca y th vn tr nn phc tp hn v ta khng th thay i gi tr ca y nu khng tm mt ch khc lu gi tr ca x trc . 3. Hm getreg Hm getreg s tr v v tr nh L lu gi gi tr ca x trong lnh x := y op z. Sau y l cch n gin dng ci t hm: 1. Nu y ang trong thanh ghi v y s khng c dng na sau khi thc hin x := y op z th tr thanh ghi cha y cho L v xc lp thng tin cho b m t a ch ca y rng y khng cn trong L. 2. Ngc li, tr v mt thanh ghi rng (nu c). 3. Nu khng c thanh ghi rng v nu x cn c dng tip trong khi hoc ton t op cn thanh ghi, ta chn mt thanh ghi khng rng R. Lu gi tr ca R vo v tr nh M bng ch th MOV R,M. Nu M cha cha gi tr no, xc lp thng tin b m t a ch cho M v tr v R. Nu R gi tr ca mt s bin, ta phi dng ch th MOV ln lt lu gi tr cho tng bin. 4. Nu x khng c dng na hoc khng c mt thanh ghi ph hp no c tm thy, ta chn v tr nh ca x nh L. V d 9.5 : Lnh gn d := (a - b) + (a - c) + (a - c) C th c chuyn sang chui m ba a ch: t := a - b u := a - c v := t + u d := v + u

v d s sng n ht chng trnh. T chui lnh ba a ch ny, gii thut sinh m va c trnh by s to chui m ch vi gi s rng: a, b, c lun trong b nh v t, u, v l cc bin tm khng c trong b nh . Cu lnh 3 M ch a ch t := a - b MOV a, R0 u := a - c v := t + u d := v + u SUB MOV SUB ADD ADD MOV b, R0 a, R1 c, R1 R1, R0 R1, R0 R0, d Gi 2 2 2 2 1 1 2 B m t thanh ghi Thanh ghi rng, R0 cha t R0 cha t R1 cha u R0 cha v R1 cha u R0 cha d B m t a ch t trong R0 t trong R0 u rong R1 u trong R1 v trong R0 d rong R0 d trong b nh

Hnh 9.9 - Chui m ch Ln gi u tin ca hm getreg tr v R0 nh mt v tr xc nh t. V a khng trong R0 , ta to ra ch th MOV a, R0 v SUB b, R0. Ta cp nht li b m t ch ra rng R0 cha t. Vic sinh m ch tip tc tin hnh theo cch ny cho n khi lnh ba a ch cui cng d := v + u c x l. Ch rng R0 l rng v u khng cn c dng na. Sau ta to ra ch th, cui cng ca khi, MOV R0, d lu bin sng d. Gi ca chui m ch c sinh ra nh trn l 12. Tuy nhin, ta c th gim gi xung cn 11 bng cch thay ch th MOV a, R1 bng MOV R0, R1 v xp ch th ny sau ch th th nht. 4. Sinh m cho loi lnh khc Cc php ton xc nh ch s v con tr trong cu lnh ba a ch c thc hin ging nh cc php ton hai ngi. Hnh sau minh ha vic sinh m ch cho cc cu lnh gn: a := b[i], a[i] := b v gi s b c cp pht tnh . Cu lnh 3 a ch (1) (2) i trong thanh ghi Ri i trong b nh Mi M Gi M Gi a:= b[ i ] MOV b(Ri ), R 2 MOV Mi, R 4 MOV b(R), R a[i]:=b MOV b, a(Ri) 3 MOV Mi , R 5 MOV b, a (R) (3) i trn Stack M Gi MOV Si(A), R 4 MOV b(R), R MOV Si(A), R 5 MOV b, a (R)

Hnh 9.10 - Chui m ch cho php gn ch mc

Vi mi cu lnh ba a ch trn ta c th c nhiu on m ch khc nhau tu thuc vo i ang trong thanh ghi, hoc trong v tr nh Mi hoc trn Stack ti v tr Si v con tr trong thanh ghi A ch ti mu tin hot ng ca i. Thanh ghi R l kt qu tr v khi hm getreg c gi. i vi lnh gn u tin, ta a a vo trong R nu a tip tc c dng trong khi v c sn thanh ghi R. Trong cu lnh th hai ta gi s rng a c cp pht tnh. Sau y l chui m ch c sinh ra cho cc lnh gn con tr dng a := *p v *p := a. V tr nh p s xc nh chui m ch tng ng. Cu lnh 3 a ch a:= *p *p:= a p trong thanh ghi Rp M MOV *Rp, a MOV a, *Rp Gi 2 2 p trong b nh Mi M MOV Mp, R MOV *R, R MOV Mp, R MOV a, *R p trong Stack M Sp(A), R *R, R a, R R, *Sp(A) Gi 3 4

Gi 3 MOV MOV 4 MOV MOV

Hnh 9.11 - M ch cho php gn con tr Ba chui m ch tu thuc vo p trong thanh ghi Rp, hoc p trong v tr nh Mp, hoc p trong Stack ti offset l Sp v con tr, trong thanh ghi A, tr ti mu tin hot ng ca p. Thanh ghi R l kt qu tr v khi hm getreg c gi. Trong cu lnh gn th hai ta gi s rng a c cp pht tnh. 5. Sinh m cho lnh iu kin My tnh s thc thi lnh nhy c iu kin theo mt trong hai cch sau: 1. R nhnh khi gi tr ca thanh ghi c xc nh trng vi mt trong su iu kin sau: m, khng, dng, khng m, khc khng, khng dng. Chng hn, cu lnh ba a ch if x < y goto z c th c thc hin bng cch ly x trong thanh ghi R tr y. Sau s nhy v z nu gi tr trong thanh ghi R l m. 2. Dng tp cc m iu kin xc nh gi tr trong thanh ghi R l m, bng khng hay dng. Ch th so snh CMP s kim tra m iu kin m khng cn bit tr tnh ton c th. Chng hn, CMP x, y xc lp iu kin dng nu x > y,... Ch th nhy c iu kin c thc hin nu iu kin < , =, >, >=,<>, <= c xc lp. Ta dng ch th nhy c iu kin CJ <= z nhy n z nu m iu kin l m hoc bng khng. Chng hn, lnh iu kin if x < y goto z c dch sang m my nh sau. CMP x,y CJ < z

xy dng s dch cho phng php phn tch duyt li, trc ht loi b qui tri, to nhn t tri ca vn phm s dch theo nguyn tc sau: A1). Mi k hiu cha kt thc tng ng vi mt s trong nhn cho cc cnh l token hoc k hiu cha kt thc.

V d :Xt vn phm sinh biu thc ton hc E E + T |T E T * E | F F E0 | id Kh qui tri ta c E TE' E' + TE' | T FT' T' * FT' | F (E) | id S dch tng ng

Rt gn s bng cc thay th tng ng

CS 3240 Homework I

Scanning and Parsing


Let us consider the language of arithmetic expressions The alphabet of this language is the set {+, -, *, /, (, ), x, y, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Note commas are not a part of the alphabet in the above set they are only shown to separate elements of the set. That is, strings in this language can be composed only by using one or more of the following + - * / ( ) x y 0 1 2 3 4 5 6 7 8 9 The tokens in this language are of the following classes MOPER: * / AOPER: + CONS : Strings made of 0 through 9 VAR : x y OPARAN : ( CPARAN : ) Consider a compiler that scans and parses the language of arithmetic expressions Question 1: As you scan the following expression from left to right, list the tokens and the token class identified by the scanner for each of the arithmetic expressions below. Identify, explain and clearly mark the errors if any (30 points) a. b. c. d. e. ( x ( y x * y * (20 * + ) ( + ( y 100 4 + ( x x * + * / + 4 100 ) + y ( x + y 320 ) ) x + ( 2 + x^3 ) / y ) 100 - y 100 / 30y3 )

The grammar for the language of arithmetic expressions is as follows <EXPR> <EXPR> <TERM> <TERM> <FAC> <FAC> <FAC> <TERM> AOPER <TERM> <TERM> <FAC> MOPER <FAC> <FAC> OPARAN <EXPR> CPARAN VAR CONS

Question 2: What are the terminals and non-terminals in this grammar? (10 points) Question 3: For each of the expressions below, scan it from left to right; list the tokens returned by the scanner and the rules used by the parser (showing appropriate expansions of the non-terminals)

for matching. (40 points) a. b. c. d. e. a. b. c. d. e.

Identify,

explain

and

clearly

mark

the

errors

if

any

( ( ( ( (

x y x x x

+ * * + +

y ( y (

) x y ) y

) + *

+ 10 10 ) ) ( y + z ) ( 2 ) )

Question 4: You are asked the count the number of constants (CONS), variables (VAR) and MOPER in an expression. Insert action symbols in the grammar described before Question 2, explain what semantic actions they trigger and what each semantic action does. (20 points)

Regular Expressions
Question 1: Consider the concept of closure. A set S is said to be closed under a (binary) operation if and only if applying the operation to two elements in the set results in another element in the set. For example, consider the set of natural numbers N and the + (addition) operation. If we add any two natural numbers, we get a natural number. Formally x, y are elements of N implies x + y is an element of N. State true or false and explain why a. Only infinite sets (sets with infinite number of elements, like the set of natural numbers) can be closed b. Infinite sets are closed under all operations c. The set [a-z]* is closed under concatenation operation Question 2: For each of the regular expressions below, state if they describe the same set of strings (state if they are equivalent). If they are equivalent, what is the string they describe? 1. 2. 3. 4. 5. 6. [a-z][a-z]* [a-z0-9]+ [ab]?[12]? [ab12]+ [-az]* [abc]+ and and and and and and [a-z]+ [a-z]+[0-9]+ a1|b1|a2|b2 a|b|1|2|[ab12]* [a-z]* [cba]+

7.

[a-j][k-z]

and

[a-z]

Question 3: For each of the strings described below, write a regular expression that describes them and draw a finite automaton that accepts them. 1. 2. 3. 4. 5. 1. 2. b 3. 4. 5. The string of zero or more a followed by three b followed zero or more c The string of zero or more a, b and c but every a is followed by two or more All strings of digits that represent even numbers All strings of as and bs that contain no three consecutive bs. All strings that can be made from {0, 1} except the strings 11 and 111

Question 1: Pumping Lemma and Regular Languages You can use the pumping lemma and the closure of the class of regular languages under union, intersection and complement to answer the following question. Proofs should be rigorous. Note that for each of the questions below, you may or may not have to use the pumping lemma. Note that the notation 0m means 0 repeated m times. So the language of strings of the form 0m such that m 0 would contain strings like the null string 0, 00, 000, (this is [0]*. Whereas the language of strings of the form 0m such that m 1 would be [0]+) a. Is the language of strings of the form 0m1n0m such that m, n 0 regular? If it is regular, prove that it is regular. If it is not regular, prove that is not regular. Note that, a rigorous proof is needed. General reasoning or explanations that are not rigorous will not get full credit. (15 points) b. Consider a language whose alphabet is from the set {a, b}. Is the language of palindromes over this alphabet regular? If it is regular, prove that it is regular. If it is not regular, prove that is not regular. Note that, a rigorous proof is needed. General reasoning or explanations that are not rigorous will not get full credit. (15 points) Hint: A palindrome is a word such that when read backwards, is the same word. For example the word mom when read left to right is the same as it is when it is read right to left. In general, the first half, when reversed, yields the second half. If the length of the string is odd, the middle character is left as it is. For example, consider the word redivider. Reversing redi yields ider and v is left as it is. For strings with alphabet {a, b}, aaabaaa is a palindrome but abaaa is not. c. A language, whose alphabet is {a, b}, such that the strings of the language contain equal number of ab and ba. Note that aba is part of the language, because the first letter and the second letter form ab and the second and third form ba. Is this language regular? If it is regular, prove that it is regular. If it is not regular, prove that is not

regular. Note that, a rigorous proof is needed. General reasoning or explanations that are not rigorous will not get full credit. (15 points) d. The class of regular languages is closed under union. That is of A is a regular language and B is a regular language, then C is a regular language, where C = A . B. Note that B . C. (B is a subset of C). Let D be some subset of C (that is, D . C). In general, is D regular? If it is regular, prove that it is regular. If it is not regular, prove that is not regular. Note that, a rigorous proof is needed. General reasoning or explanations that are not rigorous will not get full credit. (15 points) Question 2: Consider the language described by the regular expression a+b*a, the set of all strings that has one or more as followed by zero or more bs and ending in a single a. a. Construct a NFA which recognizes this language. Note that you need to construct a primitive NFA using the constructions describe in class. (10 points) b. Convert the above NFA to a DFA using . closure. Clearly indicate the steps of . closure. (20 points) c. Convert the above DFA to an optimized DFA (10 points)

HomeWork
1. Work on the homework individually. Do not collaborate or copy from others 2. The homework is due on Tuesday, April 24 In Class. No late submissions will be entertained 3. Do not email your answers to either the Professor or the TA. Emailed answers will not be considered for evaluation Question 1. (50 Points) Consider the following grammar. Construct LR(0) items, DFA for this grammar showing LR(0) shiftreduce table. Is this grammar LR(0)? Indicate all possible shift-reduce as well as reduce-reduce conflicts. Using the concept of look-ahead, generate SLR(1) table which LR(0) conflicts get eliminated? Using the input (ID + ID) * ID show the SLR(1) parse - show the stack states and shifts and reductions as shown in the examples in the Louden book. Grammar: E' -> E E -> E + T E -> T T -> T * ID T -> ID T -> (E) Question 2. (50 Points) Construct a pushdown automaton for the following language: L = { aibjck | i, j, k >= 0, either i = j or j = k}

Practice
Q #1. Design a Turing machine for recognizing the language (please give a formal description including tape alphabet, full state transition diagram identifying the acceptance and rejection states if any) L = {an bn cn | n >= 0} L = { w | w contains twice as many 0's as 1's, w is made from {0,1}* } Q #2. Design a Turing machine to perform multiplication of two natural numbers represented as the number of zeroes. For example, number five is represented as 00000 Hint: Use repeated addition Q #3 Design LR(0) items, their DFA and SLR(1) parse table for the following grammar showing the parse for the following input : ((a), a, (a, a)) Also show the parse tree obtained. Is this a LR(0) grammar? If not show the conflicts and show how you can resolve them through SLR(1) construction Grammar : E -> (L)| a L -> L, E| E Q #4 Design Context free grammars for the following languages (alphabet is {0,1}) a. {w | w starts and ends with the same symbol (either 0 or 1, which is the alphabet)} b. {w | w = wr ie, w is a palindrome} c. {ai bj ck | i = j or j = k, i, j, k >= 0} Q #5 Design pushdown automata (PDA) for the following language: {w | w has odd length and the middle character is 0} Q #6 Show first, follow and predict sets for the following grammar after removing left recursion and left factoring: E -> E + T E -> T T -> T * P T -> P P -> (E) P -> ID Q # 7 Using the pumping lemma show that the following languages are not regular: {0m 1n | m not equal to n} {02n | n >= 0} Q #8 Design NFA, DFA and minimize the DFA for the regular expression: 0*1*0*0

Test 1
Question 1: DFAs (Choose any three questions out of five: 30 points) Devise DFAs for: 1. All strings that start with 1 must end with a 0 and those which start with 0 must end with 1 (alphabet of this language is {0,1}), no null string 2. All strings from the alphabet {a, b} which contain an odd number of as and even (but non-zero) number of bs 3. All strings that must have 0110 as the substring (alphabet {0,1}) 4. All strings which have a length greater than or equal to 3 and ending on b or two consecutive as 5. Strings that do not contain 3 consecutive as Question 2: Regular expressions (Choose any three questions out of five: 30 points) Write regular expressions for: 1. Expressions that enumerate all positive integers (including 0) upto 100000 but without any leading zeroes 2. Strings made from {a, b} that start and end on the same letter (ie, strings starting with a end on a and those starting with b end on b) 3. Floats using decimal point representation with integer and fractional parts no leading or trailing zeros and precision upto 4 places after decimal 4. Identifiers that start with a digit or lowercase letter following which one can optionally have one or more of digits or letters or underscores. Identifiers can not end on an underscore (consecutive underscores ok though) 5. Positive integers no leading zeros in which all 2s should occur only after 3s and all 1s should occur only after 2s (ie, no 2 should occur before a 3 or no 1 should occur before a 2). Question 3: Regular Expression . NFA . DFA (30 points) Convert the following regular expression into a NFA and convert the NFA to DFA showing the key steps (such as computing -closures of sets of states etc.) : b[ab]* Show all possible NFA transitions (using parallel tree) for the string babba and verify the state transitions in corresponding DFA Question 4: State True or False (10 points) a. Consider a language S=(a|b)*. Consider a Regular Language L, whose alphabet is from the set .= {a, b}. Let M be a DFA that Recognizes L. Let M' be a DFA obtained from M by changing all accepting states of the M into non-accepting states, and by changing all non-accepting states of M to accepting states. M' recognizes the complement of language L given by S L b. For every NFA and its equivalent DFA, the number of states in equivalent DFA must be at least equal to the number of states in the NFA. c. Consider languages L and L such that L . L. Let M be a DFA that recognizes L

and M be DFA that recognizes L then the number of states in M must be equal to or greater than those in M. d. Consider languages L and L such that L . L. Let M be a DFA that recognizes L and M be DFA that recognizes L then the number of states in M must be lesser than or equal to those in M. e. For every regular expression there can exist more than one DFA that recognizes the language described by the regular expression. .

Tesst 2

Project
Notes: 1. This project has two phases. Phase 1 is due by April 14th by 5pm. Phase 2 is due by April 28th by 5pm. 2. There will be no extensions for either phases 3. You will work in groups of three 4. Each group should submit a report and source code for each phase. If multiple source files, they must be tarred along with the makefile 5. You can program in C, C++ or Java. Do not use tools (like lex and yacc) or the standard template library 6. Code should be properly documented with meaningful variable and function names. Short elegant code will get bonus points. 7. You will find the course slides on DFA/NFA/scanner/recursive descent parser useful. 8. Each phase of the project is worth 100 points. The bonus section is worth 50 points.

Phase 1:

Objective: To write a scanner and parser which can construct and execute an NFA for any regular expression. Consider the language of regular expressions. The alphabet of this language is the set {a, b, *, +, (, ), ., |} (commas and spaces are not part of the language). Using this alphabet one can write any regular expression. Our goal in this project is to be able to read any regular expression described by the following grammar and construct primitive NFAs and join them together to form a NFA that will recognize strings described by the regular expression. We will do this step by step by developing answers to the following questions. The production rules for this language are given by R . R* R . R+ R . (R) R . (R | R) R . R.R R.a R.b Question 1: Rewrite the grammar to remove left recursion. Question 2: Identify the tokens of this language and write a scanner program which can scan this language and return tokens .

Question 3: Write a recursive descent parser which can parse this language (based on the modified grammar which removed left recursion) and yield a parse tree. Note that this grammar has implicit precedence. That is for a regular expression, a.b* the * operates on b and not a.b as a whole. This is true unless it is bracketed. In, (a.b)* on the other hand, the * operates on (a.b) When you build a parse tree you must take care of such precedences Question 4: Now you need to write a program which can construct a NFAs based on the parse tree based on primitive NFAs. As discussed in class, primitive NFAs should be joined together to form NFA for the complete regular expression. This final NFA will be represented as an adjacency matrix described below. Thus the output of this program should be an adjacency matrix. Adjacency matrix: Any NFA is a directed graph. A directed graph G consists of a set of nodes (in our case states) and directed edges (in our case, transitions). For example, in the graph below, A,B,C are nodes and 1,2,3 are edges A B C 12 3 Any directed graph can be represented by an adjacency matrix. For example, the matrix below represents the graph. Since edge 1 connects A to B, there is a 1 in the row corresponding to A and the column corresponding to B. ABC A13 B2 C Similarly an NFA can be represented by an adjacency matrix. Note that more than one element can be present in a cell. For example, in the NFA if the edge from A to B is labeled a,b then you would have both a and b in the corresponding cell. Question 5: Given such an adjacency matrix of an NFA and given an input string consisting of as and bs write a program to simulate the NFA and output if the string is accepted or rejected. Note : NFAs can progress on multiple paths and you should simulate this effect if one of the paths results in accept state then the input string is accepted by NFA.

Phase 2: To write a program which will construct a DFA from any NFA. You
will use adjacency matrix as the representation and use epsilon closures to generate DFA. Finally write a program to simulate the DFA. Bonus: Given an adjacency matrix for a DFA, write a program to produce minimal DFA by state merging.

You might also like