You are on page 1of 117

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 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. 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 ngi hc: - Nm vng nguyn l lp trnh: Hiu tng ngn ng, im mnh im yu ca n, t ta c th chn ngn ng thch hp cho d n ca mnh. Bit chn chng trnh dch thch hp. 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 ca mn hc c th s dng trong cc lnh vc khc nh x l ngn ng t nhin, dch Anh Vit Chng ti bin son bi ging ny nhm mc ch cung cp mt ti liu d c d hiu, h tr cho sinh vin khi hc cng nh khi nghin cu tm hiu v trnh bin dch. Bi ging c tng hp t cc ti liu v kinh nghim ging dy ca chng ti trong nhng nm qua. Rt mong nhn c s ng gp ca sinh vin v bn c bi ging -c hon thin hn.

Thi Nguyn, thng 2 nm 2009 Cc tc gi

CHNG 1 TNG QUAN V CHNG TRNH DCH Mc tiu: Sinh vin hiu mt cch tng quan v chng trnh dch v mi quan h ca n vi cc thnh phn khc. Ni dung chnh: - Mi quan h gia ngn ng lp trnh v chng trnh dch. - Khi nim chng trnh dch, phn loi chng trnh dch. - Cu trc ca mt 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 ny sang ngn ng khc tng ng. Thng thng ngn ng 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

2. PHN LOI CHNG TRNH DCH

Hnh 1.1: S mt 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 mt my o, chng trnh thng dch thc hin ngn ng ny gi l my o.

Chng trnh ngun

Compiler

CT NN trung gian

Interpreter

Kt qu

Hnh 1.2 H thng thng dch

V d h thng dch Java. M ngun Java c dch ra dng Bytecode. File ny c mt trnh thng dch gi l my o Java thc hin. + 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) Chng trnh ngun Phn tch t vng Phn tch c php Qun l bng k hiu Phn tch ng ngha Sinh m trung gian Ti u m Sinh m ) Ph Chng trnh ch n tch t vng: c lung k t to thnh chng trnh ngun t tri sang phi, tch ra thnh cc t t (token). X l li
H nh 1.3 C u tr c tn h c a ch ng tr nh dc h

- 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 := 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 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. V d: Ngn ng c c t bi lut sau: Stmt Expr ten := expr expr + expr | expr * expr | ten | so

Vi xu nhp a:= b+c*60 ta c cy suy dn nh sau:

3) Phn tch ng ngha: Phn cc c tnh khc ca chng trnh khng phi c tnh c php. Kim chng trnh ngun tm li c php v s hp kiu. Da trn cy c php b phn ng ngha x l tng php ton. Mi

stmt Tn
a := exp r exp r + exp r expr * exp r

tch m tra

tn tn b c

tch

60

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 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
Tn
:= expr expr

stmt

expr

a Chng trnh dch phi kim tra tnh ng n trong s dng cc i lng * expr expr ny. V d kim tra khng cho gn gi tn tr cho hng, kim tra tnh ng n trong gn kiu, kim tra phm vi, kim S tn b tra s dng tn (tn khng c khai bo trng, dng cho gi hm phi l tn 60.0 c c thuc tnh hm) . . . 4) Sinh m trung gian: Sinh chng trnh trong 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)

5) Ti u m: Sa i chng trnh trong ngn ng trung gian nhm 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, phm v )= bng k hiu (Symbol table) Trong qu trnh phn tch t vng, cc tn s c lu vo bng k hiu, 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 ... * 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. 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 a vo b ti u v sinh m.
Phn tch c php

M ngun

Phn tch t vng Phn tch t vng Phn tch ng ngha

Lu b nh ngoi
Phn tch c php

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

Lu b nh ngoi
Phn tch ng ngha

Lu b nh ngoi
Chng trnh ch Sinh m trung gian Ti u m

Hnh 1.4 Chng trnh dch duyt n

Hnh 1.5 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: So snh tc b nh phc tp Cc ng dng ln duyt n tt km km Km duyt nhiu ln Km tt tt tt

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.
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 M my tht s Th vin v cc file i tng nh v li c

Hnh 1.6 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 b 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 php 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 m 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 v tr ph hp. Trnh lin kt cho php to ra mt chng trnh 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 Mc tiu: Sinh vin hiu v nhn bit c c cc t t, biu din c cc t t trong my tnh v xy dng chng trnh on nhn t t . Ni dung: K thut xc nh v xy dng b phn tch t vng
1. 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.
2. T V, T T, MU.

* T v (lexeme): l mt nhm cc k t k nhau c th tun theo mt quy c (mu hay lut) no . * T t (token): 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 (tn ca hng, hm, bin), s, , 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. := + * 10 ; l php gn l php cng l php nhn 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 cha thng tin v n. V d: position := initial + 10 * rate ; <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 .
Token const if if Tr t vng const const if Mu (lut m t)

ta nhn c dy t t:

<tn, con tr tr n position trn bng k hiu>

quan h (relation) <,<=,=,<>,>,>= tn S (num) Xu (literal) pi, count, d2 3.1416, 0, 5 hello

< 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

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.
3. CCH LU TR 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: 3.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. 3.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 = Gii thut: p2 := p2 + 1; if p2 = eof begin if p2 cui ca na u 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;
4. BIU DIN T T

M *

EOF

C *

EOF

EOF

then then

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.

4.1. Mt s khi nim v ngn ng hnh thc * Bng ch ci: l mt tp phn t a hu hn hoc v hn cc i tng. Mi 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 = 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 ch ci k hiu l
+

k hiu l

. Tp tt c cc t khc rng trn bng

{ }

* 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 ). - 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 l chui rng )
* Cc php ton trn ngn ng. + Php giao: L = L1 + Php hp: L = L1 L2 = {x L2 = {x
* *

no . (Mt tp con A

c gi l mt ngn ng trn bng ch ci

khng c phn t no trong khi ngn ng { } c mt phn t

| x L1 hoc x L2} | x L1 v x L2}


*

+ Php ly phn b ca ngn ng L l tp CL = { x

| x L}

+ Php ni kt (concatenation) ca hai ngn ng L1/

v L2/
1 2

l :

L1L2 = {w1w2 w1 L1 v w2 K hiu L = L.L.LL (n ln). L = LL + Php bao ng (closure) :


n i i-1

L2 }/

- Trng hp c bit : L0 = { }, vi mi ngn ng L. + 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+ = * 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 (vi mi sn xut biu din di dng S 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, ...).
i=1

LI

) ( )*.

P : tp hu hn cc quy tc ng php c gi l cc sn xut (production), , vi , l cc chui : k hiu cha kt thc dng lm k hiu bt u (start)

* Phn loivn phm theo Chosmky. - Lp 0: l vn phm ng cu (Phrase Structure) vi cc lut sn xut c dng: c dng: -> vi -> vi V+, V+, V* V* , || < || N, V* N v a T - Lp 1: l vn phm cm ng cnh (Context Sensitive) vi cc lut sn xut - Lp 2: l vn phm phi ng cnh (Context Free Grammar - CFG ) vi cc lut sn xut c dng: A -> vi A - 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 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

* Vn phm chnh quy v biu thc 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 A; tn -> ch_ci (ch_ci | ch_s)* A -> ch_ci A | ch_s A | Biu din bng vn phm chnh qui:

* Biu thc chnh qui c nh ngha trn b ch ci - l biu thc chnh quy, biu th cho tp { } -a , a l biu thc chnh quy, biu th cho tp {a}

