Chuong 4 - Dich Truc Tiep Cu Phap

You might also like

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 37

CHNG IV: DCH TRC TiP C PHP & SINH M TRUNG GIAN

1. nh ngha trc tip c php


nh ngha trc tip c php (syntax- directed definition) l s tng qut ha mt vn phm phi ng cnh, trong mi k hiu vn phm kt hp vi mt tp cc thuc tnh (attribute) Cc thuc tnh c th l mt xu, mt s, mt kiu d liu, mt a ch trong b nh... Gi tr cc thuc tnh c tnh bi cc lut ng ngha (semantic rule) i km. Mi lut ng ngha c vit nh li gi cc th tc hoc mt on chng trnh. Cy phn tch c php c trnh by gi tr cc thuc tnh ti mi nt gi l cy ch thch.

2.1. K php Ba lan

2. M hnh dch (Balan ngc)

Biu thc a + b: Dng trung t (Infix); + ab: Dng tin t (Prefix);

ab+ : Dng hu t (Postfix).


Tng qut: Gi s tp hu hn cc tn (bin, hng,); - Tp hu hn cc php ton.

a) IF biu thc E c dng a (a), THEN Prefix v Postfix ca a chnh l a.


b) IF E = E1 E2, trong THEN: +). Prefix ca E l E1E2, E1 v E2 l Prefix ca E1 v E2 tng ng. +). Postfix ca E l E1E2 vi Ei l Postfix ca Ei . c). IF biu thc E = (E), THEN Prefix v Postfix ca (E) l E.

V d:

E = (a+b)*c.

E1= (a+b); E2 = c; = * ; Do vy, ta c:


Prefix E l: * E1E2, vi E1= +ab; E2= c, nn * E1E2 = *+abc. Postfix E l: E1E2* = ab+c* v (E1 = ab+ v E2 = c).

2.2. Gii thut dch biu thc s hc thng thng sang biu thc dng Postfix
Vo: Infix Ra: Postfix. Phng php: Gn cho mi ton t c mt mt s nguyn khng m (), ch mc u tin, s ln hn c mc u tin cao hn. V d: P.ton Mc +, 0 *, /, 1 2 Dng 1 buffer v 1 Stack. a). Ban u: Stack rng; Buffer cha biu thc, dng con tr xc nh v tr cc k hiu hin xt trong biu thc, ban u tr vo k hiu tri nht. b). Nu k hiu c tr l tn bin, hng th xut ra gii ra. Ngc li(du php ton), th so snh mc u tin ca php ton ang xt 1 vi mc u tin ca php ton ang nm trn nh Stack 2 . Nu Mc (1 ) > Mc (2 ) hoc Stack ang rng th ghi 1 vo Stack ; Nu M (1 ) M(2 ) , th a 2 ra gii ra v a 1 vo Stack. c). Nu biu thc kt thc th c tt c php ton Stack v a ra gii ra. ( Stack: du tri nht nm nh Stack)

V d: Dch biu thc a+ b*c+3 ra dng hu t.

TT

Vo

Stack

Ra

1 2
3 4 5 6 7 8

a +
b * c + 3 Kt thc

a +
+ +, * +, * +, + +, + c * 3 ++ b

Biu thc thu c l:

abc*3++

2.3. i vi cc biu thc cha du ngoc v du m (Du mNEG)


PHP TON MC ( 0 +, - , ) 1 *, /, 2 NEG 3 4 Gii thut: a) Du ( c a vo Stack khng km theo mt hot ng no ca Stack. b) Du ) khng a vo Stack. Nu du ) xut hin li vo, th c t Stack v chuyn ra bng ra tt c cc du nm trong lng 2 du ( v ) cn li trong Stack. Khi hy c 2 du ( v ), ngha l du ( trn nh Stack s b hy khi u vo l ).

V d: Vit dng hu t ca biu thc: - a + b * c (d-e)/f

TT 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Vo NEG a + b * c ( d e ) / f Kt thc