nh sau:

- 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) + (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 L(s) + (r)(s) l biu thc chnh quy biu th cho tp ngn ng L(r)L((s)

* tmt hu hn: 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 F Q l trng thi u 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 hin thi v x 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)
0|1 start

Q l trng thi

* l phn xu vo cha c on nhn.

0 Q0 1

1 q0, q1 q2 q2 q2
0|1

Q0
q0

Q1 Q2

1 q1

Q2

th chuyn khng n nh

Hm chuyn trng thi H


0

0|1 1 q1

0 Q0 Q1 Q2 Q0 Q0 Q2

1 q1 q2 q2
0 start q0
1

q2

th chuyn n nh

V d: 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 0|1 1 1 2 2 start 0 1 1 2 1

0|1

start 0

th 4.1.1 Biuchuyn n bng biu thc chnh quy chuyn khng n nh th din t t nh

4.2. : - 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 <, <=, >, >=, <>, = 4.3. M t cc mu t t trn bng biu thc chnh qui: Tn t t - ch_ci - ch_s - Tn - S nguyn - S thc biu thc chnh quy biu din t t . A|B|C||Z|a|b|c||z 0|1||2|3|4|5|6|7|8|9 ch_ci (ch_ci | ch_s)* (ch_s)+ (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): 4.4. Biu din t t bng th chuyn
ch_ci ch_ci ch_s

< <= > >= = <>


ch s

0 2*

2*

ch_s

ch_s ch_s

ch_s

. 1 2

3*

Ton t quan h:
Error!

<

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

ch_s ch_s

2*

tn

ch_s

ch_s

. 3

6*
s nguyn

s thc

4*
<

8 9 10*

LE NE LT

> =

11
>

EQ =

12

13

GE GT

14*

4.5. din bng chuyn 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


5. VIT CHNG TRNH CHO B PHN TCH T VNG

5.1. Lp b phn tch t vng theo 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: case 10: case 11: s[i]=0; return LE; s[i]=0; return NE; s[i]=0; GetBackChar(); return LE; s[i]=0;

return EQ; case 12: if(c===) state=13; else state=14; s[i++]=c; break; case 13: case 14: } if(c==0) break; }// end while }// end function s[i]=0; return GE; s[i]=0; return GT;

Nhn xt: u im: chng trnh d vit, 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. 5.2. Lp b phn tch t vng theo bng chuyn 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: case 4: s[i]=0; GetBackChar(); return IDENT; s[i]=0; GetBackChar(); return INTEGER; case 6: return REAL; case 8: case 9: case 10: case 11: case 13: case 14: s[i]=0; return LE; s[i]=0; return NE; s[i]=0; GetBackChar(); return LE; s[i]=0; return EQ; s[i]=0; return GE; s[i]=0; return GT; case STATE_ERROR: return ERROR; defaulf: state=table[state][type]; s[i++]=c; s[i]=0; GetBackChar();

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

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

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

thc hnh
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

Mc tiu: Sinh vin cn nm c: Cc phng php phn tch c php v cc chin lc phc hi li trong qu trnh phn tch c php. Cch t ci t mt b phn tch c php t mt vn phm phi ng cnh xc nh Ni dung: Nghin cu cc phng php phn tch: - Phng php phn tch c bn (phng php phn tch quay lui: topdown, bottom up) - Phng php phn tch hiu qu (phng php phn tch tt nh: LL, LR). 1. S LC V VN PHM PHI NG CNH

1.1 nh ngha * 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

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 chu cai tip theo. Trng thi v bng mt vng trn kp l trng Start chu cai khac 0 1 2* thi kt thc.
Nu trng thi kt thc c du * ngha l k hiu cui khng thuc xu on nhn.
Chu cai

Hnh 3.1: th chuyn cho t t Tn

1.3 Cy suy dn * 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 => . - Suy dn k bc, k hiu l cho: = 0 => 1 => . . . => k = - Xu suy dn xu nu k>=0 v k hiu l
*
k

hay

nu tn ti dy 0, 1, . . . , k sao

- Xu suy dn khng tm thng xu nu k>0 v k hiu l * Cy phn tch (cy suy dn) 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. 3. 4. 5. Nhn ca gc l S Nu mt nt c nhn X l mt nt trong th X N P Nu nt n c nhn X v cc nt con ca n theo th t tri qua Nt l c nhn thuc T hoc l

phi c nhn Y1, Y2, . . ., Yk th X->Y1Y2 . . . Yk s l mt sn xut

* Suy dn tri nht (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 (suy dn phi), nu mi bc suy dn, bin c thay th l bin nm bn phi nht trong dng cu. 1.4 Vn phm nhp nhng(m h) 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:

Chng ta c v d i vi 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 * i khi c th vit li mt vn phm nhm trnh s m h ca n. Mt v d, chng ta s loi b s m h trong vn phm sau : Stmt if expr then stmt if expr then stmt else stmt other y l mt vn phm m h v cu nhp if E1 then if E2 then S1 else S2 s c hai cy phn tch c php :

Hnh 3.2 Hai cy phn tch c php cho mt cu nhp

trnh s m h ny ta a ra nguyn tc "Khp mi else vi mt then cha khp gn nht trc ". Vi qui tc ny, ta vit li vn phm trn nh sau : Stmt matched_stmt | unmatched_stmt if expr then matched_stmt else matched_stmt other unmatched_stmt unmatched_stmt Vn phm tng ng ny sinh ra tp chui ging nh vn phm m h trn, nhng n ch c mt cch dn xut ra cy phn tch c php cho tng chui nhp. 1.5 qui * nh ngha: K hiu khng kt thc A ca vn phm gi l qui nu tn ti:
A A

matched_stmt

if expr then Stmt if expr then matched_stmt else

vi ,

V+

- Nu = th A gi l qui tri - Nu = th A gi l qui phi - Nu , th A gi l qui trong


A (A
+

* C 2 loi quy tri:


Loi ttrc tip: c dng A V d: S Aa | b; A Aa Ac | Sd; Sda A ) Loi gin tip: Gy ra do nhiu bc suy dn. S l qui tri v S

* 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 - Tng qut ho ln ta c: Nu c cc lut qui tri: trong khng A {E
1A i

A A
nA

v A A
1|

A |
2|

. . .| A |

| . . .|
mA

no bt u bng A. Thay cc sn xut ny bi cc sn xut: |...| v A


1A 2A

2A

|...|

V d2: Xt vn phm biu thc s hc sau: E+T|T; T T * F | F; F ( E ) | a} 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;

+TE | ; T

FT;

*FT | ;

(E) | a}

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 quy tri v quy gin tip ta c th dng gii thut sau loi b: Input: Vn phm khng khng c dng A
+

A hoc A

Output: Vn phm tng ng khng qui tri Phng php: 1. Sp xp cc k hiu khng kt thc theo th t A1, A2.. .. An 2. For i:= 1 to n do Begin for j:=1 to i-1 do Begin if ( quy tri gin tip ca Aj qua Ai) then Thay sn xut Ai Aj P bi sn xut Ai
1| 2| 1

| |

Trong Aj End; Loi b qui tri trc tip cho Ai End; V d: G = { S

Aa | b; A Ac | 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 A S 1.6 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. Sd c A Aad | bd. cA' | adA' | Loi b qui tri trc tip cho A, ta c: Aa |b; A bdA'; A'

- Nu c hai sn xut A ->


1

th ta khng bit phi khai trin A theo A ->


1

hay

2.

Khi , thay hai sn xut ny bng: A -> A; E -> b

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

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 cho 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 sinh thnh: ab1| ab2|.. .. | abn | g A a A' | g ; A' b 1| b 2 | .. .. | b n Trong g khng c chui dn u chung vi cc v phi khc. Bin i lut
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 sn xut A 2.1 Phn tch topdown
+

A v A

* 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 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) Kim tra nt ang xt: 2.1. Nu nt ang xt l bin A th chn mt sn xut c v tri l A trong P (gi s sn xut A (cc Xi 2.2. X1...Xk) trin khai. Ly nt X1 lm nt ang xt. { }) th i snh a vi k hiu L(G)), bo li (w L(G)).

Nu nt ang xt l k hiu kt thc a vo hin ti a1

+ a = a1: ly nt ngay bn phi a lm nt ang xt, con tr dch sang bn phi mt k hiu trn xu w. + a khc a1: quay li nt trc v lp li b2 vi th la chn sn xut khc. 2.3. Nu nt ang xt l ang xt Tip tc lp li bc 2. Th tc trn lp li sau hu hn bc v c 2 kh nng xy ra: + Nu i snh ht xu vo v cy khng cn nt no cha xt na th c mt cy phn tch. + Nu quay lui ht cc trng hp m khng sinh c cy phn tch th kt lun w L(G) * iu kin mt vn phm phi ng cnh phn tch c bi thut ton Top-down l vn phm khng c qui tri. * phc tp thut ton l hm s m n vi n l di xu vo. V d: Cho vn phm G = {S aSbS | aS | c} Phn tch xu aacbc bng thut ton Top-down, v cy phn tch trong qu trnh phn tch quay lui. th chuyn sang nt ngay bn phi n lm nt

a a S b S

(1)
a* S b S

a*

(2)

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

(4)

a*

(3)
S S

(6)

a* c c*

(5)

a a

S S

(7)
a* S

a*

(8)

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

10

(9)

2.2 Phn ttch bottom - up Trong phng php ny, ta 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). * Cu to: - 1 STACK: Lu k hiu vn phm, y l $ - 1 BUFFER INPUT cha chui w, cui xu them k hiu $. * Hot ng: - Khi to: stack: $, inputbuffer cha w$. - 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 (cc k t trn nh ngn sp l v phi ca mt sn xut P) 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 bc quay lui gn nht v th vi la chn sn xut khc hoc hnh ng khc. Qu trnh phn tch lp sau hu hn bc.

- Nu qu trnh t n trng thi kt thc (trng thi ngn xp ch cha $S v xu vo ch cha $) th qu trnh kt thc v phn tch thnh cng. - Nu xt ht tt c cc trng hp (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: Cho vn phm G = {S aABe; A Abc | b; B d} Phn tch cu vo abbcde Qu trnh phn tch Bottom-up nh sau: 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

V cy cho qu trnh phn tch v quay lui trn:


A A*

B*

Qu trnh 1

Qu trnh 2

A A a b b c B d e
Qu trnh 3

Qu trnh suy dn: Abbcde => aAbcde => aAde => aABe => S Vit ngc li, ta c dn xut phi nht: S =>rm aABe =>rm aAde =>rm aAbcde =>rm abbcde Phn tch Bottom-up khng phn tch c vn phm c cc sn xut B hoc c suy dnA =>+ A. * Handle ca mt chui: l chui con c a n v l v phi c a mt sn xut trong php thu g n n thnh k hi u v tri c a 1 sn xu t. V d: Trong v d trn. Ngn xp $ $a $ab $aA $aAb $aAA $aAAc $aAAcd u vo abbcde$ bbcde$ bcde$ bcde$ cde$ cde$ de$ e$ Hnh ng Handle Suy dn phi Tin t kh tn

$aAAcB e$ $aAAcBe $

gt gt abbcde a thu gn A -> b b abbcde ab gt aAbcde aA thu gn A -> b (2) b aAbcde aAb gt gt thu gn B -> d (1) d khng phi l handle do p dng thu gn ny l khng thnh cng gt dng, quay lui 1 (gt)

dng, quay lui 2 (gt) $aAbc de$ thu gn A -> Abc Abc AAbcde $aA de$ gt $aAd e$ thu gn B -> d d AAde $aAB e$ gt $aABe $ thu gn S -> aABe $S $ chp nhn 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 . $aAAcde $ W = a1a2...an
ai ai+1
...

an

Sn xut A ->

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

* 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 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, thuc chin lc phn tch topdown nhng 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 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.1 First v follow * First ca mt xu: First( ) cho chng ta bit xu bt u bng k hiu kt thc no. nh ngha 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 c th suy dn n tn cng thnh mt xu

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) vi mi t=1,...,i vi i<k th thm First(Yi+1) vo 3. nu X -> Y1...Yk l mt sn xut th thm First(Y1) vo First(X) tr nu First(Yt) cha Cch tnh First( ) vi First(X) tr . Nu trng hp i=k th thm vo First(X) 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(Xi+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) = {a T | +$ 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)). 2. Nu c mt sn xut dng B-> A v th thm cc phn t trong First( ) tr vo Follow(A). Tht vy: nu a nn tn ti S =>* Follow th ta c a 3. First( ) th tn ti =>*a , khi , do c lut B-> A
1B 1

=>

1=> 1

Aa

Theo nh ngha ca First(B)


1Ba 1

Follow(A)

Nu c mt sn xut dng B-> A hoc B-> A vi Follow(B) th theo nh ngha Follow ta c S =>* Follow(A)

th mi phn t thuc Follow(B) cng thuc Follow(A) Tht vy: nu a =>* 1 Aa


1

, suy ra a

- tnh Follow ca cc k hiu khng kt thc: ta xt cc sn xut. Ti mi sn xut, p dng qui tc tnh Follow thm cc k hiu vo tp Follow. Lp li v dng khi 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) = {$} Follow(A) = {b,$} Follow(B) = {$} 2.3.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 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 Thut ton xy dng bng LL(1): Input: Vn phm G. Output: Bng phn tch M. Phng php: Vi mi sn xut A-> , thc hin bc 2 v bc 3 1. Vi mi k hiu kt thc a 2. Nu mi b First( ) v $ Cho vn phm sau: Lp bng phn tch: First( ), nh ngha mc M(A,a) l A-> vo M[A,$]) bB | Follow $ $, b $ Follow(A) th nh ngha mc M(A,b) l A-> (nu Follow(A) th thm A-> S AB; A K hiu S A B K t cha kt thc S A B S A B

t tt c cc v tr cha c nh ngha trong bng l li. aA | ; B First a, b, a, b, K t kt thc a AB aA bB S A b AB S A B $ AB

2.3.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 nhiu hn mt lut sinh.

V d: Vn phm {S K T CHA KT THC S S' E E

iEtSS| a

eS |

b}

K t kt thc a S a S S' b b e S i iEtSS' S' t $

eS

* 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 khng phi l LL(1), nu tri li th vn phm l LL(1). - Cch khc: mt vn phm l LL(1) phi tho mn iu kin sau: Nu A a) b) | l hai sn xut ca vn phm th phi tho mn: First( ) Nu First( ) = First( ) th Follow(A) First( ) =

2.3.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 $.

-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 phn tch gp li v gi b khi phc li.
V d: Cho vn phm: {ETE; E +TE | ; TFT; T*FT | ; F (E) | id}