Stack NEG NEG + + +* +* +* +*( +*( +*(+*(+* +*/ +*/

Ra a NEG b c

d e f /*+

Biu thc thu c: aNEGbcde- f/*+

2.4. i vi php gn
a du := vo tp Php ton vi mc 2 nhng khng c tnh cht so snh; Du := c a vo Stack khng km theo vic c bt k mt ci g; S c mt ca du := Stack cho n lc duyt xong.

V d: Dch ra dng hu t a := b + y/z.

TT 1 a 2 3 4 5 6 7 8 := b + y /

Vo := := := + := + := + / := + /

Stack

Ra

a
b y z /, +, :=

z Kt thc

Postfix s l: a b y z / + :=

Bi tp:

Dch cc biu thc sau y thnh dng hu t v cho bit ni dung ca Stack tng bc dch.
(a). x y/z * x+ p * q * t y z (b). 2 * p q * z *x/w + c * d (c). 7 * x 2 * y2 * z 14 * z 2 * x * y2 (d) . (a + b)/(- c - d)(k + l * m - n) 3

(e). (l + m)(np * q ) + r s/(- t - w)


(f). x := q * r s/(-p-t)

3. SINH M TRUNG GIAN


M trung gian l mt dng biu din trung gian ca chng trnh ngun, c cc c tnh: D to v d dch sang CT ch, thun li khi cn thay i ch. Xt 03 dng biu din chnh: 1.Cy c php (Syntax tree) 2.Biu din di dng hu t 3.M 3 a ch. x := y op z.

3.1. Cy c php
Cy c php (syntax - tree) l dng rt gn ca cy phn tch c php dng biu din cu trc ngn ng Trong cy c php cc ton t v t kha khng phi l nt l m l cc nt trong.

XY DNG CY C PHP CHO BIU THC Tng t nh vic dch mt biu thc thnh dng hu t Xy dng cy con cho biu thc con bng cch to ra mt nt cho mi ton hng v ton t

Mi mt nt c th ci t bng mt bn ghi c nhiu trng


Trong nt ton t, c mt trng ch ton t, 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 tng ng vi 3 loi nt:
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 1: Xy dng cy c php cho biu thc:


a - 4 + c c dng Balan ngc l: a 4 c + Ta dng mt dy cc li gi cc hm
(1): p1 := mkleaf(id, entrya)
(2): p2 := mkleaf(num,4) (3): p3 := mknode(-, p1, p2)

(4): p4 := mkleaf(id, entryc)


(5): p5 := mknode(+, p3, p4)

Cy c xy dng t di ln p1, p2,..., p5 l cc con tr, tr ti cc nt

entrya, entryc l cc con tr, tr ti mc vo ca a v c trong symbol table

Cy c php cho biu thc a - 4 + c

th c hng khng cha chu trnh cho biu thc (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.

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.

VD: Xy dng cy c php v DAG cho biu thc: a + a * (b - c) + (b - c) * d.

V d: 1. a:= b*-c+b*-c Postfix s l: a,b,c,NEG,*,b,c,NEG,*,+,:=

Assign a + *

a:= b*-c+b*-c

Xt biu thc a+a* (b-c) + (b-c) *d Postfix s l: aabc-*+bc-d*+. Xy dng DAG. (1). p1:= mkleaf (id, a); (7). p7 := mknode (+, p1, p6);

(2). p2 := mkleaf (id, a) ;


(3). p3:= mkleaf (id, b); (4). p4 := mkleaf (id, c);

(8). p8:= mkleaf (id, b);


(9). p9 := mkleaf (id, c); (10). p10 := mknode (-, p8, p9);

(5). p5 := mknode (-, p3, p4);


(6). p6 := mknode (*, p2, p5);

(11). p11 := mkleaf (id, d);


(12). p12 := mknode (*, p10, p11); (13). p13 := mknode (+, p7, p12);

Trc khi v cy c php, ta ch : p1 = p2 ; p3 = p8 ; p4 = p9 ; p5 = p10

3.2. Biu din di dng hu t


Giai on 1: Dch biu thc sang hu t

Giai on 2: Dch t hu t sang ngn ng k hiu (ta ch)


y l mt dng ca 3 a ch sau ny.

* Gi s Ngn ng ta ch tha nhn 2 loi lnh: Si := A v Si := Si op S i+1, trong A l tn bin hoc hng, cn op l php ton (C th cho php lnh Si := - Si). Th vic dch t dng Balan ngc sang Ngn ng ta ch thc cht l da trn vic sinh ra dy cc lnh c 2 dng trn.

* Chng ta k hiu Si , i = 0, 1, l v tr theo th t ca Stack.

* Qu trnh dch, s sng 1 Stack v tun th quy tc sau y. (a). t i = 0, k = 1. (k ch th t k hiu vo ca dng hu t). (b). c phn t th k (k) t dng Balan ngc. (c). Nu k l tn bin hoc hng, th t Si := k v i := i +1. Nu k l k hiu ton t v op NEG, th S i-2 := S i-2 op S i1 , i := i 1. Nu k = NEG, th S i-1 := - S i-1. (d). Nu k cha phi k hiu cui cng trong biu thc Balan, th k := k+1 v quay li (b).

V d 3: Biu thc -b*(a-b) (-c) b, NEG, a, b, -, c, NEG, ,* chng trnh ta ch nh sau:

Ta c

TT

Stack

Action i i := 0

Action k k := 1 k := k + 1 k := k + 1 0 1 1 2 3 2

i 1 2 3 4 5 6

1 2 3 4 5

S0 := b S0 := - S0 S1 := a S2 := b S1 := S1 S2

i := i + 1

i := i + 1 i := i + 1 i := i 1

k := k + 1 k := k + 1 k := k + 1

6
7 8

S2 := c
S2 := - S2 S1 := S1S2

i := i + 1
i := i 1

k := k + 1
k := k + 1 k := k + 1

3
3 2

7
8 9

S0 := S0 * S1

i := i 1

k := k + 1

10

Gi tr nh Stack bc cui cng l gi tr ton b biu thc.

Bi tp: Dch sang chng trnh ch (my) dng trung gian theo hu t. (1). a b c * + d e / f * (2). 1 x NEG y + 2 x 2 y 2 + 1 + / +

Bi tp: Dch sang chng trnh ch (my) dng trung gian theo hu t. (1). a, b, c, *, +, d, e, /, f, *, (2). 1, x, NEG, y, +, 2, , x, 2, , y, 2, , +, 1, +, /, + (3). Bng php dch sang Balan ngc, sau (nu c th c) to chng trnh ch dng trung gian phn tch cc xu sau y v ch r li, gii thch? +). a * (b +c(d + e ) f

+). a +/ b
+). (a + b) c

3.3. M 3 a ch
M 3 a ch (three address code) l cu lnh c dng tng qut: x := y op z Trong x, y, z l cc tn, hng hoc tn tm do trnh bin dch sinh ra; op l mt ton t no . Vy, mi cu lnh c ti a 3 i, ti a 1 ton t (tr := ). V th, khi to ra nhng lnh ny, trnh bin dch phi: Quyt nh th t thc hin cc thao tc

To ra 1 tn tm gi gi tr do lnh tnh ra
Thut ng: 3 a ch l: 2 cho ton hng; 1 cho kt qu.

Biu thc NN ngun c dng: x + y * z , ta c th dch thnh: t1 := y * z; t2 := x + t1. Vic tho nh cc biu thc s hc phc tp v cc cu lnh iu khin lm cho m 3 a ch tr thnh 1 Ngn ng thit yu i vi vic dch thnh m ch. M 3 a ch l mt biu din tuyn tnh ha ca cy c php v DAG, trong cc tn tng minh ng vi cc nt trong.

i vi hnh di y (v d 1), ta c: t1 := -c; t2 := b*t1; t3 := -c; t4 := b*t3; t5 := t2+t4; a := t5.


a Assign
+

*
b c
Trong trng hp i vi DAG (v d 1), ta c: t1 := -c; t2 := b*t1; t5 := t2+t2; a := t5.
-

Cc loi cu lnh 3 a ch thng dng (ging m hp ng).


Cc cu lnh gn c dng: x := y op z Trong op l php ton 2 ngi (s hc hoc lgic).

Cc ch th gn dng:
Cc cu lnh sao chp: c gn cho x.

x := op y
x := y Trong gi tr ca y

Trong op l php ton 1 ngi (Ph nh lgic, x dch,..)

Lnh nhy khng iu kin: Goto L, trong cu lnh 3 a ch c nhn L l cu lnh c thc thi tip theo.

..
..

Ch :

a). Ti tng thi im, tn tm chnh l con tr, tr ti bng k hiu tn .


b). Khi pht sinh m 3 a ch, cc tn tm c to ra cho cc nt trong ca cy c php (u tin kt qu tnh c s lu vo bin tm sau thc hin lnh gn).

Dng li cc tn tm: Trnh bin dch sinh ra tn tm mi khi cn dng n. Tuy nhin, cc tn tm c dng gi cc gi tr trung gian trong cc tnh ton biu thc thng hay lm ri bng k hiu. khc phc, ngi ta thng gom cc tn tm ring bit vo cng mt vng nh trong khi sinh m, mng nh ging nh mt Stack. minh ha, chng ta hn ch ch x l cc s nguyn. Dng mt con m c, bt u bng 0. Mi khi cn dng 1 tn tm lm ton hng, gim c i 1. Mi khi sinh ra mt tn tm, tng c ln 1. Lu v ti gi tr cc tn tm do trnh bin dch thc hin dng nh ch xy ra nh Stack.

Xt cu lnh gn x := a*b+c*d-e*f ; Postfix l: xab*cd*+ef*-:= c 0 t0 := a*b t1 := c*d t0 := t0+t1 t1 := e*f t0 := t0-t1 1 2 1 2 1

x := t0

Ch rng: Khi tnh t0-t1, c gim xung 0, v th t0 li sn sng cha kt qu.

Bi tp:

(1). Dch biu thc s hc a *- (b+c) thnh dng: Cy c php, Hu t.


(2). Dch cc biu thc s hc (a+b-c)*(c-a) v (a+b)*(c+d)+(a+b+c) thnh m 3 a ch.

Dch biu thc s hc (a+b-c)*(c-a) thnh m 3 a ch.


Biu thc hu t: ab+c-ca-*
p1= mkleaf(id,entry a) p2= mkleaf(id,entry b) p3=mknode(+,p1,p2) p4= mkleaf(id,entry c) p5=mknode(-p3,p4) p6=p4 p7=p1 p8=mknode(-,p6,p7) p9=mknode(*,p5,p8)

You might also like