a) b) c) d) K hiu vn phm E E T T F

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 First (, id +, (, id *, (, id Follow ), $ ), $ +, ), $ +, ), $ +, *, ), $

Sn xut ETE E+TE TFT T*FT F(E) Fid Bng phn tch LL(1) K hiu V tri E E T T F F id TFT T K hi u u vo Id ETE E +TE +

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

( E TE

E TFT T*FT F (E) T

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

$ETid $ET $E $

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.4 Phn tch LR(k) - L l Left to right: qut xu vo t tri qu phi. - R l Right most parsing: suy dn sinh ra l suy dn phi. - k l s k hiu nhn trc a ra quyt nh phn tch. * 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: Ta phi thc hin qu nhiu cng vic xy dng c b phn tch LR cho mt ngn ng lp trnh. 2.4.2 Mt s khi nim 1) 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 A XYZ Lut sinh A XYZ c 4 mc nh sau: A X YZ A ch to ra mt mc A XY Z A XYZ

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

th phi thu gn
1 2

thnh A, cn nu

th vic phn tch theo sn

xut A i hi phi s dng hnh ng gt. - 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. 3) 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. 4) 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.

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 5) 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 mc c ngha i vi tin t kh tn x v c B sn xut ta cng c [B->. ] l mc c ngha i vi tin t kh tn x . Php ton tnh bao ng ca mt mc l tm tt c cc mc c ngha tng ng ca cc mc trong tp . Theo nh ngha ca mt mc l c ngha i vi mt tin t kh tn, chng ta c suy dn S =>*rm xAy =>rm x B y S dng sn xut B -> ta c suy dn S =>*rm x mc c ngha ca tin t kh tn x V d: Xt vn phm m rng ca biu thc: E' E' E T F E' E E T F id E E+T|T T (Lut 1) (Lut 2) (Lut 2) (Lut 2) bng lut 2 ta thm cc sn xut E vi cc T). T * F v T F vo. ta li thm T E T F T*F|F E+T T*F (E) F (E) | id (Lut 2) (Lut 2) (Lut 2) Nu I l tp hp ch gm vn phm {E' E} th closure(I) bao gm: y. Vy th [B->. ] l mt l

E c t vo closure(I) theo lut 1. E + T v E

Khi c mt E i ngay sau mt chm nm u tri ( E By gi li c T i theo sau mt

Cui cng ta c Closure(I) nh trn.

6) 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 ] Trc quan: Nu I l tp cc mc c ngha i vi mt tin t kh tn 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} Tnh goto (I, +) ? Ta c J = { E E + T} goto (I, +) = closure(I') bao gm cc mc : EE+ T (Lut 1) T F (Lut 2) T T*F (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. 7) Thut ton xy dng LR(0) 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 V d: Cho vn phm G: { E E + T | T; T T * F | F; F ( E ) | a } Hy tnh LR(0) - Xt vn phm G l vn phm gia t ca G. Vn phm G: {E E; E E + T | T; T T * F | F; F ( E ) | a} Tnh theo thut ton trn ta c kt qu nh sau: no th I.

Closure({E' E}): I0: = {E E E E+T E T T T*F T F F (E) F a} Goto (I0, E) I1= { E E E E +T} Goto (I0, T) I2 = {E

Goto (I1, +) I6 = { E E+ T T T*F T F F (E) F a} Goto (I2, *) I7= { T -> T*.F F -> .(E) F -> .a} Goto (I4, E ) I8 = {F (E ) Goto (I4, T ) I9= { E T Goto (I4, F ) I10= { T F } T

T *F}

E + T} T *F }

Goto (I0, F) I3= { T F } Goto (I0, ( ) I4 = {F ( E) E E+T E T T T*F T F F (E) F a Goto (I0, id) I5= { F a }

} Goto (I4, a) I11= {E E+T }

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 .

I0

I1

I6 F
(

I9 I3 I4 I5 I10 I4 I5

I7

a T * F
(

I2

I7

a F I3
(

I4

I8

I11 I6

+ T F a a I5 I2 I3

2.4.3 Xy dng bng phn tch SLR xy dng bng phn tch LR ta c 3 phng php khc nhau: + Phng php Simple LR - SLR: l phng php "yu" nht nhng 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 LR chun ( canonical LR) Phng php mnh nht nhng tn km nht. + Phng php 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. * Xy dng bng phn tch SLR

- 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. 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 FOLLOW(E) = {+, ), $} FOLLOW(T) = {*, +, ), $} FOLLOW(F) = {*, +, ), $} Da vo h tp hp mc C c xy dng trn, ta thy: 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. Xt I1: Mc E' E cho action[1, $] = "accept", mc E E + T cho action[1, +] = "shift 6". 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(0): K hiu: si l shift i, rj l reduce theo lut (j), khong trng biu th li Trng thi 0 1 2 3 4 5 6 7 8 9 10 11 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 3 10 + Action * ( S4 r2 r4 goto ) $ accept r2 r4 8 2 3 E T F

V d: Xt vn phm G vi tp lut sinh nh sau: {S L = R S R L *R L id R L} y l vn phm khng m h nhng khng phi l vn phm SLR(1). H tp hp cc mc C bao gm:

I0 :

S' S S L L R I1 :

S L=R R *R id L S' S

I4 :

L R L L L S R L L *R

* R L *R id id L= R L *R id

I5 : I6 :

I2 :

S R

L =R L I7 : L

I3 :

R I8 : I9 : R S L L=R

Khi xy dng bng phn tch SLR cho vn phm, khi xt tp mc I2 ta thy mc u tin trong tp ny lm cho action[2, =] = "shift 6". Bi v = FOLLOW(R), nn mc th hai s t action[2, =] = "reduce (R L)" C s ng ti action[2, =]. Vy vn phm trn khng l vn phm SLR(1). 2.4.4 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. * 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 $) Gii thut

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 (4) T -> F (5) F -> ( E )

(3) T -> T * F (6) F -> a

Chng ta s dng thut ton LR phn tch xu vo a*a+a. p dng bng phn tch trong phn 2.4.3, ta c qu trnh phn tch 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 u vo 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

0E1+6 0 E 1 + 6 id 5 0E1+6F3 0E1+6T9 0E1

id $ gt $ thu gn F->id $ thu gn T->F $ thu gn E->E+T $ chp nhn (accepted) Qu trnh phn tch LR , a], trong

2.4.5 Xy dng bng phn tch LR chun 1) Mc LR(1) ca vn phm G l mt cp dng [A A l lut sinh, a l mt k hiu kt thc hoc $. * Thut ton xy dng h tp hp 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'); 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;

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 } Tp k hiu cha kt thc ={S, L, R} v tp k hiu kt thc {=, *, id, $} I0 : S' Closure (S' S, $) {S $ S L L R Goto (I0,S) I1 : Goto (I0, L) I2 : $ {S' {S R Goto (I 0,R) I3: Goto (I0,*) I4: S S, $ Goto (I4,R) L = R, Goto (I4, L) R, $ Goto (I6,R) * R, = id, = Goto (I6,L) L, $} S ,$} L = R, Goto (I6,*) I7 : L I8 : R I9 : S I10 :R I11 :L R L *R ,= L ,= L=R ,$ L ,$ * R, $ L, $ * R, $ R id, $ id , $ *R ,$

L , $} Goto (I6, id) I12 :L R ,$ Goto (I11,R) I13 :L

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

Goto (I11,L) Goto (I11,*) Goto (I11,id)

I10 I11 I12

Goto (I0,id) I5 : Goto (I2,=) I6 :

2.4.6 Xy dng bng phn tch c php LR chnh tc * Thut ton xy dng bng phn tch c php 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 2.2. Nu [A 2.3. Nu [S'

a ,b] a S ,$]

Ii v goto(Ii,a) = Ij th action[i, a]= "shift j". Ii , A S' th action[i, a] = "reduce (A

y a phi l k hiu kt thc. 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 trn 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 Goto L R 2 3

$ acc r5 r2

S 1

s6 s4 r4 s11 r3 r5 s12 s5

8 10

7 9

r1 r5 s11 s12 r4 r3 10 13

2.4.5 Xy dng bng phn tch LALR * Ht nhn (core) ca mt tp hp mc LR(1)

1. Mt tp hp mc LR(1) c dng {[A , a]}, trong A 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 * Thut ton xy dng bng phn tch c php 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' closure (S' S, $) : S S L L R I1 = Goto (I0,S) : I2 = Goto (I0, L) : S' S R S

S, $ L = R, $ R, $ * R, = id, = L, $ S ,$ L = R, $ L ,$ 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 : State 0 1 2 3 411 512 6 713 810 9 = Action * id s411 s512 acc s6 r2 810 r4 s411 s512 r3 r5 r3 r5 r1 r4 810 9 713 $ S 1 Goto L 2 R 3

Bng phn tch c php LALR Bng phn tch c to ra nh trn 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). 3 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. 3.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 cc k hiu Follow(A) vo tp ng b ho ca k hiu khng kt thc A. Nu gp li, b qua cc t ca xu vo cho n khi gp mt phn t ca Follow(A) th ly A ra khi ngn xp v tip tc phn tch. b) a 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: Ta 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$ $ $ $

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

c thm Phng php phn tch bng CYK (Cocke Younger Kasami) - Gii thut lm vic vi tt c cc VP PNC. Thi gian phn tch l: n3 (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 a l mt sn xut v a l k hiu th i trong w}; ij = { A | A 2) For j:=2 to n do For i:=1 to (n j +1) do Begin ; ij = For k:=1 to (j -1) do { A | A BC l mt sn xut; B ij = ij ik C end; end; V d: Xt vn phm chun chmsky S AB|BC; A BA|a; B CC|b; (1) (2) (3) (4) (5) (6) Xu vo w= baaba; i j b a a b a B A,C A,C B A,C S,A B S,C S,A B B S,A,C S,A,C b a a b a C AB|a; (7) (8)

i+k, j -k

};

B S,A

A,C B B S,A,C

A,C S,C B

B S,A

A,C

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

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

b B S,A

a A,C B B S,A,C

a A,C S,C B

b B S,A

a A,C
BB

C A C A B

S,A,C

BI TP Cu 1 Ti sao cy phn tch nhn c t thut ton phn tch topdown c gi l cy phn tch tri? Ti sao cy phn tch nhn c t thut ton phn tch bottom-up c gi l cy phn tch phi? Cu 2 Cho vn phm G nh sau: {E ! E E E && E E ( E ) E a } Vi E l k hiu bt u; ! , &&, a l cc k hiu kt thc. 1) Hi xu vo ! ( a ) && a c thuc ngn ng sinh ra bi vn phm G khng? v sao? 2) Chng t rng vn phm trn l nhp nhng. 3) Vn phm trn c phn tch c bi phng php Topdown khng? ti sao? Cu 3 Cho vn phm dng m t biu thc s hc nh sau: { E -> T E E -> + T E | T -> F T T -> * F T | F -> a | ( E ) } Vi E, E, T, T, F l cc k hiu khng kt thc, E l k hiu bt u. 1) Hy vit mt dn xut phi nht i vi xu vo a+a*a v v cy phn tch. 2) C s dng phng php phn tch Bottom-up i vi vn phm trn c khng? V sao? 3) Hy vit qu trnh phn tch xu vo a+a bng phng php phn tch Top-down. Cu 4 Cho vn phm G nh sau: { S -> A B A -> a A | B -> b B | } Trong S, A, B l cc k hiu khng kt thc, S l k hiu bt u v a, b l cc k hiu kt thc. 1) Hy tnh First v Follow ca S, A, B 2) Tnh First ca cc v phi ca cc sn xut 3) Xy dng bng phn tch LL(1) cho vn phm G. Vn phm G c phi l vn phm LL(1) khng? 4) Nu vn phm trn l LL(1). Hy vit qu trnh phn tch LL(1) i vi xu vo aabb Cu 5 Chng minh rng vn phm qui tri khng th l LL(1). Cu 6 Chng minh rng vn phm LL(1) khng th nhp nhng.

Cu 7 Cho vn phm sau vi N, B l cc k hiu khng kt thc, N l k hiu bt u: (1) N N B (2) N B (3) B a (4) B b Hy vit qu trnh phn tch LR vi xu vo aaba . Xy dng bng phn tch theo 3 phng php (SLR, LR(1), LALR) Cu 8 Cho vn phm sau vi S, A, B l cc k hiu khng kt thc, S l k hiu bt u; a, b l cc k hiu kt thc. {S -> AaAb | BbBa A -> B -> } Xy dng bng phn tch LL(1). Vn phm trn c phi l LL(1) khng? Vn phm trn c phi l vn phm SLR(1) khng? Cu 9 Nu nhng im ging nhau v khc nhau ca thut ton phn tch bottom-up v thut ton phn tch LR? (Nu ngn gn, khng trnh by li thut ton) Nhng vn phm nh th no th khng phn tch c bng thut ton bottom-up? Ti sao?

CHNG 4 BIN DCH DA C PHP Mc tiu: Sinh vin cn nm c cch gn cc lut sinh ca vn phm (vn phm biu din c php ca ngn ng ) vi cc lut ng ngha ( ngha ca cu lnh): nh ngha c php iu khin v lc dch. Bit cch thit k chng trnh thc hin mt cng vic no t mt lc dch hay t mt nh ngha c php iu khin c th. Ni dung: - nh ngha c php iu khin - Lc dch
1 MC CH, NHIM V

Qu trnh dch c bm theo cu trc c php ca chng trnh ngun cn dch (cu trc c php ny c xc nh thng qua b phn tch c php). C php-iu khin (syntax-directed) l c ch iu khin chng trnh dch bm theo cu trc c php v c dng cho cc giai on sau giai on phn tch c php (giai on phn tch ng ngha, sinh m trung gian ). thc hin c c ch iu khin ny, ta s gn cc hnh ng ng ngha ca cu lnh (lut ng ngha) vo cc sn xut ca vn phm c nh ngha trong giai on phn tch c php (lut c php). Sau , xy dng c ch duyt cc hnh ng ng ngha ny. C hai tip cn lin kt cc qui tc ng ngha vo cc lut c php l nh ngha c php iu khin (syntax-directed definition) v lc dch (translation scheme). nh ngha c php iu khin: l iu khin mc cao du i nhiu chi tit thc hin khng cn ch r rng th t thc hin. Lc chuyn i c th t nh gi lut ng ngha cho php thy mt s chi tit thc hin. .
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. 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). Mt thuc tnh l th bt k: mt xu, mt con s, mt kiu, mt khong nh...Gi tr ca mt thuc tnh (ti mt nt) c xc nh bng mt lut ng ngha tng ng vi sn xut dng ti nt khi xy dng cy phn tch c php. 2.1 nh ngha 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 L -> E n E -> E1 + T E -> T T -> T1 * F T -> F F -> ( E ) F -> digit Lut ng ngha 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

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. V d: V cy cho u vo: 3*4+4n
L E1 E2 Chng ta duyt v thc hin cc T1 hnh ng ng ngha ca v d trn theo qui trn xung: khi gp mt nt ta s T2 * thc hin tnh thuc tnh tng hp ca cc con ca n ri thc hin hnh ng ng F1 ngha trn nt . Ni cch khc, khi phn tch c php theo kiu bottom-up, th khi 3 no gp hnh ng thu gn, chng ta s thc hin hnh ng ng ngha nh gi thuc tnh tng hp + T3 n

F3 F2 4 4

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 bin trong ngn ng C sn xut D -> T L T -> int T -> float L -> L1, id L -> id lut ng ngha L.in := T.type T.type := interger T.type := float L1.in := L.in ; addtype(id.entry, L.in) addtype(id.entry,L.in)
D T L1

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

int

L2

L3

Chng ta duyt v thc hin cc hnh ng ng ngha s c kt qu nh sau: 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) )
3 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 T -> int T -> float L -> L1, id L -> id


D

L.in := T.type T.type := interger T.type := float L1.in := L.in ; addtype(id.entry, L.in) addtype(id.entry,L.in)

in

type in

L
f

entry

L int
in

,
entry

entry

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. + 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.
4 XY DNG 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. 4.1. Xy dng cy c php cho biu thc 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 c 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. 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) (2): p2 := mkleaf(num,4) (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 (4): p4 := mkleaf(id, entryc) (5): p5 := mknode(+, p3, p4)

4.2 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 xy dng cy c php cho biu thc: Lut sinh
E E1 + T E E1 - T ET T (E) T id T num

Lut ng ngha
E.nptr := mknode(+, E1.nptr, T.nptr) E.nptr := mknode(-, E1.nptr, T.nptr) E.nptr := T.nptr T.nptr := E.nptr T. nptr := mkleaf(id, id.entry) T.nptr := mkleaf(num, num.val)

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.

5 TH C HNG KHNG TUN HON (Directed Acyclic Graph DAG)

DAG cng ging nh cy c php, tuy nhin trong cy c php cc biu thc con ging nhau c 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. Lnh gn
i := i + 10

DAG

Biu

id num + := 1 1

entrya 10 2 3

din

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.


6. TH T NH GI THUC TNH

Trn th ph thuc c xy dng, 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 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 int a,b,c nh sau:

in: 5

f: 6 type: 4 in: 7 entry: 3 f: 8

L int
in: 8 f: 9

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


6.1 Phng php dng cy phn tch c php - Cy phn tch c to ri - Xy dng mt th t duyt hay mt sp xp topo ca th t cy phn tch c php : duyt cy phn tch t tri sang phi v theo chiu cao. - Nu cn thit c th duyt i duyt li vi ln. - Phng php ny khng thc hin c nu th ph thuc c vng. * Th tc duyt theo chiu su 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 6.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. 6.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. 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 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
Lut ng ngha Lut sinh ALM

L.i := l(A.i) M.i := m(L.s)

A.s := f(M.s)
AQR

R.i := r(A.i) Q.i := q(R.s) A.s := f(Q.r)

V d:

Cho nh ngha trc tip c php


Lut sinh ALM Lut ng ngha

L.i := l(A.i) M.i := m(L.s) A.s := f(M.s)

AQR

R.i := r(A.i) Q.i := q(R.s) A.s := f(Q.r)

y khng phi l mt nh ngha L_thuc tnh v thuc tnh k tha Q.i ph thuc vo thuc tnh R.s ca k hiu bn phi n trong lut sinh. 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. 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. 6.4 nh gi thuc tnh "trn cng chuyn bay" - Phng php ny, vic nh gi thuc tnh c thc hin cng vi b phn tch ch khng phi sau n. y l m hnh tt cho cc trnh bin dch duyt mt ln. Khi s dng phng php ny, c hai vn cn quan tm. l phng php phn tch v kiu thuc tnh c dng. B nh gi thuc tnh-L LL(1) B nh gi dng mt ngn xp cha thuc tnh. Khi mt k hiu khng kt thc c xc nh, cc thuc tnh k tha c y vo ngn xp. Khi v phi ca sn xut c x l, th cc thuc tnh k tha v tng hp ca mi k hiu v phi ny cng c y vo. Khi ton b v phi c x l xong th ton b cc thuc tnh ca v phi c ly ra, v cc thuc tnh tng hp ca v tri c y vo Trong 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 k hiu khng kt thc c gn vi mt hm thc hin. Gi s vi k hiu 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|

. . .|

Nh vy hm phn tch k hiu A s c nh ngha nh sau: void ParseA(Symbol A, Rule r, ...) {if(r==A else if(r==A ... else if(r==A } 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 s khai trin A theo lut A X1. . . Xk vi
i n) 2) 1)

gi hm x l ng ngha tng ng lut A

gi hm x l ng ngha tng ng lut A

gi hm x l ng ngha tng ng lut A

first( i), chng ta

= 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 T {R.i:=T.val} R {E.val:=R.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}

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=RTR1) { match(+);// i snh ParseT(...); ParseR(...); } else if(lut=R-> ) { // R -> {R.s:=R.i} R.s:=R.i } } Tng t i vi hm ParseT() Xt xu vo: 6+4 First(E)=First(T) = {(,num} Xy dng bng LL(1) num E T R Ngn xp $E $RT $Rnum1 $R $R1T+ u vo E TR T num R +TR Lut sn xut + ( E TR T (E) R R ) $ First(R) = { ,+} Follow(R) = {$,)} R1.i:=R.i+T.val; R.s:=R1.s

u vo 6+4, sau khi phn tch t vng ta c num1 + num2 Lut ng ngha T.val=6 R.i=T.val=6 num1 + num2 $ E->TR num1 + num2 $ T->num1 num1 + num2 $ + num2 $ R->+TR1 + num2 $

$R1T $R1num2 $R1 $

num2 $ T->num2 num2 $ $ R1-> $

T.val=4 R1.i=T.val=4 R1.s=T.val+R1.i=10 R.s=R1.s=10

E.val=R.s=10
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: 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

Ta 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, ta t vo ngn xp 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 ta cng loi b gi tr tng ng vi n ra khi ngn xp gi tr. V d: Xem qu trnh phn tch gt, thu gn vi xu vo 3*5+4: + Vi k hiu khng c gi tr val, ta k hiu - cho val ca n xu vo ngn xp ngn Lut c php, ng ngha trng thi xp gi tr gt d1 F 3 3 Fdigit F.val:=digit.lexval (loi b digit)

d1 * d2 + d3 n * d2 + d3 n * d2 + d3 n

TF * d2 + d3 n d2 + d3 n + d3 n + d3 n + d3 n + d3 n d3 n n n n n T *T d2 * T F*T T E +E d3 + E F+E T+E E En L 3 -3 53 53 15 15 - 15 4 15 4 15 4 15 19 - 19 19 T.val:=F.val (loi b F) gt gt Fdigit F.val:=digit.lexval (loi b digit) TT1*F T.val:=T1.val*F.val (loi b T1,*,F) ET E.val:=T.val (loi b T) gt gt Fdigit

F.val:=digit.lexval (loi b digit)


TF T.val:=F.val (loi b F) EE1+T E.val:=E1.val+T.val (loi b E1,+,T ) gt LE n L.val:=E.val (loi b E,n)

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. 7. LC CHUYN I(Lc dch) - Translation Scheme 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. 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 Dyt 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(+)

5: print(+)

1: print(3) 2: print(1)

T 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 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
4: print(+) 5: print(+)

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: ETR R R+TR T(E) R-TR 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. Ta t R.i cha gi tr ca phn biu thc ng trc R v R.s cha kt qu. 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
num(6)
R i=6 s=9

T val=4 num(4)

R i=10 s=9

T val=1

R i=9 s=9

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.

BI TP Cu 1: Cho c php iu khin tnh gi tr ca mt s h c s hai nh sau: Lut c php Lut ng ngha B 0 B1 BB1 0 BB1 1 B0 B1 B.val=0; B.val:=1; B.val:=2*B1.val +0 B.val:=2*B1.val+1 B.val=0; B.val:=1;

Hy xy dng cy phn tch c php i vi xu vo 1010 v thc hin cc lut ng ngha trn cy phn tch ny theo chiu su (ch ra th t cc bc thc hin lut ng ngha). Cu 2: Cho vn phm sau m t mt s khai bo bin trong ngn ng C nh sau: (vi D, T, L l k hiu khng kt thc v D l k hiu bt u). D -> T L L -> id | id , L | id [ num ] | id [num] , L T -> int | float Hy xy dng lc dch trn cc sn xut vn phm y sinh kiu cho cc bin. Xy dng cy phn tch v thc hin cc lut ng ngha theo lc dch trn cy phn tch vi xu vo float a, b[3] tnh kiu ca a v b. Cu 3: Tng t bi 2 nhng thay lc dch bng c php iu khin.

CHNG 5

PHN TCH NG NGHA


Mc tiu: Cn nm c: - H thng kiu vi cc biu thc kiu thng gp cc ngn ng lp trnh. - Dch trc tip c php ci t b kim tra kiu n gin t c th m rng ci t cho nhng ngn ng phc tp hn Ni dung: Nhim v ca giai on kim tra ng ngha l 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). C 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. Ni dung trong phn ny, ta ch xt mt s dng trong kim tra kiu ca chng trnh ngun.
1. 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: interger x interger pointer(interger)
2 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. 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 n cc 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. i vi cu lnh khng c gi tr, ta gn cho n kiu c s c bit void. Nu c li v kiu 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: V d 1: Vn phm cho khai bo: DD;D D id : T T interger| char| ^ T| array [num] of T| boolean| real Lut c php
D id : T

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) T.type := real T.type := boolean

T char T interger T ^T1 T array [num] of T1 T real T boolean Hnh ng ng vi sn xut D vo bn k hiu v tr entry.

Tn:T lu vo bng k hiu mt kiu

cho mt tn. Hm {addtype (tn.entry, T.type)} ngha l ct mt thuc tnh T.type

V d 2: Vn phm sau cho biu thc S id := E E E + E| E mod E| E1 [ E2 ]| num| id| letter


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 E -> E1 + E2 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 -> num E -> id E -> E1 mod E2 E -> E1 [ E2 ] 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

letter

E.type := char

V d 3: Kim tra kiu cho cc cu lnh: S if E then S | while E do S| S1 ; S2


Lut c php Lut ng ngha

S -> if E then S1 S -> while E do S1

S.type := if E.type=boolean then S1.type else type_error 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

S -> S1 ; S2

V d 4: Kiu hm: Lut c php th hin li gi hm: E E1( E2)

function f(a,b:char):^interger; begin ... end; var 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

p:^interger; q:^char; x,y:interger;

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=s1 end; 3.2 i kiu Xt biu thc dng : x+i, (x: kiu real, i kiu integer) s2 and t = t1 t2 then return sequiv(s1,t1) and sequiv(s2,t2) else return false;

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 nha u. thc hin php cng, trc tin chng trnh dch i 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. Mt php i kiu c gi l r nu ngi lp trnh phi vit s th thc hin php i ny. Sn xut E
E S.s

Lut ng ngha S E.type:= integer E.type:= real E.type:= lookup (tn.entry) E.type:= if E1.type = integer and E2.type = integer Then integer Else if E1.type = integer and E2.type = real Then real

tn

E1 op E2

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 thuc vo ng cnh ca n. V d: + 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.

BI TP Cu1: Vit biu thc kiu cho cc kiu sau: a) Mng con tr tr ti s thc, ch s mng t 1 n 100 b) Mng hai chiu vi cc dng c ch s t 0 n 9, ct t 0 n 10. Cu 2: Cho vn phm: PD;S D D ; D | id : T T integer | boolean | array [ num ] of T S S ; S S E := E | if E then S | E num | id |E mod E |E [ E ] Trong P l k hiu bt u; P, D, S, T, E l cc k hiu khng kt thc; ;, :, id, integer, boolean, array, num, of, :=, if, then, mod, [, ] l cc k hiu kt thc; integer l kiu nguyn, boolean l kiu logic (ging trong Pascal); id l t t tn, num l t t s nguyn. Bn hy: a) Vit lc dch kim tra kiu cho vn phm trn b) Tnh kiu cho cc biu thc trong on chng trnh sau: Cu3 Cho cc khai bo sau: a: array[10] of interger; b: boolean; a[0] := b Yu cu bn v cy c php ng vi on chng trnh trn, sau tnh kiu cho cc nt trn cy c php .

CHNG 6

BNG K HIU
Mc ch: Hc song chng ny sinh vin nm c: - Cch xy dng bng k hiu. - Bit chn cu trc d liu p hp xy dng bng k hiu Ni dung: - Cc yu cu ca bng k hiu - Cc cu trc d liu dng xy dng 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 tra vic dng cc tn phi khp vi khai bo + Sinh m: ly kch thc, loi b nh phi cp pht cho mt tn + Cc khi khc: pht hin v khc 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 .

Tp cc t kha c lu tr trong bng k hiu trc khi vic phn tch t vng din ra. Ta cng c th lu tr cc t kha bn ngoi bng k hiu nh l mt danh sch c th t ca cc t kha. Trong qu trnh phn tch t vng, khi mt tr t vng c xc nh th ta phi tm (nh phn) trong danh sch cc t kha xem c tr t vng ny khng. Nu c, th tr t vng l mt t kha, ngc li, l mt danh biu v s c a vo bng k hiu.
* 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 6.1 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, bng k hiu ch gi cc con tr tr ti u mi Lexeme

Hnh 6.2 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 6.3 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 6.4 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. 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 7

SINH M TRUNG GIAN

Mc tiu: Sinh vin nm c cch to ra mt b sinh m trung gian cho mt ngn ng lp trnh n gin Ni dung: Cc cch biu din m dng trung gian , c bit l m ba a ch. B sinh m ba da ch dng nh ngha trc tip c php dch cc khai bo, u lnh sang m ba a ch 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. V d: a := b * - c + b * - c, ta c cy c php v DAG:

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

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: K php hu t ca (9-5)+2 l 95-2+; 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+? 3 M 3 A CH M ba a l mt chui cc cu lnh, thng thng c dng: x:= y op z X,y,z l tn, hng do ngi lp trnh t t, op l mt php ton no php ton ton hc, logic 3.1 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 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 3.2 Ci t cc cu lnh ba a ch 3.2.1 B t B t l cu trc bn ghi vi bn trng, c gi l op, arg1, arg2 v result. V d: Cu lnh t1 := - b t3 := t1 * t2 Op 0 1 2 3 Uminus + * Assign a := -b * (c+d) c chuyn thnh: t2 := c+d a := t3 arg1 b c t1 t3 d t2 arg2 result t1 t2 t3 a

Biu din bng b t nh sau:

3.2.2. B ba 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 0 1 2 3 uminus + * assign arg1 b c (0) a d (1) (2) arg2

Lnh sao chp t kt qu trong arg1 v tham s trong arg2, 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. Php ton ba ngi nh x[i] := y cn n hai mc trong cu trc b ba: op (0) (1) Tc t (0) (1) Php ton ba ngi x := y[i] op []= assign arg1 y x arg2 i (0) []= assign arg1 x (0) arg2 i y

3.3 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. Sn xut S -> id := E Lut ng ngha S.code := E.code || gen(id.place := E.place)

3.3.1 Sinh m ba a ch cho biu thc s hc

E.place := newtemp; E -> E1 + E2 E.code := E1.code || E2.code || gen(E.place := E1.place + E2.place) E.place := newtemp; E -> E1 * E2 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 E -> ( E1 ) E -> id

Thuc tnh S.code biu din m 3 a ch cho lnh gn S. K hiu E c 2 thuc tnh E.place l gi tr ca E v E.code l chui lnh 3 a ch nh gi E. Khi m lnh 3 a ch uc sinh, tn tm c to ra cho mi nt trong trn cy c php. Gi tr ca k hiu cha kt thc E trong lut sinh E E1 + E2 c tnh vo trong tn tm t. Ni chung m lnh 3 a ch cho lnh gn id := E bao gm m lnh cho vic nh gi E vo trong bin tm t, sau l mt lnh gn id.place := t. Hm newtemp tr v mt chui cc tn t1, t2, .. .. , tn tng ng cc li gi lin tip. Gen (x ':=' y '+' z) biu din lnh 3 a ch x :=y+z 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 3.3.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 on lnh sau: if a>b then else if a>b goto L1 goto L2 L1: t1 := a b a := t1 goto Lnext L2: Lnext: Mt s c php iu khin sinh m ba a ch cho cc biu thc Boole. Sn xut E -> E1 or E2 E1.true := E.true; E1.false := newlable; E2.true := E.true; E2.false := E.false; E.code := E1.code || gen(E1.false :) || E2.code Lut ng ngha t2 := b-a b := t2 a:=a-b; b:=b-a;

c chuyn thnh m ba a ch nh sau E.true = L1 v E.false = L2

E -> E1 and E2

E1.true := newlable; E1.false := E.false; E2.true := E.true; E2.false := E.false; E.code := E1.code || gen(E1.true :) || E2.code

E -> not E1

E1.true := E.false; E1.false := E.true; E.code := E1.code;

E -> ( E1 )

E1.true := E.true; E1.false := E.false; E.code := E1.code;

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

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)

V d: Sinh m ba a ch cho on chng trnh sau: if a>b and c>d then else 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 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 x:=y-z x:=y+z

L1: L2:

if c>d goto L2 t1 := y+z

goto L3 x := t1 goto L4 L3: L4: 3.3.3 Biu thc logic v biu thc s hc Xt vn phm E E+ E | E and E | E relop E | id Trong , E and E i hi hai i s phi l logic. Trong khi + v relop c cc i s l biu thc logic hoc/v s hc. sinh m lnh trong trng hp ny, chng ta dng thuc tnh tng hp E.type c th l arith hoc bool. E s c cc thuc tnh k tha E.true v E.false i vi biu thc s hc. Ta c lut ng ngha kt hp vi E E.type := arith; if E1.type = arith and E2.type = arith then begin /* php cng s hc bnh thng */ E.place := newtemp; E.code := E1.code || E2.code || gen(E.place ':=' E1.place '+' E2.place) end else if E1.type = arith and E2.type = bool then begin E.place := newtemp; E2.true := newlabel; E2.false := newlabel; E.code := E1.code || E2.code || gen(E2.true ':' E.place ':= ' E1.place +1) || gen('goto' nextstat +1) || gen(E2.false ':' E.place ':= ' E1.place) else if ... Trong trng hp nu c biu thc logic no c biu thc s hc, chng ta sinh m lnh cho E1, E2 bi cc lnh E2.true : E.place := E1.place +1 goto nextstat +1 E2.false : E.place := E1.place E1 + E2 nh sau t2 := y-z x := t2

3.3.4 Sinh m ba a ch cho mt s lnh iu khin sinh ra mt nhn mi, ta dng th tc newlable. Vi mi biu thc logic E, chng ta kt hp vi 2 nhn E.true : Nhn ca dng iu khin nu E l true. E.false : Nhn ca dng iu khin nu E l false. S.code : M lnh 3 a ch c sinh ra bi S. S.next : L nhn m lnh 3 a ch u tin s thc hin sau m lnh ca S. S.begin : Nhn ch nh lnh u tin c sinh ra cho S. * Dch biu thc logic trong cc lnh iu khin Nu E c dng a<b th m lnh sinh ra c dng if a<b goto E.true goto E.false Nu E c dng E1 or E2 . Nu E1 l true th E l true. Nu E1 l false th phi nh gi E2. Do E1.false l nhn ca lnh u tin ca E2. E s true hay false ph thuc vo E2 l true hay false. Tng t cho E1 and E2. Nu E c dng not E1 th E1 l true th E l false v ngc li.

nh ngha trc tip c php cho vic dch cc biu thc logic thnh m lnh 3 a ch. Ch true v false l cc thuc tnh k tha. Sn xut S -> if E then S1 E.false := S.next; S1.next := S.next; S.code := E.code || gen(E.true :) || S1.code S -> if E then S1 else S2 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 -> while E do S1 S.begin := newlable; E.true := newlable;
Lut ng ngha

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) V d 1: Cho m ngun sau: while a<>b do if a>b then else M ba a ch: L1: L2: L3: if a<>b goto L2 goto Lnext if a>b goto L3 goto L4 t1 := a-b a := t1 goto L1 L4: t2 := b-a b := t2 goto L1 Lnext: 3.3.5.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.

a:=a-b b:=b-a

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 Lut ng ngha

P -> D D -> D ; D D -> id : T T -> interger T -> real T -> array [ num ] of T1 T -> ^T1

offset := 0

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

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. 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 Cu 1: Chuyn cc cu lnh hoc on chng trnh sau thnh 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;} } Cu 2: 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. Cu 3: Trnh by cu trc lu tr biu thc cc dng : ( a + b) * ( c + d ) + ( a + b + c) a) B t . b) B tam. c) B tam gin tip.

Cu 4: Sinh m trung gian ( dng m my 3 - a ch) cho cc biu thc C n gin sau : a) x = 1 c) x = x + 1 e) x = a / ( b + c) - d * ( e + f ) Cu 5: Sinh m trung gian (dng m my 3 - a ch) cho cc biu thc C sau: a) x = a [i] + 11 c) a [i][j] = b [i][k] * c [k][j] e) a[i] + = b[j] Cu 6. Dch lnh gn sau thnh m my 3 - a ch : A [ i,j ] := B [ i,j ] + C [A[ k,l]] + D [ i + j ] b) a [i] = b [ c[j] ] d) a[i] = a[i] + b[j] b) x = y d) x = a + b * c

You might also like