You are on page 1of 359

MON HOC

TRNH BIEN DCH


CHNG I
Gii thiu v trnh bien dch
CHNG 2
Trnh bien dch n gin
CHNG 3
Phan tch t vng
CHNG 4
Phan tch cu phap
CHNG 5
Trnh bien dch trc tip cu
phap
CHNG 6
X l ng ngha
CHNG 7
Qun l b nh trong thi
gian thc thi
CHNG 8
T chc bng danh biu
CHNG 9
Sinh ma oi tng
CHNG 10
Toi u ma
MUC LUC
TAI LIEU THAM KHAO
1) Alfred V.Aho, Jeffrey D.Ullman (1986). Compilers, Principles techniques, and
tools. Addison Wesley Publishing Company.
2) Alfred V.Aho, Jeffrey D.Ullman (1972). The theory of parsing, translation and
compiling. Prentice Hall, inc.
3) Terrence W. Pratt. Programming Languages: design and implementation second
edition. Prebtice Hall International editions.
4)Allen I. Holub. Compiler design in C. Prentice Hall International editions.
5) D. Gries (1976). Compiler construction. Springger Verlag.
6) Jeffrey D. Ullman (1977). Fundamental concepts of programming system. Addion -
Wesley Publsihing Company.
7) Dng Tuan Anh (1986) Giao trnh Trnh bien dch. ai hoc Bach Khoa TP. Ho
Ch Minh.
8) Nicklaus Wirth (1976), Algorithms + Data Structure = program. Prentice Hall
International editions.
9) Alfred V.Aho, Jeffrey D. Ullman (1977). Principles of compiler design. Addison
Wesley, Reading, Mass.
10) Le Hong Sn, Luan van tot nghiep Xay dng giai thuat toi u ma trung gian cua
trnh bien dch Khoa CNTT Trng H Bach khoa 2002.
11) Phan Th Ti (2001). Trnh Bien Dch. ai hoc Bach Khoa TP. Ho Ch Minh
YEU CAU
Phan Ly thuyet:
SV hoc 42 tiet ly thuyet
Phan Thc hanh:
SV tham d thc hanh thc hien Bai tap Mon hoc 14t
(1 Bai tap Mon hoc / 1 SV)
Hnh thc anh gia:
Kiemtra Bai tap Mon hoc iemTH
Thi viet Ly thuyet cuoi ky iemLT
Cach tnh iem:
iem tong ket mon = LT * 60% + BTTH * 40%
CHNG 1
GII THIEU VE TRNH BIEN DCH
1.1. Ngon ng lap trnh
1. Gii thieu
Phan loai
Chng trnh dch
- Trnh bien dch
D lieu
Chng
trnh nguon
Trnh
bien dch
Chng
trnh ch
May tnh
thc thi
Ket qua
Hnh 1.1. Chng trnh thc thi theo c che dch cua trnh bien dch
- Trnh thong dch
ac ta ngon ng lap trnh
1. Tap cac ky hieu can dung trong cac chng trnh hp le
2. Tap cac chng trnh hp le
3. Ngha cua chng trnh hp le
- Phng phap th nhat la nh ngha bang phep anh xa. S
dung phep toan ham: ham Lamda.
- Phng phap th hai: May tru tng.
- Phng phap th ba: Tap (x,y) la s bien dch.
Chng trnh
nguon
Trnh thong
dch
Ket qua
D lieu
Hnh 1.2. Chng trnh thc thi theo c che dch cua trnh thong dch
2. Cu phap va ng ngha
- Anh xa cu phap (syntactic mapping)
Hnh 1.3 Cau truc cay cua cau tieng Anh: the pig is in the pen
<sentence>
<noun phrase>
<adjective> <noun>
the pig
<verb phrase>
<verb> <phrase>
is
<adjective>
the pen
<preposition>
<noun phrase>
<noun>
- Anh xa cu phap
<expression> <expression>
<expression>
<term>
<factor>
<indentifier>
a
+
<term>
<factor>
<indentifier>
<term>

<indentifier>
c
b
<factor>
Hnh 1.4. Cay cu phap cua bieu thc so hoc a + b * c
1.2. Trnh bien dch
1. Cac thanh phan cua trnh bien dch
1. Phan tch t vng
Nhan dang token.
Token: danh bieu, hang, t khoa, cac toan t phep toan, cac ky
hieu phan cach, khoang trang, cac ky hieu ac biet
V du:
COST := ( PRICE + TAX )*65
au ra cua bo phan tch t vng:
(<id,1>) := ( (<id,2>) + (<id,3>) ) * (<num>,4)
Viet gon : id1 := (id2 + id3) * num4
Bo phan tch t vng thao tac trc tiep
Bo phan tch t vng thao tac khong trc tiep
2. Bang danh bieu
V du: COST := (PRICE + TAX) * 65
Bang 1.1 Bang danh bieu
Ch so token lexeme Cac thong tin khac
1 id COST bien thc
2 id PRICE bien thc
3 id TAX bien thc
4 num 65 hang so nguyen
3. Phat hien va thong bao loi
4. Phan tch cu phap
V du: COST := (PRICE + TAX) * 65
Ket qua phan tch t vng:
id1 := ( id2 + id3 )* num4
Ket qua phan tch cu phap:
Hnh 1.6. Cay cu phap cua phat bieu
5. Phan tch ng ngha
Hnh 1.7. Cay cu phap co x ly ng ngha
id
1
:=
n
2
n
1
id
2
num
4
*
id
3
+
n
3
id
1 :=
n
2
n
2
id
2
intoreal (65)
*
id
3
65.0 +
PRICE TAX
n
3
6. Sinh ma trung gian
temp
1
:= intoreal (65)
temp
2
:= id
2
+ id
3
temp3 := temp
2
* temp
1
id
1
:= temp
3
7. Toi u ma trung gian
temp
1
:= id
2
+ id
3
id
1
:= temp
1
+ 65.0
8. Sinh ma oi tng
movF id
2
, R
1
movF id
3
, R
2
addF R
2
, R
1
multF # 65.0, R
1
movF R
1
, id
1
Bo phan tch t vng
Bo phan tch cu phap
Bo phan tch ng ngha
id := (id
2
+ id
3
) * num
4
COST := (PRICE + TAX) * 65
n
1
id
1
n
2
:=
n
3
num
4
*
id
2
+
id
3
n
1
id
1
n
2
:=
n
3
id
2
+ id
3
intoreal (65)
*
Bo sinh ma trung gian
Bo toi u trung gian
Bo sinh ma oi tng
temp
1
:= intoreal (65)
temp
2
:= id
3
+ id
3
temp
3
:= temp
2
* temp
1
id
1
:= temp
3
temp
1
:= id
2
+ id
3
id
1
:= temp
1
* 65.0
movF id
2
, R
1
movF id
3
, R
2
ADDF R
2
. R
1
mulF # 65.0, R
1
movF R
1
,id
1
Hnh 1.8. Bien dch phat bieu
1.3. Cac moi lien quan vi trnh bien dch
1. Bo tien x ly
- X ly macro (macro processing)
- Chem tap tin (file inclusion)
- Bo x ly hoa hp (rational processor)
- M rong ngon ng (language extension)
Th du ve x ly macro:
- He thong may anh ch typesetting:
\define <macro name><template> {<body>}
Th du macro nh ngha ve s trch dan cua tap ch ACM:
\define\JACM # 1; #2; #3
{{\S1J.ACM}{\bf #1}: #2, pp.#3}
Khi dung macro:
\JACM 17; 4; 715-728
Se c hieu nh sau:
J.ACM 17 : 4 , pp. 715-728
2. Trnh bien dch hp ng
Phat bieu gan b := a + 2 c dch ra ma hp ng
MOV a, R
1
ADD #2 , R
1
MOV R
1
, b
3. Trnh bien dch hp ng hai chuyen
- Chuyen th nhat: oc ma hp ng va tao bang danh bieu
Danh bieu ia ch tng oi
a 0
b 4
- Chuyen th hai: oc ma hp ng va dch sang ma may kha nh
v a ch:
MOV a, R
1
0001 010000000000*
ADD #2, R
1
0010 0110 00000010 (1.6)
MOV R
1
, b 0100 010000000100*
4. Bo cat lien ket soan thao
Loader la chng trnh thc hien hai nhiem vu: cat va soan thao
lien ket. Qua trnh cat bao gom lay ma may kha nh v tnh lai
thanh a ch tuyet oi.
Nh v du phan 3: Gia s ma may c cat trong bo nh trong tai
a ch L = 00001111; a ch tuyet oi cua a, b la 00001111 va
00010011. Ba ch th (1.6) c viet lai di dang ma may tuyet
oi:
0001010000001111
0011011000000010 (1.7)
0010010000010011
Link-editor cho phep tao mot chng trnh duy nhat t nhieu tap
tin dang ma may kha nh v cua nhng lan bien dch rieng biet
va t cac tap tin th vien do he thong cung cap.
Chng trnh nguon viet tat
Bo tien x ly
Trnh bien dch
Trnh bien dch hp ng
Bo cat/ lien ket soan thao
Chng trnh nguon
Chng trnh oi tng trong ma hp ng
Chng trnh trong ma may kha nh v
Chng trnh ma may a ch tuyet oi
Hnh 1.19. He thong x ly ngon ng
Th vien he thong,
cac tap tin oi tng
kha nh v a ch
1.4. Nhom cac giai oan cua trnh bien dch
- Giai oan trc va giai oan sau (front end and back end)
- Cac chuyen
- Thu giam so lng cac chuyen
Th du: goto L
:
goto L
:
L : a = b + c

CHNG 2
TRNH BIEN DCH N GIAN
2.1. Tong quat
2.2. nh ngha cu phap
Van pham phi ng canh (PNC) c nh ngha:
G2 = (V
t
, V
n
, S, P)
P : A
1
|
2
||
n
Th du 2.1. Cho van pham G:
P: list list + digit
| list digit
| digit
digit 0 |1| 2 | |9
Bo phan tch
t vng
Bo bien dch trc
tiep cu phap
Chuoi token Chuoi ky t Ma trung gian
Hnh 2.1. Cau truc trnh bien dch front end
Th du 2.2. Van pham mieu ta phat bieu hon hp begin end cua Pascal
P : block begin opt_stmts end
opt_stmts stmt_list |
stmt_list stmt_list ; stmt | stmt
- Cay phan tch
S khong tng minh
Th du 2.3. Van pham G sau ay la khong tng minh:
P : string string + string | string string | 0 | 1 | ... |9
Cau 9 5 + 2 cho hai cay phan tch:
string string
string
string
string
string
Hnh 2.2 Hai cay phan tch cua cau 9 5 + 2
+
9 5
string
string
-
5
string
string
2
-
a)
2 +
9
b)
S ket hp cua cac toan t
Mc u tien cua cac toan t: * va / co mc u tien hn + , - . Da vao
nguyen tac tren chung ta xay dng cu phap cho bieu thc so hoc:
exp exp + term | exp term | term
term term * factor | term / factor | factor
factor digit | ( exp )
Lu y: phep toan luy tha va phep gan trong C la phep toan ket hp
phai. Van pham cho phep gan nh sau:
right letter = right | letter
letter a | b | | z
2.3. S bien dch trc tiep cu phap (Syntax-Directed Translation)
1. Ky hieu hau to
1) Neu E la bien hoac hang so th ky hieu hau to cua E chnh la E.
2) Neu E la bieu thc co dang E
1
op E
2
vi op la toan t hai ngoi th
ky hieu hau to cua E la E
1
E
2
op.
3) Neu E la bieu thc co dang (E
1
) th ky hieu hau to cua E
1
cung la
ky hieu hau to cua E.
Lu y: Khong can co dau ong, m ngoac trong ky hieu hau to.
2. nh nghia trc tiep cu phap (Syntax-directed definition)
Van pham phi ng canh va tap luat ng nghia se thiet lap nh ngha
trc tiep cu phap. Bien dch la phep anh xa t nhap xuat. Dang
xuat cua chuoi nhap x c xac nh nh sau:
1. Xay dng cay phan tch cho chuoi x.
2. Gia s nut n cua cay phan tch co ten cu phap X, X.a la tr thuoc
tnh a cua X, c tnh nh luat ng ngha. Cay phan tch co chu thch
cac tr thuoc tnh moi nut c goi la cay phan tch chu thch
Tong hp thuoc tnh (synthesized attributes)
Th du 2.4. Cho van pham G co tap luat sinh P:
Tap luat sinh Tap luat ng ngha
exp exp + term exp.t ::= exp.t || term.t || +
exp exp term exp.t ::= exp.t || term.t || -
exp term exp.t ::= term.t
term 0 term.t ::= 0

term 9 term.t ::= 9
exp.t ::= 95 2 +
exp.t ::= 95 exp.t ::= 95
exp.t ::= 9
termt ::= 9
termt.t ::= 5
termt ::= 2
9 -
5 +
2
Hnh 2.3. Cay phan tch chu thch cho nh ngha trc tiep cu phap
Lc o dch
Lc o dch la van pham PNC, trong o cac oan chng trnh goi la
hanh vi ng nghia c nhung vao ve phai cua luat sinh.
Th du 2.5. Lc o dch cua van pham G:
Tap luat sinh Tap luat ng ngha
exp exp + term exp exp + term { print (+)}
exp exp term exp exp term {print (-)}
exp term exp term
term 0 term 0 {print (0)}
.
term 9 term 9 {print {9)}
exp
exp
term
term
exp
-
5
+
{print (-)}
term
{print (5)}
{print (+)}
2
{print (2)}
9 {print (9)}
Hnh 2.4. Lc o dch cua cau 9 5 + 2
Mo phong 2.1. Giai thuat depth- first traversals cua cay phan tch
Procedure visit (n: node);
begin
for vi moi con m cua n, t trai sang phai do
visit (m);
tnh tr ng nghia tai nut n
end;
2.4. Phan tch cu phap
1. Phan tch cu phap t tren xuong
Th du 2.6. Cho van pham G:
type simple id array [ simple] of type
simple integer char num dotdot num
Hay xay dng cay phan tch cho cau:
array [num dotdot num] of integer
type a)
type
b)
array [simple] of type
type c)
array [simple] of type
type
num dotdot num
array
[simple] of
num dotdot num
Hnh 2.6.Cac
bc xay dng
cay phan tch
theo phng
phap t tren
xuong cho cau:
array
[numdotdot
num] of integer
d)
type
simple
type
e)
array [simple] of
num dotdot num
type
simple
integer
2. S phan tch cu phap oan nhan trc
Dang ac biet cua phan tch cu phap t tren xuong la phng phap
oan nhan trc. Phng phap nay se nhn trc mot ky hieu nhap e
quyet nh chon thu tuc cho ky hieu khong ket thuc tng ng.
Th du 2.8. Cho van pham G: P: S xA A z | yA
Dung van pham G e phan tch cau nhap xyyz
Bang 2.1. Cac bc phan tch cu phap cua cau xyyz
Luat ap dung Chuoi nhap
S
xA
yA
A
yA
A
z
-
xyyz
xyyz
yyz
yz
yz
z
z
-
Th du 2.9. Cho van pham vi cac luat sinh nh sau :
S A | B A xA | y B xB | z
Bang 2.2. Phan tch cu phap cho cau xxxz khong thanh cong
Luat ap dung Chuoi nhap
S
A
xA
A
xA
A
xA
A
xxxz
xxxz
xxxz
xxz
xxz
xz
xz
z
- ieu kien 1 : A
1
|
2
| ... |
n
- nh ngha:
first (
i
) = {s | s la ky hieu ket thuc va s}
ieu kien 1 c phat bieu nh sau :
A
1
|
2
| ... |
n
first (
i
) first (
j
) = vi i j
Lu y: 1. first (a ) = {a}
2. Neu A
1
|
2
| |
n
; th
first (A) = first (
1
) first (
2
) ... first (
n
)
Th du 2.11. Cho van pham G co tap luat sinh:
S Ax A x | vi la chuoi rong
Bang 2.3. Phan tch cau nhap : x
Luat Chuoi nhap
A
xx
x
x
x
-
S phan tch that bai
- ieu kien 2: first (A) follow (A) =
Vi A
1
|
2
| |
n
|
Follow (A) c tnh nh sau: Vi moi luat sinh P
i
co dang
X A th follow (A) la first ( ).
th du 2.11 first (A) follow (A) = {x}
Lu y van pham co e quy trai se vi pham ieu kien 1. Th du:
A B | AB (2.1)
Vay first (A) = first (B) ; first (AB) = first (A) = first (B).
first (B) first (AB) vi pham ieu kien 1.
Neu sa luat (2.1) thanh A | AB th se vi pham ieu kien 2.
Th du 2.12. Cho van pham nh th du 2.6, chung ta dung phng
phap phan tch oan nhan trc e phan tch cau array[num dot dot
num] of integer (t xem trang 41).
Cac thu tuc c goi khi sinh cay phan tch cho cac cau thuoc van
pham th du 2.12.
2.5. Trnh bien dch cho bieu thc n gian
Th du: exp exp + term {print (+)} (2.5)
exp exp term {print (-)}
exp term
term 0 {print (0}
.
term 9 {print (9}
Loai bo e quy trai:
exp term rest
exp.t ::= term.t || rest.t
rest + exp
rest.t ::= exp.t || +
rest - exp
rest.t ::= exp.t || -
rest
term 0
term.t ::= 0
rest
term 0
term.t ::= 0
term 9
term.t ::= 9
Van pham nay khong phu hp cho bien dch trc tiep cu phap.
Lc o dch:
exp exp + term {print (+)}
exp exp term {print (-)}
exp term
term 0 {print (0)}
..
term 9 {print (9)}
Loai bo e quy trai cho lc o dch:
exp term rest
rest + term {print (+)} | - term {print (-)} |
term 0 {print (0) }
.
term 9 {print (9)}
Cay phan tch chu thch cho cau: 9-5 = 2 tr.44
Chng trnh bien dch bieu thc t dang trung to sang dang hau to:
procedure exp;
procedure match ( t : token );
begin if lookahead = t then
lookahead := nexttoken
else error
end;
procedure term ;
begin
if lookahead = num then begin
write ( num);
match (lookahead);
end
else error
end;
procedure rest;
begin
if lookahead = + then begin
match (+); term;
write (+);
end
else if lookahead = - then
begin
match (-); term; write(-);
end;
end;
begin
term; rest;
end;
Toi u trinh bien dich:
e tang toc do bien dch ta thc hien g e quy cua thu tuc rest:
procedure exp;
procedure term;
begin
:
end;
begin
term;
repeat
if lookahead = + then
begin
match (+); term; write(+);
end
else if lookahead = - then
begin
match(-); term; write(-)
end;
until (lookahead < > +) and (lookahead < > -);
end;
Hoan chnh chng trnh:
Chng trnh nay bao gom ca chng trnh oc chuoi nhap.
procedure exp;
procedure match (t : char);
begin
if lookahead = t then lookahead := readln (c);
else error
end;
procedure term;
begin
val (i,lookahead,e);
if e = 0 then begin
write (i);
match (lookahead );
end
else error;
end;{term}
begin
term;
repeat
if lookahead = + then
begin
match (+); term; write(+);
end
else if lookahead = - then
begin
match (-); term; write(-);
end;
until (lookahead < > + ) and (lookahead < > -);
end; {exp }
begin
readln( c);
lookahead := c;
exp;
end;
2.6. S phan tch t vng
1. Loai bo khoang trang va chu thch
2. Nhan biet cac hang
3. Nhan biet danh bieu va t khoa
Giao tiep vi bo phan tch t vng
Hnh 2.10. Nhan dang token cua bo phan tch t vng
i f a b > = 0 .. t > = 0 t .. > = 0 t h ..
ab>
if ab>
2.7. S hnh thanh bang danh bieu
1. Giao tiep vi bang danh bieu
Hai thao tac vi bang danh bieu: insert (s,t) va lookup (s).
2. Lu gi t khoa
3. Hien thc bang danh bieu
Bang danh bieu gom co bang symtable va day lexemes.
Bang symtable
lexptr token cac thuoc tnh khac
0
1 1 div
2 5 mod
3 9 id
4 15 id
Day lexemes
Hnh 2.11. Bang danh bieu
Mo phong 2.2. Giai thuat phan tch t vng
d i v EOS m o d EOS c o u n t EOS i EOS
Procedure lexan;
var lexbuf array [0..100] of char;
c : char; ngng : boolean;
begin
repeat
read (c ); ngng := true;
if (c = blank ) or (c = tab) then ngng := false
else if c = newline then begin line := lineno + 1
ngng := false;
end
else if c la ch so then
begin
val (i, c, e);
tokenval := 0;
while e = 0 do begin
tokenval := tokenval * 10 + i;
read (c);
val (i, c, e);
end;
typetoken := num;
end {la so}
else if c la ch then begin
p := 0; b := 0;
while c la ch hoac so do
begin lexbuf [b] := c;
read (c);
b := b + 1;
if b => b_size then error
end; /* b size la kch thc toi a cua lexbuf*/
lexbuf [b] := eos;
p := lookup (lexbuf);
if p = 0 then
p = insert (lexbuf, ID);
tokenval := p;
typetoken := symtable [p]. token; end
else if c = eof then begin
tokenval := none;
typetoken := done; {het chng trnh nguon}
end
else begin
tokenval := none; typetoken := c;
end
until ngng;
end;
2.8. May tru tng kieu chong
t
t
t
pc
Hnh 2.12. May tru tng kieu chong vi viec thc thi bieu thc
(5 + 11) * 7
Vung ch th Chong Vung d lieu
1 push 5 5 + 0 1
2 rvalue 2 11 11 2
3 + a) 7 3
4 rvalue 3 4
5 16
6 .. 7
b)
112
c)
1. Ch th so hoc
2. Lvalue va Rvalue
Th du: i := i + 1
3. Thao tac vi chong
Cac ch th: Lvalue, Rvalue, push v, pop, copy, :=
4. Bien dch cho bieu thc
Th du: Bien dch phat bieu gan:
day := (53*y) div 4 + (273 * m + 2) div 5 + d
chuyen sang ky hieu hau to
day 53y * 4 div 273 m * 2 + 5 div + d + :=
dch sang ma may tru tng
5. Ch th ieu khien trnh t
Cac ch th bao gom: label l, goto l, gotofalse l, gototrue l, halt.
6. S bien dch cac phat bieu
Th du: Phat bieu if:
stmtif exp then stmt
out := newlabel
stmt.t ::= exp.t || gotofalse out || stmt.t || label out
ng ngha
vung ch th
oan ma cho exp
gotofalse out
oan ma cho stmt
label out
oan ma cua phat bieu sau phat bieu if
Hnh 2.13. Ma may tru tng cua phat bieu if
7. Giai thuat cua trnh bien dch cac phat bieu
procedure stmt;
var out : integer;
begin
if lookahead = id then
begin emit (lvalue, tokenval);
match (id); match ( := ); exp; emit (:=, tokenval)
end
else if lookahead = if then
begin match (if); exp;
out := newlabel;
emit (gotofalse, out);
match (then); stmt;
emit (label,out)
end
else error
end;
2.9. Thiet ke trnh bien dch n gian
1. ac ta trnh bien dch
start list eof
list exp ; list |
exp exp + term {print (+)}
lexp term {print (-)}
| term
term term * factor {print (*)}
| term / factor {print(/)}
| term div factor {print (div)}
| term mod factor {print (mod)}
| factor
factor (exp) | id | num
init scanner
symbol parser error
emit
Bieu thc dang trung to
Bieu thc dang hau to
Hnh 2.14. S o cua trnh bien dch cho bieu thc t dang trung to
sang dang hau to
2. Nhiem vu cua cac chng trnh con cua trnh bien dch
scanner: phan tch t vung; parser: phan tch cu phap; emit: tao dang
xuat cua token; symbol: xay dng bang danh bieu va thao tac vi
bang danh bieu bang insert va lookup; init: cat cac t khoa vao bang
danh bieu; error: thong bao loi.
Mo phong 2.3. Lc o dch trc tiep cu phap cua G sau khi c bo
e quy trai: start list eof
list exp ; list |
exp term Rest
1
Rest
1
+ term {print (+)} Rest
1
|
| - term {print (--)} |
term factor Rest
2
Rest
2
* factor {print (*)} Rest
2
l/ factor {print (/)} Rest
2
| div factor {print (div)} Rest
2
|
| mod factor {print (mod)} Rest
2
|
factor (exp)
| id {print (id.lexeme)}
| num {print(num.value)}
3. Giai thuat cua trnh bien dch
const bsize = 128; |para = 40;
none = #; plus = 43;
num = 256; minus = 45;
div = 257; star = 42;
mod = 258; slash = 47;
id = 259;
done = 260;
strmax = 999;
symax = 100;
type entry = record
lexptr : integer;
token : integer;
end;
str = string;
var tokenval : integer;
lineno : integer;
lookahead : char;
symtable : array [1..100] of entry;
lexbuf : string [bsize];
typetoken : integer;
lexemes: array[1..strmax] of char;
lastentry : integer;
lastchar : integer;
procedure scanner;
var t: char;
p, b, i: integer;
begin
read (t);
if (t = ) or (t = \t) then
repeat read (t);
until (t < > ) and (t < > \t);
else if t = \t then begin
lineno := lineno + 1;
read ( t );
end
else if t in [0..9] then begin
val ( i,t,e);
tokenval := 0;
while e = 0 do begin
tokenval := tokenval *10 + I;
read (t);
val (i,t,e);
end;
typetoken := num;
end
else if t in [ A..Z,a..z] then
begin
p:= 0; b := 0;
while t in [0..9,A..Z,a..z] do
begin lexbuf [b] := t;
read (t);
b := b + 1;
if (b > = bsize) then
error
end;
lexbuf [b] := eos;
p := lookup (lexbuf);
if p = 0 then p := insert ( lexbuf, id);
tokenval := p;
typetoken := symtable[p].token;
end
else if t = eof then typetoken := done
else begin
typetoken := ord (t);
read (t)
end;
tokenval := none;
end;
end; {scanner}
/*-----------------------*/
procedure parser;
procedure exp;
var t : integer;
procedure term;
var t : integer;
procedure factor;
begin
case lookahead of
|para : begin match ( lpara); exp;
match(rpara); end;
num : begin emit (num, tokenval); match (num)
end;
id : begin emit (id, tokenval );
match (id) end;
else error ( loi cu phap, lineno);
end; {case}
end; {factor}
/*-----------------------------*/
begin {term}
factor;
while lookahead in [star, slash, div, mod] do
begin
t := lookahead;
match (lookahead);
factor; emit (t, none);
end;
end; {term}
begin {exp}
term;
while (lookahead = plus) or (lookahead = minus) do
begin
t := lookahead ; match (lookahead);
term; emit (t, none);
end; end;
begin {parser}
scanner; lookahead := typetoken;
while lookahead < > done do
begin exp; match (semicolon); end;
end; {parser}
/*-----------------------*/
procedure match (t : integer);
begin
if lookahead = t then begin
scanner;
lookahead := typetoken ; end
else error ( loi cu phap, lineno);
end;
procedure emit (t : integer; tval : integer);
begin
case t of
plus, minus, star, slash : writeln (chr (t ));
div : writeln (div);
mod : writeln (mod);
num : writeln (tval);
id : wrteln (symtable[tval].lexptr^);
else writeln (chr (t). tval);
end;
end; {emit}
fuction strcmp (cp : integer; s: str) : integer;
var i, l : integer;
begin i := t; l := length (s);
while ( I < = l ) and (s[i] = lexemes [cp] do
begin
i := i + 1;
cp := cp + 1;
end;
if i > l then strcmp := 1
else strcmp := 0
end; {strcmp}
procedure strcopy (cp : integer; t : str);
var i : integer;
begin
for i := 1 to length (t) do
begin
lexemes [cp] := t [i]
cp := cp + 1;
end;
lexemes [cp] := eos;
end; {Strcopy}
function lookup (s : string) : integer;
var I, p: integer;
begin p := lastentry;
while (p > 0) and (Strcmp (symtable [p].lexptr ^ , s) = 0) do
p := p 1;
lookup := p;
end; {lookup}
/*------------------- */
function insert (s : str; typetoken : integer) : integer;
var len: integer;
begin
len := length (s );
if (lastentry + 1 > = symax ) then error (bang danh
bieu ay, lineno);
if (lastchar + len + 1 > = strmax ) then
error (day lexemes ay, lineno);
lastentry := lastentry + 1;
symtable [ lastentry].token := typyetoken;
symtable [latsentry].lexptr := @lexemes[lastchar + 1];
lastchar := lastchar + len + 1;
strcopy (symtable [latsentry].lexptr ^, s)
insert := lastentry;
end; {insert}
/*------------------*/
procedure init;
var keyword : array[1.3] of
record
lexeme : string [10]
token : integer;
end;
r, i : integer;
begin keyword [i].lexeme := div;
keyword [1].token := div;
keyword [2].lexeme:= mod;
keyword [2].token := mod;
keyword [3].lexeme := 0;
keyword [3].token := 0;
r := 3;
for i := 1 to r do
p := insert (keyword [i].lexem, keyword [i].token);
end;
/*----------------*/
procedure error (m : str; lineno : integer);
begin writeln (m, lineno);
stop;
end;
/*----------------*/
begin {main}
lastentry := 0; lineno := 0; tokenval := -1;
lastchar := 0;
init;
parser;
end; {main}
CHNG 3
PHAN TCH T VNG
3.1. Vai tro cua bo phan tch t vng
1. Token, mau, tr t vng
Bang 3.1 Bang danh bieu cua token
Token Tr t vng Y ngha cua mau
const
if
then
ralation
num
id
literal
const
if
then
< , < =, < >, = , > =
3.14, 2.5, 7.6
abc, ou, bc1
abcef
const
if
then
cac toan t quan he
hang so bat ky
chuoi gom ky t ch va so,
bat au la ky t ch
la chuoi ky t bat ky nam
gia 2 dau
Hnh 3.1. S giao tiep gia bo phan tch t vng va bo phan tch
cu phap
3.2. CAC TNH CHAT CUA TOKEN
3.3. CHA TAM CHNG TRNH NGUON
1. Cap bo em
Cau tao
Bo phan tch
t vng
Bang danh bieu
Bo phan
tch CP
Chng trnh
nguon
token
yeu cau token
A : = B * . - 2 eof
p1 p2
Hnh 3.2. Cap bo em
Quy trnh hoat ong
Giai thuat:
if p2 ranh gii mot na bo em then
begin lap ay N ky hieu nhap mi vao na ben phai
p2 := p2 + 1;
end
else if p2 tan cung ben phai bo em then
begin lap ay N ky hieu nhap vao na ben trai bo em
chuyen
p2 ve ky t tan cung ben trai cua bo em end
else p2 := p2 + 1;
2. Phng phap cam canh
A : = B * X
EOF
- 2
EOF EOF
N ky t
N ky t
p1 p2
Hnh 3.3. Cap bo em theo phng phap cam canh
Giai thuat:
p2 := p2 + 1;
if p2 ^ eof then
if p2 ranh gii mot na bo em then
begin
chat ay N ky hieu nhap vao na ben phai bo em;
p2 := p2 + 1
end
else if p2 tan cung ben phai bo em then
begin
lap ay N ky hieu vao n ben trai bo em; chuyen p2
ve au bo em
end
else /* dng s phan tch t vng */
3.4. ac ta token
Cac quy tac nh nghia bieu thc chnh quy
1. la bieu thc chnh quy, bieu th cho tap {}
2. a la ky hieu thuoc , bieu th cho tap {a}
3. r va s la hai bieu thc chnh quy, bieu th cho L (r) va L (s) th:
a) (r) | (s) la bieu thc chnh quy, bieu th cho L(r) L(s).
b) (r) (s) la bieu thc chnh quy, bieu th cho L(r) L(s).
c) (r)* la bieu thc chnh quy, bieu th cho (L(r))*.
d) r la bieu thc chnh quy, bieu th cho L(r).
Th du 3.1. Cho = {a, b}
1. a|b
2. (a| b) | (b| a)
3. a*
Hai bieu thc chnh quy tng ng r va s, ky hieu r = s.
2. nh ngha chnh quy
Neu la tap ky hieu can ban, th nh nghia chnh quy la chuoi nh
nghia co dang: d
1
r
1

d
n
r
n
Th du 3.2. letter A | B | |Z | a| b || z
digit 0 |1| | 9
id letter ( letter | digit)*
Th du 3.3. digit 0 | 1 | | 9
digits digit digit*
optional_fraction .digits |
optional_exponent (E (+| - |) digits) |
3.5. Nhan dang token
Th du 3.4. Cho van pham G:
stmt if exp then stmt
| if exp then stmt else stmt
|
exp term relop term | term
term id | num
nh ngha chnh quy
if if then then else else
relop < | <= | > | >= | <> | =
id letter (letter | digit)*
num digit+ (.digit+ | ) ( E ( + | - | ) digit+ | )
delim blank | tab | newline
ws delim
+
T nh ngha chnh quy ta xay dng bang mau cho token nh bang
3.3 trang 74.
3.6. S o dch
1. Mieu ta
0
7
8
Bat au
>
=
other
2
3
Start < =
return (relop, LE)
6 7
8
>
return (relop, NE)
4 return (relop, LT)
5
=
return (relop, EQ)
>
other
6
Hnh 3.4. S o dch cho >=
va =
0 1
=
other
(relop, EQ)
return (relop, EQ)
*
*
*
Hnh 3.5. S o dch nhan dang token relop
Lu y:
- Phan khai bao bao gom khai bao hang, bien bieu th va cac nh
ngha chnh quy.
- Phan quy tac bien dch la cac phat bieu co dang:
p
1
{hanh vi ng ngha 1}
p
2
{hanh vi ng ngha 2}

p
n
{hanh vi ng ngha n}
3.8. Automat hu han
1. Automat hu han khong tat nh (NFA)
Th du: Cho NFA:
Tap trang thai S = {0, 1,2, 3}; = {a, b}; Trang thai bat au so = 0;
Tap trang thai ket thuc F = {3}.
Bang 3.4. Bang truyen cho NFA hnh 3.10
Ky hieu nhap
Trang thai
a b
0 {0, 1} {0}
1 - {2}
2 - {3}
NFA chap nhan mot chuoi nhap x neu va ch neu ton tai mot ng
nao o trong s o t trang thai bat au en trang thai ket thuc sao
cho tat ca ten cua cac canh con ng cho chuoi x. NFA chap nhan
chuoi aabb.
2. Automat hu han tat nh (DFA)
DFA la trng hp ac biet cua NFA, no khong co:
i) S truyen rong.
ii) Vi moi trang thai s va ky hieu nhap a ch ton tai nhieu nhat mot
canh co ten a xuat phat t s.
Giai thuat 3.1. Mo phong hoat ong cua DFA tren chuoi nhap x.
Th du 3.5
start
3
0
a
0
a
b b
1
1
Hnh 3.12. DFA nhan dang ngon ng (a | b)*abb
3. Chuyen NFA sang DFA
Giai thuat 3.2. Xay dng tap con (Tao DFA t NFA).
Nhap: Cho NFA goi la N.
Xuat: DFA goi la D, nhan dang cung ngon ng nh NFA.
Phng phap: Xay dng bang truyen cho D. Moi trang thai cua D la
tap trang thai cua N. D mo phong ong thi moi chuyen ong cua N
tren chuoi nhap cho trc bang cac tac vu:
-closure (s); -closure (T); move (T, a)
Mo phong 3.2. Xay dng tap con
Giai thuat: Tnh -closure
ay tat ca cac trang thai trong T len stack; Khi tao -closure (T)
cho T.
Mo phong 3.3. Tnh -closure
Th du 3.6. (H.3.13 ) la NFA nhan dang ngon ng (a | b )* abb. Chung
ta dung giai thuat 3.2 e xay dng DFA tng ng.
0
start

1
10
4

a
b
b
a
2
8
3
5
6 7 9

Hnh 3.13. NFA nhan dang (a | b)* abb


b
3.9. T bieu thc chnh quy en NFA
Xay dng NFA t bieu thc chnh quy
Giai thuat 3.3. Xay dng NFA t bieu thc chnh quy (Cau truc
Thompson)
Nhap: Bieu thc chnh quy r tren .
Xuat: NFA nhan dang ngon ng L (r).
Phng phap:
Quy tac:
1. Vi , xay dng NFA
2. Vi a thuoc , xay dng NFA
start
i f

start
i
f
a
3. Gia s N( s ) vaN( t ) la NFA cho bieu thc chnh quy s va t
- Vi s | t xay dng NFA hon hp N (s| t)
i
start
f
N(s)
N(t)

- Vi bieu thc st, xay dng NFA hon hp N (st)


start
i
f
N(t) N(s)
- Vi bieu thc s* , xay dng NFA N (s*)
start
i
f

- Bieu thc s th N (s) la NFA nhan dang L (s)


Cac tnh chat cua NFA xay dng theo cau truc Thompson
Th du 3.7.
Giai thuat 3.4. Mo phong NFA
Nhap: NFA goi la N c xay dng theo giai thuat 3.3, chuoi nhap x.
X c ket thuc bang eof, N co trang thai bat au s0 va tap trang thai
ket thuc F.
Xuat: Giai thuat tra li ung neu N chap nhan x, ngc lai tra li sai
Phng phap:
Giai thuat: Mo phong 3.4.
Th du 3.8. Gia s ta co NFA (H.3.13 ), x la chuoi nhap cha a.
Dung giai thuat 3.4 xet xem NFA co chap nhan x ?. Ket qua giai thuat
tra li sai ( nghia la a khong thuoc ngon ng do NFA nhan dang
Thi gian va khong gian can thiet cho viec nhan dang mot chuoi nhap:
- oi vi DFA: khong gian O (2 ( )) va thi gian O (|x | ).
- oi vi NFA: khong gian O (|r | ) va thi gian O (| r | * | x | ).
3.10. Xay dng DFA trc tiep t bieu thc chnh quy va van e toi
u hoa viec so trung mau
1. Trang thai quan trong cua NFA
Trang thai quan trong la t no co s truyen khac rong. Nh vay neu
hai tap trang thai co cung so trang thai quan trong th chung c
ong nhat. NFA c xay dng theo cau truc Thompson co trang thai
ket thuc khong co s truyen ra, nh vay no khong phai la trang thai
quan trong ( nhng thc s no lai rat quan trong ). e tranh tnh trang
nay ngi ta them ky hieu # vao sau bieu thc chnh quy, va trang
thai ket thuc co s truyen tren ky hieu #. Khi xay dng tap con hoan
tat th trang thai nao co s truyen tren # la trang thai chap nhan.
- Bieu thc r# c goi la bieu thc chnh quy gia to.
Van pham cua bieu thc chnh quy:
exp exp | term exp term term term factor
term factor factor factor* factor ( exp )
factor a factor b
Hnh 3.16. Cay phan ra cua bieu thc gia to (a| b )* abb#
a
3
b
4
#
6
b
5
a
1
b
2
*




Hnh 3.17. NFA c xay dng t ( a| b )* abb#
Lu y:
- Cac trang thai c ky hieu bang so la trang thai quan trong; Cac
trang thai c ky hieu bang ch la trang thai khong quan trong.
- th du 3.6 trang thai A va C co cung so trang thai quan trong la
2,4,7 , trong (H 3.17) la 1,2,3:
A = {0,1,2,4,7} C = {1,2,4,5,7}
A
start

B
F
2

a
#
b
a
1
4
C
D
F 3 6

b
4
b a

Bang 3.6. Cac quy tac e tnh ba ham nullable, firstpos, lastpos
Nut n nullable (n) firstpos (n) lastpos (n)
n la nut co ten
la
true
n la nut co ten
la v tr i
false {i} {i}
nullable(c
1
) or
nullable(c
2
)
firstpos(c
1
)
firstpos(c
2
)
lastpos(c
1
)
lastpos(c
2
)
nullable(c
1
) and
nullable(c
2
)
if nullable(c
1
)
then firstpos(c
1
)
firstpos(c
2
)
else firstpos(c
1
)
if nullable(c
2
)
then lastpos(c
1
)
lastpos(c
2
)
else lastpos(c
2
)
true firstpos(c
1
) lastpos(c
1
)
n
c
2
c
1
|
c
2
c
1

n
c
1

n
Cac quy tac tnh ham followpos (n):
1. Neu nut n la nut cat vi con ben trai la c
1
, con ben phai la c
2
va i la
v tr trong lastpos(c
1
), th tat ca v tr trong first(c
2
) se cho vao
followpos(i).
2. Neu n la nut star va i la v tr trong lastpos(n) th tat ca cac v tr
trong firstpos(n) se cho vao followpos(i).
Th du 3.10. Ta xac nh DFA cho bieu thc (a | b)* abb
{1}a {1} {2}a {2}
# {6}

{1,2} {1,2}
{1,2}
{1,2}
{5}a{5}
{4}a{4}
{3}a{3}
{1,2,3}
{1,2,3}
{1,2,3}
{1,2,3}
{3}
{4}
{5}
{6}
{6}
Hnh 3.19. Tnh cac ham nullable, firstpos, lastpos cho cac nut tren cay
phan tch cua bieu thc ( a| b )* abb
Sau o ta tnh ham followpos.
Bang 3.7. cac tr followpos cua cac nut tren cay (H.3.19)
Nut followpos
1 {1,2,3}
2 {1,2,3}
3 {4}
4 {5}
5 {6}
6 _
Giai thuat 3.5. Xay dng DFA t bieu thc chnh quy
Nhap: Bieu thc chnh quy r.
Xuat: DFA goi la D, nhan dang ngon ng L( r)
Phng phap :1. Xay dng cay phan tch cho BTCQ gia to r#.
2. Tnh cac ham nullable, firstpos, lastpos va followpos cho cac nut
tren cay phan tch
3. Xay dng cac trang thai, ham truyen va bang truyen cho D bang
thu tuc (mo phong 3.5).
Thu tuc tao tap con la cac trang thai cua DFA:
Luc au D ch co mot trang thai bat au la firstpos(root) , cha c
anh dau.
Mo phong 3.5. Thu tuc tao tap con
while co trang thai T cha c anh dau, trong tap trang thai
cua D do begin anh dau T;
for vi moi ky hieu nhap a do;
begin vi U la tap cac v tr trong followpos (p), p la v tr trong
T, sao cho ky hieu tai v tr p la a;
if U khong rong va cha co trong tap trang thai cua D
then begin them U vao tap trang thai cua D va la trang thai
cha c anh dau;
D[T, a] := U;
end;
end;
end;
Lu y: trang thai ket thuc cua D co cha v tr cua y.
Th du 3.10. Xay dng DFA t btcq ( a| b )* abb. (trang 103 -104)
3. Toi thieu so trang thai cua DFA
- Khai niem DFA ay u, trang tai chet d.
- Chuoi w phan biet trang thai s vi trang thai t.
Th du: DFA (H.3.14, tr. 90), neu xuat phat t C e nhan dang w=bb
th khong i c en trang thai chap nhan, ngc lai t B th i en E
la trang thai chap nhan.
Giai thuat 3.6. Toi thieu so trang thai cua DFA.
Nhap: DFA, goi la M co S, , s
0
, F. M la DFA ay u.
Xuat: DFA, goi la M chap nhan ngon ng nh M, vi so trang thai
nho nhat.
Phng phap:
1.Tao khi au co 2 nhom: cac trang thai ket thuc F, va cac trang
thai khong ket thuc S F.
2. Ap dung thu tuc (mo phong 3.6) e tao
new
.
3. Neu
new
= th
final
= , tiep tuc bc 4, ngc lai lap lai bc
2, vi =
new
4. Chung ta chon moi nhom 1 trang thai ai dien va o la trang thai
cua M

.
5. Neu M co trang thai chet d th loai no ra khoi M. Tat ca cac s
truyen en trang thai d eu khong xac nh.
Mo phong 3.6. Giai thuat tao
new
for vi moi nhom G cua do begin
- chia G thanh cac nhom nho hn sao cho hai trang thai s va t
cua G se cung mot nhom nho hn neu va ch neu cac s truyen tren
tat ca cac ky hieu nhap a t s va t eu i en cac trang thai ke tiep
trong cung mot nhom cua ;
- ta thay G bang cac nhom nho hn va c tao nen, cho
chung vao
new
;
end;
Th du 3.11. Cho DFA nh (H. 3.14, tr. 90).
Cach giai tr. 106 107.
4. Cac phng phap nen bang truyen FA
1. Thu giam hang va cot d tha
Hnh 3.21. Bang truyen c nen bang phng phap thu giam hang va
cot d tha
0 0 1 0000 222222222 0 0 3 0 0
0
1
2
3
4
4
0 0 -1 3 1 -1
1 1 -1 2 1 5
2 2 -1 -1 2 5
3 3 -1 -1 2 -1
4 4 -1 -1 -2 -1
5 4 -1 -1 4 -1
0 1 2 3
yrmap
y next
2. Nen cap
Hnh 3.22. Bang truyen nen theo phng phap nen cap
0 7 0,3 0,1 1,1 2,1 3,1 4,2 5,2 ynext 0
1 0 -1-112-1..1111111111-1-1 5-1 ynext 1
2 6 0,2 1,2 2,3 3,4 4,1 5,1 ynext 2
3 7 0,1 1,1 2,2 3,2 4,2 5,2 6,2 ynext 3
4 7 0,4 1,4 2,4 3,2 4,2 5,2 6,2 ynext 4
5 6 0,2 1,2 2,2 3,2 4,1 5,1 ynext 5
ynext
Mo phong 3.7. Giai thuat tm trang thai ke tiep tren bang truyen a
c nen
row := ynext [t];
I := row^[0], /* row^ la ma tran 1 chieu ynext t */
if I = 0 then
begin c := ord (a)
s := row^[c]; /* s la trang thai ke tiep */
end
else begin
while (a < > row^ [i]. chart) and (i < I) do
i := i + 1;
if a = row^[i]. chart then s := row^[i]. State
else writen (sai loi t vng);
end;
3.11. Thiet ke bo sinh bo phan tch t vng
Hnh 3.23. Trnh bien dch Lex va Bo phan tch t vng
Chng trnh mo phong FA va
bang truyen
Trnh bien dch
Lex
a)
Chng trnh
mo phong FA
Bang truyen
b)
ac ta lex
Bo em nhap
1. Mau so trung tren c s NFA
Hnh 3.24. NFA c tao ra t s ac ta LEX
s
o
N(p
i
)

N(p
1
)
N(p
n
)

CHNG 4
PHAN TCH CU PHAP
4.1. Vai tro cua bo phan tch cu phap
- Phng phap tong quat: Cocke-Younger-Kasami va Earley.
- Phan tch t tren xuong.
- Phan tch t di len.
4.2. Xay dng van phamcho ngon ng lap trnh
Loai bo s khong tng minh
stmt if exp then stmt
if exp then stmt else stmt
| other
Th du: phat bieu: if E
1
then if E
2
then S
1
else S
2
la phat bieu
khong tng minh
- Loai bo s khong tng minh.
Quy c hoac sa van pham.
stmt matched-stmt
lunmatched-stmt
matched-stmtif exp then matched-stmt else matched-stmt1
| other
unmatched-stmt if exp then stmt
| if exp then matched-stmt else unmatched-stmt
Loai bo e quay trai
Van pham goi la e quy trai neu ton tai dan xuat.
A A, vi ( V
t
V
n
)
e quy trai la bao gom e quy trai n gian (trc tiep) va e quy trai
tong quat.
e loai bo e quy n gian, ta se thay the tap luat sinh:
A A
1
A
2
A
m

2
..
n
bang cap luat sinh
A
1
A
2
A
n
A.
A
1
A
2
A ..
m
A
Th du 4.1. Loai bo e quy trai cho van pham:
E E + T T
T T * F F
F (E) id
Giai thuat 4.1. Loai bo e qy trai
Nhap: Van pham G khong co vong lap hoi luat sinh rong.
Xuat : Van pham tng ng G khong co e quy trai.
Phng phap: Ap dung giai thuat mo phong 4.1 cho G. G khong
con e quy trai nhng co the co luat sinh rong.
Sap xep caucus ky hieu khong ket thuc theo mot th t nao o: A
1
,
A
2
, . A
n
.
Mo phong 4.1. Giai thuat loai bo e quy trai t van pham
for i := 1 to n do
for j := 1 to i - 1 do begin
- Thay cac luat sinh co dang A
i
A
j
bang cac luat sinh
A
i

1

2
..
k

- Vi A
j
luat sinh co dang A
i

1

2
.
k
- Loai tat ca ca cac luat sinh co e quy trai trc tiep trong cac
A
i
luat sinh
end;
Th du: Chung ta co ap dung giai thuat 4.1 vao van pham sau e loai
bo e quy trai.
S Aa b A Ac Sd
Tha so trai: Th du ta co hai luat sinh:
stmt if exp then stmt else stmt
if exp then stmt
Ca hai luat sinh eu co if dan au nen ta se khong biet chon luat sinh
nao e trien khai. V the e lam cham lai quyet nh la chon chung
ta se tao ra tha so trai.
Giai thuat 4.2. Tao van phamco tha so trai
Nhap: cho van pham G.
Xuat: van pham G co tha so trai tng ng.
Phng phap: Tm chuoi dan au chung cua cac ve phai luat sinh, th
du: A
1

2
..
n
. la chuoi khong bat au bi . Ta
thay cac luat tren bang cac luat AA A
1

n
Th du: Ta ap dung giai thuat tren cho van pham phat bieu if, nc
van pham tng ng
S i E t SSa Se S E b
4.3. Phan tch cu phap t tren xuong
Phan tch cu phap e quy i xuong.
Phan tch cu phap oan nhan trc.
1. Phan tch cu phap e quy i xuong
Th du: Cho van pham G : ScAd A ab a
S S
c c
A d A d
a
b)
a b
a)
Hnh 4.4. Cac bc phan tch cu phap t tren xuong
2. Phan tch cu phap oan nhan trc
- Hay loai bo e quy trai cho van pham ma chung ta thiet ke.
- Hay tao van pham co tha so trai neu can thiet.
S o dch cho bo phan tch oan nhan trc
S o nay co ac iem nh sau:
- Moi ky hieu khong ket thuc co mot s o.
- Ten cac canh la token va cac ky hieu khong ket thuc.
S truyen tren token se c thc hien neu ky hieu nhap trung vi
token o. Neu co s truyen tren ky hieu khong ket thuc A th ta thc
hien mot lenh goi thu tuc A.
e xay dng s o chung ta se tien hanh cac bc sau ay:
1. Tao trang thai bat au va ket thuc.
2. Vi moi luat sinh co dang A X
1
X
2
X
n
, ta xay dng ng i t
trang thai bat au en trang thai ket thuc sao cho cac canh co ten X
1
,
X
2
, X
3
X
n
.
C che hoat ong cua bo phan tch oan nhan trc
Th du 4.3. Chung ta hay tao s o dch cho van pham
G: E TE
E + TE |
T FT
T FT |
F (E) | id
T
E
+ T E
E:
T:
F T
T:
F
T

2
9
1
3
Hnh 4.5. S o dch cua cac ky hieu khong ket thuc cua G
E:

4 5 6
3
0 1
7
10 11 12
8
( )
F:
id
1
7
14 15 16
)
( E
Hnh 4.6. S o dch cua cac ky hieu khong ket thuc cua G, a c
thu giam
Giai thuat:
procedure E;
procedure T;
procedure F;
begin nextchar (c);
if c = ( then begin
match ((); E;
match ()); end
else if c = id then match (id)
else error;
E: F:
id
6
17
0
14 15 16
3
+
T: 7 10

13
T F
end; {F}
begin
F;
while c = * do F;
end; {T}
begin
T;
while c = + do T;
end; {E}
3. Phan tch cu phap oan nhan trc khong e quy
Cau tao cua bo phan tch cu phap
Stack a
1
a
2
a
n
$ bo em nhap
X Chng trnh ieu khien
Y
Z
$
Bang phan tch M
Xuat
Hnh 4.7. Mo hnh cau tao cua bo phan tch oan nhan trc
khong e quy.
Hoat ong cua bo phan tch
trang thai bat au, stack ch cha cac ky hieu muc tieu cua van
pham nam tren $, tren nh stack. Bang phan tch M la ma tran. Hai
ky hieu X va a se xac nh hanh vi cua bo phan tch. Bo phan tch co
ba hanh vi nh sau:
1. Neu X = a = $.
2. Neu X = a $.
3. Neu X la ky hieu khong ket thuc.
Giai thuat 4.2. Phan tch cu phap oan nhan trc khong e quy.
Nhap: chuoi nhap w va bang phan tch M cho van pham G.
Xuat: neu w thuoc L (G), se tao ra dan xuat trai cua w, ngc lai se
bao loi.
Phng phap: luc au cau hnh cua bo phan tch la ($S, w$) vi S la
ky hieu muc tieu cua G. at ip (la con tro hoac con goi la au oc
cua bo phan tch) vao ky hieu nhap au tien cua w$.
Mo phong 4.2. Chng trnh phan tch cu phap oan nhan trc
repeat
X tren stack va ky hieu a ang c au oc ip oc;
if X la ky hieu ket thuc hoac $ then
if X = a then begin
- ay X ra khoi stack;
- dch au oc en ky hieu nhap ke tiep; end
else error ()
else if M [X, a] = X X
1
X
2
X
k
then begin
- ay X ra khoi stack;
- ay X
k
X
k-1
X
1
len stack (X
1
tren nh stack);
- xuat luat sinh X X
1
X
2
X
k
; end
else error ()
until X = $
Th du 4.4. Gia s chung ta co van pham G.
E E + T | T
T T F | F
F (E) | id
Chung ta se thc hien loai bo e quy trai, nhan c G:
E TE
E+ TE |
T FT
T FT |
F (E) | id
Bay gi chung ta se phan tch cu phap cho cau nhap w = id + id * id
bang bang phan tch M cho trc, Bang 4.1.
Bang 4.1. Bang phan tch M cho van pham G
Ky hieu nhap Ky hieu khong
ket thuc
id + * ( ) $
E E TE

E TE

E
+TE

T T FT

T FT

T * FT

F F id F (E)
Qua trnh phan tch cu phap cau nhap w = id + id id se c trnh
bay bang 4.2.
Bang 4.2. Cac bc phan tch cu phap cau id + id id
Stack Chuoi nhap Xuat Stack Chuoi nhap Xuat
$E id + id id $ $E

F id id $ T FT

$E

T id + id id $ E TE

$E

id id id $ F id
$E

F id + id id $ T FT

$E

T id $
$E

id id + id id $ F id $E

F id $ T

FT

$E

T + id id $ $E

F id $
$E + id id $ T

$E

id id $ F id
$E

T+ + id id $ E

+TE

$E

T $
$E

T id id $ $E $ T

$ $ E

Xay dng bang phan tch M


a. first va follow
first() la tap c ky hieu ket thuc a, dan au cac chuoi c dan xuat
t , a. Neu th thuoc first().
follow(A) la tap cac ky hieu ket thuc a, xuat hien ngay ben phai A
trong dang cau. Nh vay ton tai dan xuat S Aa. Neu gia A va a
ton tai chuoi ky hieu, th no se dan xuat ra chuoi rong. Neu A tan
cung ben phai cua dang cau th $ thuoc follow(A).
- Cac quy tac tnh first(X) vi X la ky hieu van pham.
- Cac quy tac tnh follow(A) cho tat ca cac ky hieu khong ket thuc
A.
Th du 4.5. Cho van pham G.
E TE
E+ TE
T FT
T FT
F(E)id
Toan bo cac ham first va follow cua cac ky hieu van pham cua G :
first(E) = first(T) = first(F) = {(, id}
first(E) = {+, } ; first(T) = {*, }
follow(E) = follow(E) = {$, )}
follow(T) = follow(T) = {+, $, )}
follow(F) = {*, +, $, )}
b. Xay dng bang phan tch M
Giai thuat 4.3. Xay dng bang phan tch M.
Nhap: van pham G.
Xuat: bang phan tch M.
Phng phap:
1. Vi moi luat sinh A hay thc thi bc 2 va 3.
2. Vi moi ky hieu ket thuc a thuoc first(), them A vao M[A, a].
3. Neu ky hieu thuoc first(), them A vao M[A, b] sao cho b
thuoc follow(A). Neu $ thuoc follow(A) th them A vao M [A, $].
4. Nhng phan t cua bang M trong, hay anh dau loi.
Van pham LL (1)
Th du 4.7. Cho van pham G.
S iEtSSa ; S eS ; E b
Bang 4.3. Bang phan tch M cho th du 4.7.
Ky hieu nhap
Cac
ky hieu
khong
KT
a b e i t $
S S a S iEtSS
S

eS
S

E E b
- Van pham khong co phan t nao cua bang phan tch M co nhieu hn
mot tr th c goi la van pham LL (1).
- Van pham LL (1) co cac tnh chat sau.
Khac phuc loi trong phan tch cu phap oan nhan trc
Loi xuat hien trong cac trng hp sau: Mot la ky hieu ket thuc tren
stack khong trung vi ky hieu nhap ang c oc. Hai la A la ky
hieu khong ket thuc tren nh stack, a tren chuoi nhap, c oc, ma
M [A, a] la trong.
Mot so heuristics c ap dung cho viec khac phuc loi.
Th du 4.8. Cho van pham
E TE ; E + TE ; T FT ; T * FT; F (E)id
first(E) = first(T) = first(F) = {(, id)}
first(E) = {+, }; first (T) = {*, }
follow(E) = follow(E) = {$, )}
follow(T) = follow(T) = {+, $, )}
follow(F) = {*, +, $, )}
Bang 4.4. Phan tch M co ky hieu khac phuc loi.
Ky hieu nhap Ky hieu
khong
KT
id + * ( ) $
E E TE

E TE

synch synch
E

+TE

T T FT

synch T FT

synch synch
T

* FT

F F id synch synch F (E) synch synch


4.4. Phan tch cu phap t di len
Phan tch cu phap t di len c hieu la phan tch ay va thu giam
(Shift-Reduce parsing) la phng phap phan tch LR.
Th du 4.9. Cho van pham G.
S aABe ; A Abcb ; Bd
Phan tch cau w = abbcde.
Tom tat cac bc thu giam nh sau:
Qua trnh thu giam neu theo chieu ngc lai th o chnh la qua trnh
dan xuat phai. Qua trnh nay a sinh cay cu phap cua cau phan tch t
di len.
Hnh 4.8. Cay cu phap c xay dng t di len cua cau w = abbcde.
Handle
Tm kiem handle
Bat au t chuoi can phan tch w, ta at w = n . n la dang cau c
dan xuat lan th n.
S =
0

1

2

n-1

n
= w
Xay dng dan xuat phai ngc t w =
n
. Ta tm n trong n sao cho

n
la ve phai luat sinh A
n

n
. Thay
n
trong
n
bang A
n
, ta nhan
c dang cau th (n 1) la
n 1
.
Qua trnh thu giam c tiep tuc nh vay cho en khi at c
o
ch con
la mot ky hieu khong ket thuc va la ky hieu muc tieu.
1. Phan tch cu phap th t yeu
Van pham co tnh chat: khong co luat sinh nao co ve phai la chuoi
rong (A ) hoac ve phai khong co hai ky hieu khong ket thuc
ng ke nhau goi la van pham th t yeu.
n
r
m
r
m
r
m
2 r -1
r
m
r
m
1
Bo phan tch cu phap th t yeu
1. Cau tao
$ X
1
X
2
X
n-1
X
n
Y
1
Y
2
Y
n-1
Y
n
$
Chng trnh
phan tch
Bang phan
tch S-R
Hnh 4.9. Mo hnh bo phan tch cu phap th t yeu
Xuat
2. Hoat ong
Th du 4.10. Cho van pham cua phat bieu gan
< assign stmt > id = < exp >
< exp > < exp > + < term > | <term>
< term > < term > * < factor > < factor >
< factor > id (< exp >)
Ky hieu <assign stmt> la ky hieu muc tieu.
Bang 4.6. Bang phan tch S-R cho van pham th du 4.10.
id + ( ) = $
<assign stmt> R
*
<exp> S S R
<term> S R R R
<factor> R R R R
id R R R S R
* S S
+ S S
( S S
) R R R R
= S S
$ S
Giai thuat 4.4. Phan tch cu phap th t yeu
Mo phong 4.3. Giai thuat cua chng trnh phan tch th t yeu
- Luc au stack trang thai ch co ky hieu $. Stack nhap cha
chuoi nhap, c ket thuc bi dau $ ; c:=false ;
repeat
if Ky hieu muc tieu tren nh va ky hieu $ ay stack trang thai,
ong thi stack nhap ch cha $ then
c:=true /phan tch thanh cong, cay cu phap xay dng xong/
else begin
- X tren nh stack trang thai, Y tren nh stack nhap.
- Gia s T la tr cua phan t S-R [X, Y];
if T la rong then error ()
else if T = R then
if tren nh stack co cha ve phai cua luat sinh nao o
then begin
- Goi A X
1
X
2
Xn la luat sinh nao co ve phai dai
nhat so trung vi chuoi tren stack trang thai: (a) Giai toa X
1
X
2
X
n
ra khoi stack; (b) Thay A len stack. (c) Tao nut mi A tren cay cu
phap, co cac con la X
1
X
2
X
n
end
else error ()
else begin
(a) Giai toa Y ra khoi stack nhap; (b) ay Y len nh
stack trang thai; (c) Tao nut mi ten Y tren cay cu phap;
end;
end;
until c;
3. Xay dng bang phan tch S-R
nh ngha cac quan he < , = , >:
- Chung ta noi X < Y neu va ch neu ton tai mot luat sinh ma ve
phai co dang XA vi A la ky hieu khong ket thuc va sinh ra mot
chuoi bat au bang Y (A Y).
- X > Y neu va ch neu ton tai mot luat sinh ma ve phai co dang
AB. A sinh ra mot chuoi ky hieu c ket thuc bang X (A X). B
sinh ra mot chuoi c bat au bang Y (B Y), hoac B = Y.
ay co hai trng hp xay ra trong qua trnh tm cac moi quan he
cho cap (X, Y):

Trng hp 1: Y la ky hieu ket thuc


Trng hp 2: Y la ky hieu khong ket thuc.
a. Ton tai $ A vi A la ky hieu muc tieu cua van pham cho trc.
b. Neu ve phai luat sinh co X nam ke ngay Y ve pha trai (XY)
th X Y
c. Neu X Y ma ton tai mot luat sinh Y Z
1
Z
n
th X Z
1
d. Ton tai A > $ vi A la ky hieu muc tieu
e. Neu X Y va ton tai mot luat sinh X Z
1
Z
n
th Z
n
> Y
g. Neu X > Y va ton tai mot luat sinh Y Z
1
Z
n
th X > Z
1
4. Van pham th t yeu
Mot van pham c goi la th t yeu neu thoa cac ieu kien sau:
1. Khong co hai luat sinh co cung mot ve phai.
2. Khong co phan t S-R [X, Y] nao cua bang S-R va co tr S
va co tr R.
3. Neu ton tai luat sinh AX
1
X
2
X
n
va luat sinh BX
i
X
i+1
X
n
th khong ton tai quan he X
i 1
B.
2. Bo phan tch cu phap LR
- Cac tnh chat cua phng phap phan tch LR
- Giai thuat phan tch cu phap LR
1. Bo phan tch cu phap co cau tao nh sau:
a
1
a
2
a
i
a
n
$
S
m
X
m
S
m 1
X
m 1

$ action goto bang phan tch


Chng trnh
ieu khien
bo em nhap
Stack
xuat
Hnh 4.11. Mo hnh bo phan tch cu phap LR
2. Hoat ong
Stack c dung e cha chuoi ky hieu co dang s
0
X
1
s
1
X
2
X
m
s
m
.
Cap (s
m
, a
i
) se xac nh mot tr c lu cha trong bang phan tch.
Bang phan tch gom hai phan bieu th bi ham action va goto. Cau
hnh (configuration) cua bo phan tch LR:
s
0
X
1
s
1
X
i
s
i
X
m
s
m
, a
i
a
i+1
a
n
$). Cau hnh nay cho chung ta dang
cau X
1
X
2
X
m
a
i
a
i+1
a
n
.
Giai thuat 4.5. Phan tch cu phap LR
Nhap: chuoi nhap w, bang phan tch action goto cua van pham G.
Xuat: neu w thuoc L (G), no tao ra s phan tch t di len. Ngc lai,
bo phan tch se bao loi.
Phng phap:
- Thi iem ban au stack co trang thai s
0
.
- Chuoi w$ nam tren bo em nhap.
- Bo phan tch at au oc (con tro ip) vao ky hieu nhap au tien cua
w.
c:=false; /*c la bien luan ly, bao cho biet qua trnh phan tch ket
thuc*/
repeat
- at s la trang thai tren nh stack a la ky hieu nhap c ip
ch en
if action [s, a] = shift(s) then begin
(a)ay a len stack (b)sau o ay s len nh stack
(c)chuyen ip sang ky hieu nhap ke tiep; end
else if action [s, a] = reduce(A ) then
begin
(a)ay (2*) ky hieu ra khoi stack, s la trang thai
tren nh stack
(b)Tm j = goto [s, A]; (c)ay A va sau o la j len nh
stack; (d)xuat luat A
end
else if action [s, a] = accept then c := true
else error ();
until c;
Th du 4.12. Cho van pham G
(1) E E + T (2) E T (3) T T * F
(4) T F (5) F (E) (6) F id
Bang 4.8. Bang phan tch cho van pham G th du 4.12.
action goto
id + * ( ) $ E T F
0 s
5
s
4
1 2 3
1 s
6
acc
2 r
2
s
7
r
2
r
2
3 r
4
r
4
r
4
r
4
4 s
5
s
4
8 2 3
5 r
6
r
6
r
6
r
6
6 s
5
s
4
9 3
7 s
5
s
4
10
8 s
6
s
11
s
11
9 r
1
s
7
r
1
r
1
10 r
3
r
3
r
3
r
3
11 r
5
r
5
r
5
r
5
Trang thai
Th du: Phan tch cau w = id id + id
Van pham LR
Xay dng bang phan tch SLR
nh ngha thc the LR (0)
Th du: G co luat sinh A XYZ, se cho bon thc the:
AXYZ; AXYZ; AXYZ; AXYZ
Neu A se cho ta thc the A
Y tng c ban cua giai thuat xay dng bang phan tch SLR la t van
pham, chung ta i tm DFA, nhan dang chuoi dan au ben trai cua
dang cau (viable prefixe).
nh ngha van pham gia to: neu G la van pham, th G la van pham
gia to, la G co S la ky hieu muc tieu va co them luat sinh
S S.
Phep bao ong Closure.
Giai thuat tnh closure.
Mo phong 4.4. Giai thuat tnh ham closure
function closure (| : item) : item;
begin J := |;
repeat
for vi moi thc the A .B trong J va vi moi
luat sinh
B trong G sao cho
thc the B cha co trong J do
them B vao J;
until khong the them thc the mi vao J;
closure := J;
end;
Giai thuat tnh goto: ham goto (I, X) vi I la tap cac thc the, X la ky
hieu van pham. Goto (I, X) la closure cua tap cac thc the co dang A
X. sao cho thc the A .X trong I.
Mo phong 4.5. Giai thuat tnh tap tuyen cac tap thc the
procedure items (G);
begin
C := {closure ({S S}}}
repeat
for vi moi tap thc the I trong C va vi moi ky
hieu van pham X sao cho phep goto (I, X) khong rong va khong co
trong C do
them goto (I, X) vao C;
until khong the them tap thc the mi vao C;
end;
Th du 4.13. Cho van pham gia to G
E E ; E E + T ; E T
T T* F ; T F ; F (E) ; F id
Hay tm tap C va s o DFA.
Xay dng bang phan tch SLR
Giai thuat 4.6. Xay dng bang phan tch
Nhap: van pham gia to G
Xuat: bang phan tch SLR vi ham action va goto cho van pham G
Phng phap:
1. Xay dng C = {I
o
, I
1
, I
n
}.
2. i la trang thai ai dien cho tap thc the I
i
.
a. Neu A a la thc the trong I
i
va goto (I
i
, a) = I
j
th phan t
action [i, a] = shift(j), vi a phai la ky hieu ket thuc.
b. Neu A trong I
i
th action [i, a] = reduce(A ) vi a la
tat ca cac ky hieu nam trong follow (A). A khong phai la S (ky hieu
muc tieu mi).
c. Neu S S trong I
i
th action [i, $] = accept.
3. Cho tat ca cac ky hieu khong ket thuc A. Neu goto [I
i
, A]=I
j
th
ham goto [i, A]=j.
4. Tat ca cac phan t cua bang phan tch khong c xac nh bang
quy tac 2 va 3, chung ta coi la loi.
5. Trang thai bat au cua bo phan tch la tap thc the co cha thc the
S S.
Th du 4.14. Xay dng bang phan tch SLR cho van pham G th du
4.13.
Th du 4.15. Cho van pham G.
(1) S L = R
(2) S R
(3) L * R
(4) L id
(5) R L
Ta nhan thay ung o khi action [2, =] = s
6
ong thi action [2, =] = r
5
va action [2, $] = r
5
. Do o tai phan t action [2, =] co hai tr s
6
va r
5
.
Nh vay G khong phai la van pham SLR.
Xay dng bang phan tch Canonical LR
Dang tong quat cua thc the la [A ., a] vi A la luat sinh
va a la ky hieu ket thuc hoac dau $. Thc the co dang nh the c
goi la thc the LR (1). Neu = th thc the se co dang [A , a].
Luc nay chung ta thc hien thu giam bang luat sinh A ch vi
ieu kien ky hieu nhap ke tiep la a.
Chung ta noi thc the LR (1) [A ., a] la hp le vi chuoi ky hieu
dan au dang cau neu ton tai dan xuat phai:
S Aw w vi
rm rm
1. = va
2. hoac a la ky hieu dan au cua w, hoac w = th a la $.
Th du 4.16. Cho van pham G
S BB
B aB | b
Tnh tap tuyen cac thc the LR (1)
Phep tnh closure
Giai thuat 4.7. Xay dng cac tap thc the LR (1).
Mo phong 4.7. Giai thuat tnh cac tap thc the LR (1) cho van pham
gia to G
function closure (I: items): items;
begin
repeat
for vi moi thc the [A B, a] trong , vi moi
luat sinh B trong G va vi moi ky hieu ket
thuc b thuoc first sao cho thc the [B , b]
khong co trong | do
them thc the [B , b] vao |
until khong the them thc the mi vao |;
closure := |;
end;
function goto (| :items; X: symbol): items;
begin
j la tap cac thc the co dang [A X , a] sao cho
thc the [A X, a] trong | ; goto := closure (J);
end;
procedure items (G);
begin
d := {closure ({S S, $}}};
repeat
for vi moi tap thc the | trong C va vi moi ky
hieu van pham X sao cho goto (|, X) khong rong va
cha co trong C do them goto (|, X) vao C;
until khong the them tap thc the mi vao C;
end;
Th du 4.17. Xay dng cac tap thc the LR (1) cho van pham gia to
G: S .S ; S CC ; C cC|d
Giai thuat 4.8. Xay dng bang phan tch Canonical LR.
Nhap: van pham gia to G
Xuat: bang phan tch Canonical LR vi hai ham action va goto cho G
Phng phap:
1. Xay dng C = {I
o
, I
1
, , I
n
}.
2. Trang thai i ai dien cho I
i
.
a. Neu thc the [A .a, b] trong Ii va goto (I
i
, a) = I
j
th
phan t action [i, a] = shift(j), a phai la ky hieu ket thuc.
b. Neu [A , a] trong I
i
, A S th action[i, a]=reduce(A)
c. Neu [S S , $] trong I
i
th action [i, $] = accept.
3. Neu goto (I
i
, A) = Ij th phan t goto [i, A] = j.
4. Tat ca cac phan t khong ap dung c quy tac 2 va 3 th la loi.
5. Trang thai bat au cua bo phan tch cu phap la tap thc the co
cha thc the [S S , $].
Bang phan tch Canonical LR cho van pham th du 4.17. c xay
dng da vao giai thuat 4.7.
Bang 4.10. Bang phan tch Canonical LR
action goto
c d $ S C
0
1
2
3
4
5
6
7
8
9
s
3
s
6
s
3
r
3
s
6
r
2
s
4
s
7
s
4
r
3
s
7
r
2
acc
r
1
r
3
r
2
1 2
5
8
9
Trang thai
Bo sinh phan tch cu phap
Bo sinh phan tch cu phap Yacc
Trnh bien dch
Yacc
Trnh bien dch C
a.out
a.out
dan xuat
Tap tin ac ta
Yacc translate.y
y.tab.c
y.tab.c
chuoi token
Hnh 4.14. Tao bo phan tch cu phap bang Yacc.
Th du 4.23. Chung ta se tao tap tin ac ta van pham cho Yacc cua
van pham G.
E E + T | T
T T * F | F
F (E) | digit
Mo phong 4.10. Tap tin ac ta van pham cho Yacc th du 4.23.
% { # include <ctype.h>
% }
% token DIGIT
% %
line : exp \n{printf (% d\n, $1) ;}
;
exp : exp + term {$$ = $1 + $3;}
: term
;
term : term * factor {$$ = $1 + $3;}
: factor
;
factor : (exp) {$$ = $2;}
: DIGIT
;
%%
yylex ( ) {
int c ;
c = getchar ( ) ;
if (isdigit (c)) { yylval = c - 0 ;
return DIGIT;
}
return c;
}
Phan ac ta
Phan cac luat bien dch:
<ve trai luat sinh> <ve phai th nhat> | | <ve phai th n>
Luat bien dch trong Yacc:
<ve trai LS> : <ve phai 1> {hanh vi ng ngha 1}
: <ve phai 2> {hanh vi ng ngha 2}

: <ve phai n> {hanh vi ng ngha n}


Phan cac chng trnh con C phu tr
CHNG 5
BIEN DCH TRC TIEP CU PHAP
Co hai khai niem ve cac luat ng ngha co lien quan en luat sinh:
nh ngha trc tiep cu phap va lc o dch.
- nh ngha trc tiep cu phap.
- Lc o dch.
Chuoi nhap cay phan tch o th phu thuoc
anh gia th t cac luat ng ngha.
Hnh 5.0. Khai niem ve dch trc tiep cu phap
Khai niem tong quan cua bien dch trc tiep cu phap
5.1. nh ngha trc tiep cu phap
La van pham phi ng canh ma trong o moi ky hieu van pham co tap
thuoc tnh. Tap thuoc tnh nay co hai loai: thuoc tnh tong hp va
thuoc tnh ke tha.
Cay cu phap co gia tr thuoc tnh moi nut c goi la cay phan tch
chu thch.
Dang cua nh ngha trc tiep cu phap
Moi luat sinh co dang A eu co mot tap luat ng ngha co dang
b:= f (c
1
, c
2
, , c
k
) vi f la ham so va:
1. b la thuoc tnh tong hp cua A va c
1
, c
2
, , c
k
la cac thuoc tnh
cua ky hieu van pham cua luat sinh, hoac
2. b la thuoc tnh ke tha cua mot trong cac ky hieu van pham ben ve
phai cua luat sinh va c
1
, c
2
, , c
k
la cac thuoc tnh cua cac ky hieu van
pham cua luat sinh.
Th du 5.1. nh ngha trc tiep cu phap bang 5.1.
Bang 5.1. nh ngha trc tiep cu phap cho bang tnh n gian
Luat sinh Luat ng ngha
L En Print (E.val)
E E
1
+ T E.val: = E1.val + T.val
E TE.val: = T.val E.val: = T.val
T T
1
* F T.val: = T.val x F.val
T FT.val: = F.val T.val: = F.val
F (E) F.val: = E.val
F digit F.val: = digit . lexval
Thuoc tnh tong hp
nh ngha trc tiep cu phap dung cac thuoc tnh tong hp goi la nh
ngha thuoc tnh S. Thuoc tnh S cua mot nut co the c t cac thuoc
tnh moi nut t di len.
L
Th du 5.2. nh ngha thuoc tnh S th du 5.1
E.val = 19
E.val = 15
+
T.val = 4
T.val = 15
F.val = 5
F.val = 3
n
F.val = 4
T.val = 3
*
digit.lexval = 4
digit.lexval = 5
digit.lexval = 3
Hnh 5.1. Cay phan tch chu thch 3 * 5 + 4n
Thuoc tnh ke tha
Thuoc tnh ke tha la thuoc tnh ma gia tr cua no mot nut tren cay
phan tch c xac nh bi thuoc tnh cha me va/hoac anh ch cua nut
o.
Th du 5.3. S khai bao c tao bi ky hieu khong ket thuc D trong
nh ngha trc tiep cu phap (bang 5.2).
Bang 5.2. nh ngha trc tiep cu phap vi thuoc tnh ke tha L.in.
Luat sinh Luat ng ngha
D TL L.in: = T.type
T int T.type: = integer
T real T.type: = real
L L
1
, id L
1
.in: = L.in
L id Addtype (id.entry, L.in)
Hnh 5.2 la cay phan tch chu thch cho cau real id1, id2, id3.
D
T.type = real
L.in = real
L.in = real
L.in = real
,
id
3
real
id
2 ,
id
1
Hnh 5.2. Cay phan tch vi thuoc tnh ke tha in moi nut co nhan L.
o th phu thuoc
Cac s phu thuoc trung gian: thuoc tnh ke tha va tong hp tren cac
nut cua cay phan tch co the c mieu ta bang o th co hng c
goi la o th phu thuoc (dependency graph).
Cay phu thuoc cua mot cay phan tch cho trc, c xay dng nh
sau:
for vi moi nut n tren cay phan tch do
for vi moi thuoc tnh a cua ky hieu van pham tai nut n do
- xay dng nut tren o th phu thuoc cho a;
for vi moi nut n tren cay phan tch do
for vi moi luat ng ngha b:= f (c
1
, c
2
, , c
k
) tng ng vi
luat sinh c dung tai nut n
for i := 1 to k do
xay dng canh i t nut cua c
1
en nut b.
Th du 5.4. Khi ta dung luat sinh E E1 + E2 tren cay phan tch,
chung ta them cac canh sau vao (H.5.3) chung ta se c o th phu
thuoc.
Luat sinh Luat ng ngha
E E1 + E2 E.val := E1.val + E2.val
E
val
E
1
E
2
val
+
val
Hnh 5.3. o th phu thuoc cua cay phan tch cho E E1+ E2
Th du 5.5. (H.5.4) la o th phu thuoc cho cay phan tch cua (H.5.2).
anh gia th t
Trong sap xep logic topo, cac thuoc tnh phu thuoc c
1
, c
2
, , c
k
trong
luat ng ngha b:= f (c
1
, c
2
, , c
k
) c anh gia trc f.
T
real
4
type
in
5
6
L
3 entry
7
9
L
L 8
id
2
2 entry
in
id
1
10
1
entry
id
3
D
Hnh 5.4. o th phu thuoc cho cay phan tch (H.5.2).
Th du 5.6. Moi mot canh cua o th phu thuoc (H.5.4.) i t so
thap en so cao cua cac nut. T th t logic topo chung ta se co
chng trnh. Chung ta viet an cho thuoc tnh lien quan en nut
c anh so n. tren o th phu thuoc.
a4 := real
a5 := a4
addtype (id3.entry, a5);
a7 := a5
addtype (id2.entry, a7);
a9 := a7
addtype (id1.entry, a9);
Mot so phng phap c e ngh cho viec anh gia cac luat
ng ngha
1. Phng phap cay phan tch (parse-tree method)
2. Phng phap c s luat (rule-based method)
3. Phng phap ro rang
5.2. Cau truc cua cay phan tch
Cay cu phap: la dang thu gon cua cay phan tch, c dung e bieu
dien cho cau truc ngon ng.
Cay phan tch (H.5.1) se c ve lai thanh cay cu phap.
Xay dng cay cu phap cho bieu thc
Chung ta se dung cac ham e tao cac nut cho cay cu phap cua bieu
thc vi phep toan hai ngoi. Moi ham tra ve con tro ch en nut mi
c tao ra.
1. mknode(op, left, right).
2. mkleaf(id, entry).
3. mkleaf(num, val).
+

4
3
5
Th du 5.7. Mot chuoi cac ham c goi e tao cay cu phap cho bieu
thc a 4 + c (H.5.5).
(1) p1 := mkleaf(id, entry a); (4) p4 := mkleaf(id, entry c);
(2) p2 := mkleaf(num, 4); (5) p5 := mknode(+, p3, p4)
(3) p3 := mknode(-, p1, p2)
+

id
Num
4
id
ch en v tr cua c
ch en v tr cua a
Hnh 5.5. Cay cu phap cho bieu thc a 4 + c
nh ngha trc tiep cu phap va cau truc cay cu phap
Th du bang 5.3 la nh ngha thuoc tnh S dung e xay dng cay cu
phap cho bieu thc so hoc cong (+) va tr (-).
Bang 5.3. nh ngha trc tiep cu phap cho cau truc cay cu phap cua
bieu thc
Luat sinh Cac luat ng ngha
E E
1
+ T E. nptr: = mknode(+, E
1
.nptr, T. nptr)
E E
1
T E. nptr: = mknode(-, E
1
.nptr, T.nptr)
E T E. nptr: = T. nptr
T (E) T. nptr: = E. nptr
T id T. nptr: = mkleaf(id, id, entry)
T num T. nptr: = mkleaf(num, num, val)
Th du 5.8. Cay phan tch chu thch dung e mieu ta cay cu phap cho
bieu thc a - 4 + c c trnh bay (H.5.6).
E nptr
E
id

T
E
nptr
T
T
id
num
nptr
+
nntr
nptr
+

con tro ch en c
trong bang danh bieu
num 4
id
con tro ch en a
trong bang danh
bieu
Hnh 5.6. To chc cua cay cu phap cho bieu thc
a 4 + c
o th co hng khong lap vong mieu ta bieu thc
o th co hng khong lap vong (directed acyclic graph) goi tat la
dag.

+
+

a d

c
b
Hnh 5.7. Dag cho bieu thc a + a * (b c) + (b c) * d.
Bang 5.4. Cac lenh e tao DAG (H.5.7)
Hang Lenh Hang Lenh
1 p
1
:= mkleaf(id, a) 8 p
8
:= mkleaf(id, b)
2 p
2
:= mkleaf(id, a) 9 p
9
:= mkleaf(id, c)
3 p
3
:= mkleaf(id, b) 10 p
10
:= mknode( , p
8
, p
5
)
4 p
4
:= mkleaf(id, c) 11 p
11
:= mkleaf(id, d)
5 p
5
:= mknode(, p
3
, p
4
) 12 p
12
:= mknode(*, p
10
, p
11
)
6 p
6
:= mknode(*, p
2
, p
5
) 13 p
13
:= mknode(+, p
7
, p
12
)
7 p
7
:= mknode(+, p
1
, p
6
)
Mau tin tng trng cho nut c lu cha trong day nh (H.5.8).
Phep gan Dag
i := i + 10
:=
+
1 id
Ch en danh bieu i
2 num 10
3 + 1 2
4 := 1 3
5 ....
Bieu dien cau truc d lieu
i
10
Giai thuat 5.1. Phng phap so tr cho viec tao nut cua dag.
Gia s moi nut la mot phan t cua day (H.5.8).
Nhap: nhan op, nut 1 va nut r.
Xuat: nut vi ky hieu < op, 1, r >
Phng phap
5.3. anh gia t di len cho nh ngha thuoc tnh S
Thuoc tnh tong hp tren stack cua bo phan tch.
Bo bien dch cho nh ngha thuoc tnh S co the c thc hien da
theo bo sinh bo phan tch cu phap LR.
Bang 5.5. Stack cua bo phan tch co vung lu cha cac thuoc tnh
tong hp
state val
.
.
.
X X.x
Y Y.y
Z Z.z
. ..
top
Bang 5.6. Hien thc bang tnh bang bo phan tch cu phap LR
Luat sinh oan ma
L En Print (val [top])
E E
1
+ T val [ntop]: = val [top - 2] + val [top]
E T
T T
1
* F val [ntop]: = val [top - 2] x val [top]
T F
F (E) val [ntop]: = val [top - 1]
F digit
Bang 5.7. Qua trnh bien dch cho chuoi nhap 3 * 5 + 4n.
Chuoi nhap Trang thai Tr val Luat ap dung
3 * 5 + 4n
* 5 + 4n 3 3
* 5 + 4n F 3 F digit
* 5 + 4n T 3 T F
5 + 4n T * 3
+ 4n T * 5 3 5
+ 4n T * F 3 5 F digit
+ 4n T 15 T T * F
+ 4n E 15 E T
4n E + 15
n E + 4 15 4
n E + F 15 4 F digit
n E + T 15 4 T F
n E 19 E E + T
En 19
L 19 L En
5.4. nh ngha thuoc tnh L
Mo phong 5.1. Th t anh gia depth first cho cac thuoc tnh tren
cay phan tch
procedure dfvisit (n: node);
begin
for vi moi nut m la con cua nut n, t trai sang phai do
begin
anh gia thuoc tnh ke tha cua m
dfvisit (m)
end
anh gia thuoc tnh tong hp cua n
end;
Chung ta trnh bay lp cua nh ngha trc tiep cu phap, c goi la
nh ngha thuoc tnh L nh sau: thuoc tnh L luon c anh gia theo
th t depth first. nh ngha thuoc tnh L bao gom tat ca cac nh
ngha trc tiep cu phap, c da tren c s van pham LL (1).
nh ngha thuoc tnh L
nh ngha trc tiep cu phap, c goi la nh ngha thuoc tnh L, neu
moi thuoc tnh ke tha cua xj vi 1 < j n ma x
j
nam ve phai luat
sinh A x
1
x
2
x
n
, ch phu thuoc vao:
1. Cac thuoc tnh cua cac ky hieu x
1
, x
2
, , x
j-1
pha trai cua xj trong
luat sinh.
2. Thuoc tnh ke tha cua ky hieu A.
Bang 5.8. nh ngha trc tiep cu phap khong phai thuoc tnh L.
Luat sinh Luat ng ngha
L.i : = l (A.i)
M.i := m (L.s)
A.s : = f (M.s)
R.i : = r (A.i)
Q.i : = q (R.s)
A.s : = f (Q.s)
A QR
A LM
Lc o dch
Mo phong 5.2. Lc o dch n gian cho bieu thc so hoc
Trng hp n gian nhat neu hanh vi ch can thuoc tnh tong hp.
Nh vay chung ta se xay dng lc o dch bang cach tao ra hanh vi
la phep gan cho moi luat ng ngha va gan hanh vi nay vao tan cung
cua ve phai luat sinh.
Th du: ta co luat sinh va luat ng ngha sau:
Luat sinh Luat ng ngha
T T1 * F T.val:= T1.val x F.val
ta a luat ng ngha nhung vao luat sinh va c:
T T1 * F {T.val:= T1.val x F.val}
Neu cac hanh vi can ca thuoc tnh tong hp va ke tha th chung ta
phai lu y:
E TR
R addop T {print (addop. Lexeme)} R
T num {print (num. val)}
1. Thuoc tnh ke tha cua mot kyhieu nam ve phai luat sinh phai
c tnh trc trong hanh vi ng trc kyhieu o.
2. Hanh vi khong c tham khao en thuoc tnh tong hp cua ky hieu
nam ben phai hanh vi o.
3. Thuoc tnh tong hp cua ky hieu khong ket thuc ve trai luat sinh
ch co the c tnh sau tat ca cac thuoc tnh ma no tham khao ti.
5.5. Bien dch t tren xuong
Loai bo e quy trai cho lc o dch
Mo phong 5.3. Lc o dch vi van pham co e quy trai.
E E1 + T {E.val := E1.val + T. val}
E E1 T {E.val := E1.val - T. val}
E T {E.val := T. val}
T E {T.val := E. val}
T num {T.val := num. val}
E
R.i = 9
T.val = 9

T.val = 5
num. val =
5
+ T.val = 5
num. val = 2
R.i = 4
num. val = 9

Hnh 5.10. anh gia bieu thc 9 5 + 2.


Mo phong 5.4. Lc o dch chuyen oi vi van pham e quy trai.
E T
R +
R -
R
T (
)
T num
{R.i := T.val}
R {E.val := R.s}
T {R1.i := R.i + T.val}
R1 {R.s := R1.s}
T {R1.i := R.i - T.val}
R1 {R.s := R1.s}
{R.s := R.i}
E {T.val := E.val}
{T.val := num.val}
Gia s chung ta co lc o dch sau (vi thuoc tnh tong hp):
A A1Y {A.a := g (A1.a, Y.y}
A X {A.a := f (X.x)} (5.1)
Sau khi loai bo e quy trai chung ta co van pham tng ng;
A X {R.i := f (X.x)}
R {A.a := R.s}
R Y {R1.i := g (R.i, Y.y)} (5.3)
R1 {R.i := R1.s}
R {R.s := R.i}
Th du 5.13. nh ngha trc tiep cu phap bang 5.3. dung e xay
dng cay cu phap c chuyen thanh lc o dch.
E E1 + T {E.nptr := mknode (+, E1.nptr, T.nptr)}
E E1 T {E.nptr := mknode (-, E1.nptr, T.nptr)} (5.9)
E T {E.nptr := T.nptr}
A.a = g(g(f(X.x), Y
1
, y), Y
2
, y) A
R.i = f(X.x)
X
Y
2
A.a = g(f(X.x), Y
1
, y)
Y
1
Y
1
A.a = f(X.x)
Y
2
R.I = g(g(f(X.x), Y1, y), Y2,y)
X

Hnh 5.11. Hai cach tnh gia tr thuoc tnh.


Mo phong 5.5. Lc o dch chuyen oi cho cau truc cay cu phap.
E T {Rj := T.nptr}
R {E.nptr := R.s}
R +
T {R
1
j := mknode (+, Rj.T.nptr)}
R
1
{R.s := R
1
.s}
R
T {R
1
j := mknode (-, Rj.T.nptr)}
R
1
{R.s := R
1
.s}
R {R.s := Rj}
T (
E
) {T.nptr := E.nptr}
T id {T.nptr := mkleaf (id.id.entry)}
T num {T.nptr := mkleaf (num.num.val)}
Hnh 5.12. bieu dien toan bo cac hanh vi trong mo phong 5.5. cho cau
truc cay cu phap cua cau a 4 + c.
Thiet ke bo dch oan nhan trc
R
Tnptr
id

Tnptr
num
R
+
=
id
R

i
i
s
nptr

+
id
num 4
id
c
E
a
Hnh 5.12. Dung cac thuoc tnh ke tha e xay dng cay cu phap.
Giai thuat 5.2: xay dng trnh bien dch trc tiep cu phap oan nhan
trc.
Nhap: cho lc o dch trc tiep cu phap vi van pham c s phu hp
cho phan tch oan nhan trc.
Xuat: ma cho trnh bien dch trc tiep cu phap.
Phng phap:
1. Vi moi ky hieu khong ket thuc A, xay dng ham, thong so la
thuoc tnh ke tha cua A, tra ve gia tr cua cac thuoc tnh tong hp
cua A.
2. Ma cho ky hieu khong ket thuc A se quyet nh luat sinh nao se
c dung tren c s ky hieu nhap ang c oc.
3. Ma cho moi luat sinh se c tao ra:
i) Vi moi token X vi thuoc tnh tong hp x, cat gia tr x vao bien
X.x. Tao ra lenh goi chng trnh con e so trung token X vi ky hieu
nhap c oc.
ii) Vi B, tao ra phat bieu gan C1 = B (b1, b2, , bk), b1, b2, , bk la
cac bien cha cac thuoc tnh ke tha cua B va C la bien cha thuoc
tnh tong hp cua B.
iii) Vi moi hanh vi, hay chep ma vao cho bo phan tch, thay moi
tham chieu en cac thuoc tnh bang bien cha cac thuoc tnh o.
Th du 5.14. Van pham mo phong 5.5 la LL (1), no phu hp cho
viec phan tch t tren xuong.
function E: nut cay cu phap
function R: (i: nut cay cu phap): nut cay cu phap;
function T: nut cay cu phap;
Ket hp hai luat sinh R mo phong 5.5.
R addop
T {R1.i :=mknode (addop.lexeme, R.i, T.nptr)}
R1 {R.s := R1.s}
R {R.s := R.i}
Mo phong 5.6. Thu tuc phan tch cu phap cho cac luat sinh
R: R addop TR |
Procedur R:
begin
if lookahead = addop then begin
match (addop): T; R;
end
else begin /*khong lam g ca*/
end
Mo phong 5.7. Cay cu phap e quy i xuong
function R (i: nut cay cu phap): nut cay cu phap;
var nptr. ll, sl, s: nut cay cu phap;
addoplexeme: char;
begin if lookahead = addop then begin
/* luat sinh R addop TR*/
addoplexeme := lexval;
match (addop);
il := mknode (addoplexeme, i, nptr);
sl := R (il);
s := sl;
end
else s := i; /* luat sinh R */
return s
end;
5.6. anh gia thuoc tnh ke tha t di len
Loai bo hanh vi c nhung trong lc o dch
V du: chung ta co lc o dch
E TR
R + T {print (+)} R - T {print ()} R
T num {print (num.val)}
Tao ra lc o dch vi viec dung cac ky hieu anh dau khong ket
thuc mi N, M.
E TR
R + T MR - TNR
T num {print (num.val)}
M {print (+) }
N {print () }
Thuoc tnh ke tha tren stack cua bo phan tch
Th du 5.15. Qua trnh anh gia thuoc tnh ke tha bang bo phan tch
t di len cho cau nhap real p, q, r (H.5.13).
D T {L.in := T.type}
T int {T.type := integer}
T real {T.type := real}
L {L1.in := L.in}
L1, id {add type (id.entry, L.in)}
L id {add type (id.entry, L.in)}
D
real
L
L
L
p
,
q

in
in
in
T
r
Hnh 5.13. Tai moi nut L co L.in := T.type.
Bang 5.9. Bat c luc nao ve phai cua L c thu giam th T luon
tren ve phai o.
Nhap Trang thai Luat c ap dung
Real p, q, r
p, q, r
p, q, r
, q, r
, q, r
, q, r
, r
, r
r
-
real
T
Tp
TL
TL,
TL, q
TL
TL,
TL, r
TL
D
T real
L id
L L, id
L L, id
D TL
Bang 5.10. Gia tr cua T.type c dung v tr L.in.
anh gia cac thuoc tnh ke tha
Th du 5.16. ay la v du ve trng hp khong the oan nhan trc
v tr cua thuoc tnh trong lc o dch.
Luat sinh oan ma
D TL
T int
T real
L L, id
L id
val [ntop] := integer
val [ntop] := real
addtype (val[top], val[top 3])
addtype (val[top], val[top 1])
Luat sinh Luat ng ngha
S aAC
S aABC
C c
C.i:= A.s
C.i := A.s
C.i := g (C.i)
(5.4)
Luat sinh Luat ng ngha
S aAC
S bABMC
C c
M
C.i := A.s
M.i := A.s ; C.i := M.s
C.i := g(C.i)
M.S := M.i
S
S
A
B
b
b
C
s i
A
B M

s
i
C
i
a) b)
Hnh 5.14. Sao chep thuoc tnh thong qua ky hieu M.
a) Luat sinh cha bien oi; b) Luat sinh a c bien oi.
Ky hieu khong ket thuc N cung co the c dung e mo phong cho
luat ng ngha ma no khong phai la luat sao chep. V du ta co luat
sinh va luat ng ngha:
Luat sinh Luat ng ngha
S aAC C.i := f(A.s)
Luat sinh Luat ng ngha
S aANC
N
N.i := A.s ; C.i := N.s
N.s := f(N.i)
(5.5)
(5.6)
Giai thuat 5.3. Phan tch t di len va s bien dch vi cac thuoc tnh
ke tha.
Nhap: nh ngha thuoc tnh L vi van pham c s LL (1).
Xuat: bo phan tch cu phap tnh cac gia tr cua tat ca cac thuoc tnh
tren stack cua bo phan tch.
Phng phap: gia s moi ky hieu khong ket thuc A co mot thuoc tnh
ke tha A.i va moi ky hieu van pham X co mot thuoc tnh tong hp
X.x.
Vi moi luat sinh A X1 Xn, se co n ky hieu khong ket thuc anh
dau M1 Mn, se thay luat tren thanh luat sinh A M1X1 MnXn.
e nhan thay cac thuoc tnh co the c tnh trong qua trnh phan tch
t di len, hay xet hai trng hp.
Trng hp th nhat neu ta thu giam ve ky hieu Mj ta phai biet luat
sinh A Mj X1 MnXn ma Mj co trong o. Chung ta phai biet cac
v tr cua cac thuoc tnh ma thuoc tnh ke tha Xj.i can e tnh gia tr
cho no. A.i val[top 2j + 2], X1.i val[top 2j + 3], X1.s tai
val[top 2i + 4], X2.i val[top 2j + 5]
Trng hp th hai se xuat hien khi ta thu giam ve mot ky hieu khong
ket thuc cua van pham gia s bang luat sinh A M1X1 MnXn, va
gia s ta ch tnh A.s, con A.i a c sinh va nam tren stack v tr
tren v tr cua A. Cac thuoc tnh can thiet e tnh A.s a san sang tren
stack, a c biet, o chnh la cac v tr cua cac Xj trong qua trnh
thu giam.
Thay the thuoc tnh ke tha bang thuoc tnh tong hp
Chung ta co the tranh dung thuoc tnh ke tha bang viec thay oi van
pham c s. Trong ngon ng cua Pascal cho phep khai bao mot chuoi
cac bien va sau o la kieu d lieu cua chung. Th du: m, n: integer.
D L : T
T integer char
L L, id id
D id L
L ,id Ll:T
T integer char
CHNG 6
X LY NG NGHA
X ly ng ngha co hai cach: kiem tra tnh (static check) va kiem tra
ong (dynamic check).
Trong chng nay chung ta ch ban en kiem tra ng ngha tnh.
X ly ng ngha tnh bao gom:
1. Truyen thuoc tnh
2. Kiem tra kieu
3. Kiem tra trnh t ieu khien
4. Kiem tra tnh duy nhat
5. Kiem tra moi lien he cua ten
6. X ly cac phat bieu goto tham khao trc.
Bo phan
tch cu phap
Bo x ly
ng ngha
Sinh ma
trung
gian
chuoi
token
cay
cu phap
cay
cu phap
ma
trung gian
Hnh 6.1. V tr cua bo x ly ng ngha.
6.1. Truyen thuoc tnh
1. Ma trung gian
Ma trung gian co nhieu loai: ma cambridge, ma Balan ngc, ma bo
tam (triple code), ma bo t (quadruple code).
Bo t cho bieu thc so hoc
Dang tong quat: <toan t> (<tac to 1>, <tac to 2>, <ket qua>)
Mot cach bieu th bien tam bang danh bieu:
Ten:rong
Loai: 4
Kieu d lieu: tuy theo kieu cua cac toan hang tham gia phep
toan.
a ch : a ch tng oi. a ch nay c gan khi sinh ma.
Mot so ma bo t cho cac phep toan hoc
JMP (i, 0, 0) nhay en bo t co ch so i
JPG (i, p1, p2) nhay en bo t i neu toan hang th nhat
ln hn toan hang hai
as1 (p1, p2, 0) gan tr p1 cho p2. p2 la bien n
FLT (p1, p2, 0) oi tr cua p1 thanh so thc, gan sang p2
FIX (p1, p2, 0) oi tr cua p1 thanh so nguyen, gan sang p2
6.2. X ly ng ngha vi phan tch cu phap t di len
1. Van e truyen thuoc tnh
Th du 6.1. Chung ta co van pham G.
<assign stmt> id := <expr>
<expr> <expr> + <term> | <term>
<term> <term> * <factor> | < factor>
< factor > id | (< expr>)
<expr>
<term>
n
11
n
10
id
1
n
2 <term>
<factor>
n
5
<expr>
n
9
<factor>
n
8
<expr>
n
1
id
2
:= * (
n
4
n
3
id
3
<term>
<factor>
n
7
n
12
<assign stmt>
<term>
n
6 <factor>
+ id
4
)
Hnh 6.2. Cay cu phap A := X * (R + Q).
Bang danh bieu
- Truyen thuoc tnh
- Sinh ra bien tam khi thu giam
2. Phng phap thc hien s truyen thuoc tnh
e thc hien x ly ng ngha trong qua trnh phan tch cu phap, chung
ta se dung mot stack ac biet gom cac phan:
A: ky hieu van pham (tng trng cho mot danh hieu)
B: co tr 0 hoac 1 (ky hieu 1 la bien tam)
C: con tro ch en bang danh bieu (thc chat la v tr cua danh
bieu trong bang danh bieu
Token Tr t vng Kieu d lieu
1
2
3
4
id
id
id
id
A
X
R
Q
thc
thc
thc
thc
Th du 6.2. Cho van pham G nh th du 6.1.
<asign stmt> id := <expr>
<expr> <expr> + <term> | <term>
<term> <expr> * <factor> | <factor>
<factor> id | (<expr>)
3. Nguyen tac x ly ng ngha
Khi co mot chuoi con x = x
1
x
2
x
n
sap c thu giam ve KHKKT U
(vi luat sinh U x
1
, x
2
x
n
) th hanh vi x ly ng ngha tai nut V la
ham cua:
1) Luat sinh U x
1
x
2
x
n
2) Cac x ly ng ngha cua cac nut x
i
, tc la cac nut con cua V co the
la:
i) Tra cu bang danh bieu
ii) Tao ra bien tam
iii) Sinh ma trung gian
iv) Truyen thuoc tnh t x ve V
6.3. Kiem tra kieu d lieu
1. He thong kieu
nh ngha bieu thc kieu
1. Kieu d lieu c ban
2. Khi bieu thc kieu c at ten
3. Bo kien thiet kieu bao gom:
1) Day (array): array (I, T).
2) Tch so (product): tch so cartesian T1 x T2.
3) Ban ghi (record): kieu cua ban ghi la tch so cua bieu thc
kieu cac thanh phan cua no.
Th du:
type row = record
address : integer;
lexeme : array [1..15] of char;
end;
var table : array [1..10] of row;
Kieu row c bieu dien bang bieu thc kieu:
record ((address x integer) x (lexeme x array (1...15, char))).
4) Con tro (pointer): pointer (T).
5) Ham (function): D R.
Th du: trong Pascal co khai bao:
function f (a, b : char) : integer;
Bieu thc kieu cua f la:
char x char pointer (integer)
4. Bieu thc kieu cha cac bien ma tr cua chung la bieu thc kieu.
e bieu dien bieu thc kieu ta dung o th. (H.6.4) la cay va dag,
bieu th cho bieu thc kieu char x char pointer (integer).
He thong kieu
Hnh 6.4. Cay va dag, bieu th cho bieu thc char x char point
(interger)
char char
pointer
interger
x x
char
pointer
interger
Kiem tra kieu tnh va kiem tra kieu ong
Phat hien loi
2. ac ta bo kiem tra kieu n gian
Ngon ng n gian
Chung ta co ngon ng n gian c sinh ra t van pham G
P D ; E
D D ; D | id : T
T char | integer | array [num] of T | T
E literal | num | id |E mod E | [E] | E
Mo phong 6.1. S o bien dch dung e lu gi kieu cua cac danh bieu
P D ; E
D D ; D
D id : T {addtype (id. entry, T. type)}
T char { T. type := char}
T integer {T. type := integer}
T T1{T. type := pointer (T1. type)}
T array [num] of T1{T. type = array (num. val, T1 . type)}
Kiem tra cho bieu thc
1. Kieu token la literal va num th co kieu la char va integer.
E literal {E. type := char}
E num {E. type := integer}
2. E id {E. type := lookup (id. Entry)}
3. E E1 mod E2 {E. type := if (E1 . type = integer) and
(E2. type := integer) then integer
else type - error}
4. E E1 {E2} {E. type := if (E1 . type = integer) and
(E1. type E2 = array (s, t)) then t else type error}
5. E E1 {E. type := if E1. type = pointer (t) then t
else type error}
Kiem tra kieu d lieu cho cac phat bieu
Mot chng trnh bao gom cac khai bao, sau o la cac phat bieu, ieu
nay c bieu th bang luat sinh P D; S.
Mo phong 6.2. S o bien dch cho kieu d lieu cua cac phat bieu
P D; S
S id := E {S.type := if id. type = E. type then void
else type - error}
S if E then S1 {S.type := if E. type = boolean then
S1. type else type - error}
S while E do S1 {S.type := if E. type = boolean then
S1. type else type - error}
S S1; S2 {S.type := if (S1. type = void) and
(S2. Type = void) then void
else type - error}
Kiem tra kieu cua ham
E E (E)
e dien ta kieu cho bieu thc kieu ta dung ky hieu T va them luat
sinh
T T1 T2 {T. type := T1. type T2. type}
Quy tac kiem tra kieu cua ham la
E E1 (E2) {E. type := if (E2. type = s) and
(E1. type = s t) then t else
{type - error}
T1 x T2 x .. x Tn
Th du: root (real real) x real real
Chung ta se hieu la co khai bao:
function root (functionf (real) : real; x : real) : real
3. S tng ng cua bieu thc kieu
S tng ng cau truc cua bieu thc kieu
Giai thuat kiem tra tng ng cau truc cua cac bieu thc kieu
Mo phong 6.3. Kiem tra tng ng cau truc cua hai bieu thc
kieu s va t.
function sequiv (s, t): boolean;
begin
if s va t cung mot kieu c ban then true
else if s = array (s1, s2) and t = array (t1, t2) then
return sequiv (s1, s2) and sequiv (s2, t2)
else if s = s1 x s2 and t = t1 x 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 = s1s2 and t = t1t2 then
return sequiv (s1, t1) and sequiv (s2, t2)
else return false;
end;
Th du 6.3. Chung ta se gii thieu cach ma hoa cac bieu thc kieu cua
trnh bien dch C do D.M. Ritchie viet.
Mo phong 6.4. Cac th du ve bieu thc kieu.
char
freturns (char)
pointer (freturns (char))
array (pointer (freturns (char))
Cac kieu c ban cua ngon ng C c John (1979) ma hoa bang 4 bit
Bo kien thc kieu Ma hoa
pointer
array
freturns
01
10
11
Kieu c ban Ma hoa
boolean
char
integer
real
0000
0001
0010
0011
Mo phong 6.5. Ma hoa bieu thc kieu mo phong 6.4.
- Ten cho bieu thc kieu
Sau ay la mot oan khai bao kieu trong Pascal:
type link = cell;
var next : link;
last : link;
p : cell;
q, r : cell;
Bieu thc kieu Ma hoa
char
freturns (char)
pointer (freturns (char))
array (pointer (freturns (char))
000000 0001
000011 0001
0111 0001
100111 0001
Th du 6.4.
Bien Bieu thc kieu
next
last
p
q
r
link
link
pointer (cell)
pointer (cell)
pointer (cell)
Hnh 6.11. Bien va cac bieu thc kieu tng ng
6.4. Chuyen oi kieu
Th du ky hieu hau to cua bieu thc a + i sau khi thc hien hanh vi
chuyen oi kieu:
a i intereal real +
- Ap at toan t (Coercion)
Th du 6.5.
Mo phong 6.6. Quy tac kiem tra kieu cho viec ap at toan t e oi tr
toan hang t so nguyen sang so thc.
Luat sinh Luat ng ngha
E num
E num. num
E id
E E1 op E2
E. type := integer
E. type := real
E. type := lookup (id. entry)
E. type := if (E1. type = integer) and
(E2. type = integer) then integer
else if (E1. type = integer) and (E2. type = real)
then real
else if (E1. type = real) and (E2. type = integer)
then real
else if (E1. type = real) and (E2. type = real)
then real
else type - error
Lu y:
for | := 1 to N do x [i] := 1 (1)
for | := 1 to N do x [i] := 1.0 (2)
6.5. X ly ng ngha cho phat bieu goto tham khao trc
Th du 6.6. Gia s chung ta co oan chng trnh

goto L (10) JMP (0,0,0)

goto L (50) JMP (10,0,0)

goto L (90) JMP (50,0,0)

L: x := x + 1 (120)
Bang 6.2. Bang lu gi ten phat bieu va ch so au danh sach lien ket
Bang 6.3. ien ch so cua ten L vao cac lenh nhay
Ten p/b a ch nh ngha
L 90 0
Ten p/b a ch nh ngha
L 120 1
(10) JMP (120,0,0)
(50) JMP (120,0,0)
(90) JMP (120,0,0)
CHNG 7
QUAN LY BO NH TRONG THI GIAN THC THI
7.1. Cac phan t yeu cau cap phat bo nh trong thi gian thc thi
Tat ca cac phan t can c cap phat bo nh, bao gom:
1. oan ma cua chng trnh c bien dch.
2. Cac chng trnh he thong can thiet trong thi gian thc thi.
3. Cau truc d lieu va hang do ngi s dung nh ngha.
4. Cac iem tr ve cua chng trnh con.
5. Moi trng tham khao.
6. Cac v tr nh tam cho viec tnh tr bieu thc.
7. Nhap, xuat bo em.
8. Cac bang, trang thai thong tin.
Ngoai d lieu va cac chng trnh c bien dch, cac tac vu cung can
bo nh:
1) Goi chng trnh con va cac tac vu tr ve.
2) Khi tao va huy bo cau truc d lieu.
3) Tac vu them vao hoac loai bo cac phan t.
7.2. Cac van e ve ngon ng nguon
Chng trnh con
Mo phong 7.1. Chng trnh Pascal oc va sap xep th t cac
so nguyen
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
programsort (input, output);
var a: array [010];
procedure readarray;
var i: integer;
begin
for i := 1 to 9 do read (a [1]);
end;
function partition (y, z: integer): integer;
var i, j, x, v: integer;
begin
end;
procedure quicksort (m, n: integer);
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
var i: integer;
begin
if (n > m) then begin
i := partition (m, n);
quicksort (m, i 1);
quicksort (i + 1, n);
end;
end;
begin
a[0] := -9999; a[10] := 9999;
readarray;
quicksort (1, 9);
end
Cay hoat ong (activation tree)
Cay hoat ong dung e mieu ta con ng ma s ieu khien i vao
va i ra khoi cac hoat ong cua chng trnh. Mot so tnh chat cua
cay hoat ong:
1. Moi nut cua cay tng trng cho mot hoat ong cua chng trnh
con.
2. Nut goc (root) tng trng cho hoat ong cua chng trnh chnh.
3. Nut a la cha cua nut b neu va ch neu dong ieu khien i t s hoat
ong a sang s hoat ong b.
4. Nut a ben trai nut b neu va ch neu thi gian song cua a xuat
hien trc thi gian song cua b.
Mo phong 7.2. Cac phat bieu in cua chng trnh mo phong 7.1
mieu ta s thc thi cua no.
S thc thi chng trnh bat au
vao readarray
ra khoi readarra
vao quicksort (1,9)
vao partition (1,9)
ra khoi partition (1,9)
vao quicksort (1,3)

ra khoi quicksort (1,3)


vao quicksort (5,9)

ra khoi quicksort (5,9)


ra khoi quicksort (1,9)
S thc thi ket thuc
Th du 6.1.
s: viet tat cho sort p: viet tat cho partition
r: viet tat cho readarray q: viet tat cho quicksort
S
q(1,9)
q(1,3)
r
q(5, 9)
p(1,9) q(7,9)
p(5,9) q(5,5)
p(7,9) q(7,7)
q(2,3)
p(1,3)
q(1,0)
q(3,3) p(2,3) q(2,1)
Hnh 7.1. Cay hoat ong c xay dng t chuoi xuat mo phong 7.2.
Stack ieu khien (Control stack)
S
r
q(1,9)
p(1,9)
q(1,3)
p(1,3)
q(2.3)
q(1,0)
Hnh 7.2. Stack ieu khien bao gom cac nut tren con ng t s
en q (2,3) va tr ve
Tam vc cua s khai bao
Khai bao co the tng minh, Var I: integer nhng co the la khai bao
ngam nh Fortran, khi ta dung ten bien i ma khong khai bao, Fortran
mac nhien hieu i la bien nguyen. Tam anh hng cua cac khai bao
c quy tac tam vc quyet nh.
S rang buoc cua ten
Moi trng la ten cua ham, anh xa ten en v tr nh va trang thai la
ham anh xa t v tr nh en tr ma no lu gi.
ten v tr nh tr
Hnh 7.3. Phep chieu hai mc t ten en tr
S rang buoc chnh la ban sao ong cua khai bao, trong thi gian thc
thi.
Bang 7.1. Cac khai niem tnh va ong cua chng trnh con
7.3. To chc ky c
S phan chia bo nh trong thi gian thc thi
Trong thi gian dch, trnh bien dch a tnh toan kch thc bo nh
danh cho chng trnh oi tng, no bao gom:
1. Ma cua chng trnh oi tng.
2. Cac oi tng d lieu.
3. Mot phan trong stack ieu khien (stack trung tam) lu gi ban ghi
hoat ong cua chng trnh con.
Khai niem tnh Ban sao ong
nh ngha chng trnh con S hoat ong cua chng trnh con
Khai bao ten S rang buoc ten vi v tr nh
Tam vc y ngha cua khai bao Thi gian song cua s rang buoc ten
Mo phong 7.2. S phan chia bo nh trong thi gian thc thi cho vung
ma cua chng trnh va vung d lieu.
Khong phai tat ca cac ngon ng lap trnh eu dung stack ieu khien
va heap, nhng Pascal va C th dung ca hai.
Ban ghi hoat ong (Activation record)
1. Vung gia tr kh hoi
2. Vung thong so
3. ng lien ket ong
4. ng lien ket tnh
5. Cac trang thai may
6. Vung d lieu cuc bo
7. Vung nh tam
Ma cua chng trnh oi tng
D lieu tnh
Stack ieu khien
heap
Mo phong 7.3. Dang tong quat cua ban ghi hoat ong
7.4. Chien thuat cap phat bo nh
1. Cap phat tnh
2. Quan tr bo nh theo c che stack
3. C che heap
Gia tr kh hoi
Thong so thc
ng lien ket ong
ng lien ket tnh
Cac trang thai may
D lieu cuc bo
Vung nh tam
1. Cap phat tnh (Static allocation)
C che nay se dan en mot so han che sau ay:
1) Kch thc va v tr cua oi tng d lieu phai c xac
nh ngay trong thi gian bien dch.
2) Khong cho phep goi e quy.
3) Khong cho phep cap phat ong cac oi tng d lieu.
Mo phong 7.4. Chng trnh trong ngon ng Fortran.
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
PROGRAM CNSUME
CHARACTER * 50 BUF
INTEGER NEXT
CHARACTER C, PRDUCE
DATA NEXT /1/, BUF //
C = PRDUCE ()
BUF (NEXT: NEXT) = C
NEXT = NEXT + 1
IF (C. NE. ) GOTO 6
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
WRITE (*, (A)) BUF
END
CHARACTER FUNCTION PRDUCE ()
CHARACTER * 80 BUFFER
INTEGER NEXT
SAVE BUFFER, NEXT
DATA NEXT /81/
IF (NEXT. GT. 80) THEN
READ (*, (A)) BUFFER
NEXT = 1
END IF
PRDUCE = BUFFER (NEXT: NEXT)
NEXT = NEXT + 1
END
Ma cho CNSUME
Ma cho PRDUCE
CHARACTER * 50 BUF
INTEGER NEXT
CHARACTER C
CHARACTER * 80
BUFFER INTEGER
NEXT
ma cua chng trnh
Ban ghi hoat ong CNSUME
D
lieu
tnh
Ban ghi hoat ong PRDUCE
Hnh 7.4. V tr nh tnh cho cac bien cuc bo cho chng trnh
Fortran 77
Th du 7.2. Chng trnh (mo phong 7.4) se lam viec vi cac gia tr
cuc bo c lu lai qua cac lan hoat ong. Cac kyhieu xuat ra trong
chng trnh chnh CNSUME, c lay t ban ghi hoat ong cua
PRDUCE la hello, do CNSUME goi PRDUCE 6 lan, nh (H.7.5).
2. Cap phat theo c che stack
CNSUME
PRDUCE
h
PRDUCE
e
PRDUCE
l
PRDUCE
l
PRDUCE
o
PRDUCE
Hnh 7.5. Cac ky hieu c tra ve qua cac lan hoat ong cua PRDUCE
cay hoat ong stack ieu khien
s
a: array
s
a: array
r
i: integer
s
a: array
q(1,9)
i: integer
s
s
r
s
q(1,9)
r
s
a: array
q(1,9)
i: integer
p(1,9)
i, j, x, v: integer
s
a: array
q(1,9)
i: integer
q(1,3)
i: integer
q(1,0)
i: integer
s
r
q(1,9)
p(1,9)
s
r
q(1,9)
p(1,9)
q(1,3)
p(1,3)
q(1,0)
s
a: array
q(1,9)
i: integer
q(1,3)
i: integer
s
q(1,9)
p(1,9)
q(1,3)
q(1,0) p(1,3)
Hnh 7.6. Cac ban ghi hoat ong c cap phat va loai bo khoi stack
ieu khien.
S goi chng trnh con
1. Chng trnh goi tnh toan cac thong so thc va cat vao vung thong
so cua ban ghi hoat ong cua chng trnh b goi.
2. Chng trnh b goi lu gi a ch kh hoi vao vung tr tra ve va tr
top-sp vao vung lien ket, tang top-sp len mot khoang v tr nh, chnh
la kch thc cua vung bien tam va bien cuc bo cua no vi kch thc
vung thong so, tr tr ve, ng lien ket va cac trang thai may
cua chng trnh b goi.
3. Chng trnh b goi se lu bo nh gia tr, cac thanh ghi, ng lien
ket va trang thai khac.
4. Chng trnh b goi khi ong cac gia tr cuc bo cua no va bat au
thc th.
..
Thong so va tr tr ve
ng lien ket va trang
thai cua may
Bien tam va bien cuc bo
Thong so va tr tr ve
ng lien ket va
trang thai cua may
Bien tam va bien cuc bo
ng
lien
ket
Ban hoat ong cua
chng trnh goi
Nhng thong tin
chng trnh goi co
trach nhiem cung cap
Ban hoat ong
cua chng trnh
b goi
top-sp
Cac thong tin
chng trnh b
goi co trach
nhiem cung cap
Hnh 7.7. S phan chia cong viec gia chng trnh goi va b goi
Chuoi tr ve co the la cac cong viec sau
1. Chng trnh b goi gi cac gia tr tr ve vao ban ghi hoat ong cua
chng trnh con.
2. Chng trnh b goi xac lap lai tr: top-sp cho chng trnh goi, tr
cac thanh ghi, a ch kh hoi.
3. Chng trnh goi se s dung cac gia tr trong vung bien tam, gia tr
tr ve e tnh toan cac bieu thc sau nay khi no thc thi tiep tuc.
D lieu co kch thc thay oi
mot so ngon ng nh C, Algol, day c phep co kch thc thay
oi trong thi gian thc thi.
Th du 7.4. Cho khai bao day trong Algol nh sau:
DIMENSION A [L1 : U1, L2: U2, Ln: Un]
di la kch thc chieu th I, c tnh: di = Ui Li + 1
Vung thong tin cho day A la:
L
1
U
1
d
1
L
2
U
2
d
2
L
n
U
n
d
n
n
Vung p se chc a ch bat
au cua v tr nh day A
Hnh 7.8. Vung thong tin cua day trong ban ghi hoat ong
Th du 7.5. DIMENSION p[1: n, x: y], q[1: m];
Hnh 7.9. Ban ghi hoat ong cua chng trnh con A, co cac bien day
p, q vi kch thc thay oi
Thong so va tr tr ve
Lien ket va cac trang thai may
Bien tam va bien cuc bo
Thong so va tr tr ve
Lien ket va cac trang thai may
Bien tam va bien cuc bo
1 n d
1
x y d
2
2
1 m d
1
1
p
q
Vung bien
tam va cac
bien cuc bo
cua ban ghi
hoat ong
cua A
Ban ghi hoat ong cua
chng trnh goi chng
trnh con A
Phan tnh
cua ban
ghi hoat
ong cua
chng
trnh con A
Ban ghi hoat
ong cua
chng trnh
con A
Phan bien
thien cua A
Thamchieu treo (Dangling reference)
Mo phong 7.5. oan chng trnh Pascal gay ra tham chieu treo.
var p, q: ^ integer;
begin
new(p);
q: = p;
dispose (p)

end;
p
p
q
p
q
oi tng c cap phat
new (p)
q = p
dispose (p)
oi tng d lieu b loai bo
Hnh 7.10. Tham chieu treo q xuat hien do lenh dispose (p).
3. Cap phat theo c che heap
1. Tr cua cac bien cuc bo c lu gi ngay ca khi s hoat ong cua
chng trnh con tng ng khong con na.
2. S hoat ong cua chng trnh b goi song sau ca chng trnh goi.
Bang 7.2. Cac ban ghi hoat ong cua heap va stack cung s so sanh
vi cay hoat ong.
Cac ban ghi hoat
ong tren stack
V tr tren cay
hoat ong
Cac ban ghi hoat
ong trong heap
Ghi chu
Theo c che
heap r a het
thc thi nhng
ban ghi hoat
ong cua no
van con ton tai
s
lien ket ong
q(1,9)
lien ket ong
s
lien ket ong
r
lien ket ong
q(1,9)
lien ket ong
S
r
q(1,9)
Cap phat v tr nh cho cac khoi co kch thc co nh
Cap phat v tr nh cho cac khoi co kch thc thay oi
au danh sach
1 2 3 4 5 6
au danh sach
a)
b)
Hnh 7.11. Cac khoi b loai bo se c them vao danh sach cua cac
khoi cha s dung.
2 3 4 5 6
Hnh 7.12. Cac khoi ang c s dung va ang trong
Loai bo ngam v tr nh
Mo phong 7.6. Dang cua mot khoi
1. em cac tham khao
2. Ky thuat anh dau
kch thc khoi
so lng con tro tham khao ti
anh dau
cac con tro ch en cac khoi
thong tin cua ngi s dung
1 1
Hnh 7.13. Hai khoi nay la rac mac du van co so em tham khao la 1
7.5. Truy xuat bien khong cuc bo
Mo phong 7.7. Chng trnh dung e minh hoa viec truy xuat bien
khong cuc bo.
program MAIN
var x: integer;
procedure sub1;
var x: real;
begin
read (x)
sub2;
end;
procedure sub2;
(Khong co khai bao x)

begin
write (x);
end
begin {main}
sub1;
end.

Cau truc khoi


Quan tr bo nh va viec cap phat v tr nh cho cac khoi cua Algol
Moi ban ghi hoat ong gom cac thanh phan chnh sau ay:
1. Day display cua chng trnh con. Neu chng trnh cap i th
display chiem i + 1 o nh.
2. V tr nh cha tr stack top cua chng trnh con.
3. Cac thong tin ve a ch kh hoi, lien ket tnh va lien ket ong,
stack_top cua chng trnh con goi.
4. Cac v tr nh danh cho cac thong so cua chng trnh con. Cac
phan 1, 2, 3, 4 tao thanh phan c ban cua chng trnh con.
5. Moi chng trnh con co the co nhieu khoi, moi khoi c cap phat
mot khoang ky c e cha cac thanh phan sau:
1) V tr nh cha tr stack top cua khoi.
2) V tr nh danh cho cac bien cuc bo la bien n.
3) Cac thong tin ve day (neu khoi co khai bao day).
4) V tr nh cha cac bien tam.
Th du 7.9. Cho chng trnh con trong Algol.
procedure A (x, y);
integer x, y;
L
1
: begin real z; array B [x: y];
L
2
: begin real: D, E;
..
..
end;
L
3
: begin array a[a: x];
L
4
: begin real E;
..
.
end;
end;
end;
B
1
B
2
B
3
B
4
B

Display cua A
Stack-top cua A
Cac thong so RA, SL, DL
Thong so X, Y
Tr stack-top cua B
1
Z
Vung thong tin cua day B
Stack-top cua B
2
d, E
B
a
Phan c ban cua A
V tr nh cua khoi B
1
Stack-top cua B
3
Vung thong tin cua
day a
Stack-top cua B
4
E
Phan co
nh cua
chng
trnh con
A
Hnh 7.16. Ban ghi hoat ong cua chng trnh con A co cha cac khoi
Cac hanh vi tham nhap vao mot khoi va ra khoi khoi
- Hanh vi tham nhap vao mot khoi
- Hanh vi ra khoi khoi
Tam vc tnh vi cac chng trnh con khong long nhau
Tam vc tnh vi cac chng trnh con long nhau
Bang tam vc (display)
e truy xuat bien khong cuc bo, ngi ta s dung bang tam vc. Tuy
nhien, lien ket tnh van ton tai trong cac ban ghi hoat ong, dung e
phuc hoi hnh anh bang tam vc khi chng trnh con cap i goi chng
trnh con cap j, vi i > j va sau khi chng trnh con cap j hoan tat s
thc thi.
Th du 7.12. Cho chng trnh sau:
Mo phong 7.10. Chng trnh Pascal co cau truc khoi
program M;
:
procedure P;
:
procedure Q;
begin
: P ;
end;
procedure R;
begin
Q;
end;
begin;
R;
end;
begin
P;
end;
Mc tam vc cua cac chng trnh con la:
M
P
Q
R
va M goi P goi R goi Q goi P
Cac bc thc thi Display Stack ieu khien
1 M 0 M M
2 M goi P 0 M M
1 P P
3 P goi R 0 M M
1 P P
2 R R
Q
5 Q goi P 0 M M
1 P

P
R
Q
P

4 R goi Q 0 M M
1 P P
2 Q R
SL
6 0 M M
1 P P
Q R
Q
P

hoan tat thc


thi tra s ieu
khien cho Q
Hnh 7.20. Cac bc goi chng trnh con cung vi s thay oi noi
dung cua display va stack ieu khien
Tam vc ong
7.6. Truyen thong so
1. Thong so nhap xuat
- Truyen bang tham khao
- Truyen bang tr
2. Thong so ch nhap
- Truyen bang tr
- Truyen bang tr hang
3. Thong so ch xuat
- Truyen thong so bang ten
Th du 7.6. Cho chng trnh
type VECT = array [1 .. 3] of integer;
procedure SUB2 (var I, J: integer);
begin
I := I + 1;
J := J + 1; write (I, J);
end;
procedure SUB1;
var A: VECT;
K :integer;
begin A[1] := 7; A[2] := 8; A[3] := 9;
K :=2: SUB2 (K, A[K]);
for K := 1 to 3 do write (A [K]);
end;
Stack trung
tam
stack trung
tam
sub 1 sub 1
lien ket lien ket
A[1] A[1]
A[2] A[2]
A[3] A[3]
K K
sub 2 sub 2
lien ket lien ket
I I
J J
a) b)
Thunk tnh
toan A[k]
Thunk tnh
toan K
Hnh 7.23. Phng phap truyen thong so bang ten va bang tham khao
Chng trnh con ong vai tro thong so
Th du 7.7. Cho chng trnh
program MAIN;
var X : real;
procedure SUB2 (X, Y: real; function F (u: real): real);
var z: real;
begin
z := abs (Y - X);
z := (F (X) + F (Y)) * Z/2;
write (Z);
end;
procedure SUB1;
var Y :real;
function FUNC: (V: real): real;
begin
FUNC := X + V + Y
end;
begin
Y := 1
SUB2 (0, 1, FUNC)
end;
begin
X := 3;
SUB1;
end.
Nhn vao chng trnh tren chung ta thay trnh t thc thi cua chng
trnh nh sau: MAIN goi SUB1 goi SUB2 (0, 1, FUNC) goi FUNC
Bang 7.3. Stack trung tam khi mot chng trnh con goi chng trnh
con khac thong qua thong so hnh thc
Bc 1 S thc thi Stack trung tam
1 2 3
1
2
MAIN
MAIN goi SUB1
lien ket tnh MAIN
X = 3
SUB2
SUB1
lien ket tnh MAIN
X = 3
SUB2
SUB1
3
SUB1 goi SUB2
lien ket tnh
Y = 1 SUB1
FUNC
lien ket tnh MAIN
X = 1
SUB2
SUB1
SUB1
lien ket tnh
Y = 1
FUNC
lien ket tnh SUB2
X
Y
F a ch phan ma cua FUNC
4
SUB2 goi FUNC
z
lien ket tnh MAIN
X = 1
SUB2
SUB1
SUB1
lien ket tnh
Y
FUNC
SUB2
lien ket tnh
X
Y
F a ch phan ma cua FUNC
Z
FUNC
lien ket tnh
V
CHNG 8
TO CHC BANG DANH BIEU
8.1. Gii thieu
Co bon phng phap truy xuat tren bang danh bieu:
1. Tm kiem tuyen tnh (linear search)
2. Tm kiem nh phan (binary search)
3. Tm kiem tren cay (tree search)
4. Ma hoa bam (hash coding)
8.2. Cac tac vu tren bang danh bieu
Bang 8.1. Cac tac vu tren bang danh bieu
Ten chng trnh
con
Cach goi Hanh vi thc thi
Enter Enter (id) Khi gap mot danh bieu mi c khai
bao, thu tuc nay se kiem tra xem danh
bieu mi o co trung vi ten nao trong
cung mot tam vc? Neu khong, thu tuc
enter se a danh bieu mi vao bang
danh bieu. Ngc lai enter se thong bao
loi ve viec khai bao mot danh bieu nhieu
lan trong cung mot tam vc.
loc (ham) n := loc (id) Khi can truy xuat mot danh bieu, loc se
tm tren bang danh bieu t phan t mi
nhat cua tam vc mi nhat en phan t
cu nhat cua tam vc cu nhat e tm v tr
cua id va tra ve thong qua ten loc cua
ham.
Scopeentry Scopeentry Khi trnh bien dch i vao mot tam vc
mi, scopeentry se anh dau tren Stack
(bang danh bieu) mot tam vc mi.
Scopeexit Scopeexit Khi trnh bien dch i het mot tam vc
scopeenxit se thai hoi nhng ten bien
khong con co y ngha va tai lap mot tam
vc ngoai cung gan nhat.
8.3. Bang danh bieu tuyen tnh (linear symbol table)
Th du 8.1. Cho oan chng trnh trong ngon ng Algol.
begin real A, B;
begin real C, A;
. . . . . . .
end;
end;
5
4 A
3 C
2 B
1 A
I = 5
Hnh 8.1. Bang danh bieu tuyen tnh cua th du 8.1
Cac tac vu tren bang danh bieu tuyen tnh c trnh bay nh sau:
Giai thuat:
const tab lim = ..;
btablim = ..;
3
2 3
1 1
B = 3
TAB BTAB
type tabinden = 1 .. tablim;
item = record
key: alfa; /* alfa la kieu chuoi cac ky t */
end;
var btab: array [1 .. btablim] of integer;
tab: array [1 .. Tablim] of item;
b: 1 tablim;
t: tabindex;
procedure enter (id: alfa)
var sb: tabindex;
begin sb := btab [b 1];
Tm kiem tren bang TAB t v tr sb en v tr t 1, xem co phan t
nao mang key bang id khong? Neu co, thu tuc error se thong bao loi 1
la loi co hai danh bieu cung ten trong cung tam vc. Ngc lai, if t =
tablim then error (12)
else begin tab [t] key := id;
t := t + 1
end;
end;
function loc (id: alfa): tabindex;
begin
Tm kiem t v tr au TAB en v tr t 1, xem co phan t nao co key
la id? Neu khong co th error se thong bao loi 13. Ngc lai neu tm
thay danh bieu co khoa id tai v tr index th thc thi lenh loc := index;
end;
Procedure scopeentry;
begin if b = btablim then error (14)
else begin btab [b] := t; b := b + 1
end;
end;
Procedure Scope exit;
begin b := b 1; t := btab [b]
end;
8.4. Bang danh bieu bam(hash symbol table)
Mot danh bieu ch so k
H
Chung ta lay lai th du 8.1 e minh hoa viec xay dng bang danh bieu
theo phng phap bam (H.8.2). Gia s A bien oi H co k = 3, B co k
= 6 va C co k = 5.
8 0
7 0
6 2 5
5 3 4 A 1
4 0 3 C 0 3
3 4 2 B 0 2 3
2 0 1 A 0 1 1
1 0 TAB BTAB
HASH
B = 3 B = 3
T = 5
A k = 3
H
A k = 6
H
H
A k = 5
Hnh 8.2. Bang danh bieu bam
Cac tac vu lam viec tren bang danh bieu bam c trnh bay bang cac
chng trnh con sau:
const hashsize = ;
tabsize = ;
btabsize = ;
type tabindex = 1 .. tabsize;
hashindex = 1 .. hashsize;
iterm = record
key: id;
ptr: tabindex;
end;
var tab: array [1 .. tablim] of item
hash: array [hashindex] of tabindex;
btab: array [i .. btabsize] of tabindex;
t: tabindex; b: 1 .. Btabsize;
function H (id: alfa): hashindex;
begin
end;
procedure enter (id: alfa);
var sb: tabindex; k: hashindex; ind: tabindex;
begin
k := H(id);
ind := HASH [k];
sb := btab [b 1];
if HASH [k] < > 0 then
while ind > = sb do
if id = tab [ind]. key then error (11)
/* trung ten danh bieu trong cung tam vc */
else ind := tab [ind]. Ptr; {khong trung ten}
if t = tabsize then error (12)
else begin
tab [t]. Key := id;
tab [t]. Ptr := HASH [k];
HASH [k] := t;
t := t + 1;
end;
end;
function loc (id: alfa): tabindex;
var q: boolean; ind: tabindex;
begin ind := HASH [H(id)];
q := false;
while (ind < > 0) and (not (q)) do
begin q := id = tab [ind]. Key;
if not (q) then ind := tab [ind]. Ptr
end;
if q then loc := ind else error (13);
/* cha co danh bieu trong bang danh bieu */
end;
procedure Scopeentry;
begin if b = tabsize then error (14)
else begin btab [b] := t;
b := b + 1;
end;
procedure Scopeexit;
var ind: tabindex;
k: hashindex;
begin
ind := t; t := btab [b 1];
b := b 1;
while ind > t do
begin ind := ind 1;
k := H (tab [ind]. Key);
HASH [k] := tab [HASH [k]]. Ptr;
end;
end;
8.5. Ham bam (hashing function)
8.6. Lu gi thong tin cua tam vc y ngha
nil header sort
a
x
readarray bang readarray
exchange bang exchange
header
quicksort
exchange
header k
v
header readarray partition
i
partition header
i
Muon thc hien viec tao bang danh bieu cho chng trnh con b goi,
ta phai tao cac ham nh sau:
1. mktable (x)
2. enter (table, name, type, offset)
3. addwidth (table, width)
4. enterproc (table, name, newtable)
CHNG 9
SINH MA OI TNG
Hnh 9.1. V tr cua bo sinh ma oi tng
9.1. Cac van e thiet ke bo sinh ma
au vao cua bo sinh ma
Chng trnh ch
Bien dch
pha trc
Bo toi u
ma
Bo sinh ma
oi tng
Bang danh bieu
Chng
trnh nguon
Ma
trung
gian
Ma Ma
trung
gian
Chng
trnh dch
S la chon ch th
Gia s oi vi phat bieu ba a ch co dang x := y + z vi x, y, z tng
trng cho cac v tr nh. Chung ta co the dch sang chuoi ma oi
tng:
MOV y, R
o
/* cat y vao thanh ghi R
o
*/
ADD z, R
o
/* cong z vao noi dung R
o
, ket qua cha trong R
o
*/
MOV R
o
, x /* cat noi dung R
o
vao x */
Tuy nhien viec sinh ma cho chuoi cac phat bieu se dan en s d tha
ma. Nh th du sau:
a := b + c; d := a + e
Chung ta chuyen sang ma oi tng:
(1) MOV b, R
0
(2) ADD c. R
0
(3) MOV R
0
, a
(4) MOV a, R
0
(5) ADD e, R
0
(6) MOV R
0
, d
Ch th th t la tha.
Chat lng ma c tao ra, c xac nh bang toc o cua ma va kch
thc tap ma. Th du:
MOV a, R
0
ADD # 1, R
0
MOV R
0
, a
Cap phat thanh ghi
S la chon cho viec anh gia th t
9.2. May ch
Chung ta se dung may ch nh la may thanh ghi (register machine).
May ch co moi t gom bon byte va co n thanh ghi: R
0
, R
1
R
n-1
, co
ch th hai a ch, vi dang tong quat: op source, destination
Th du mot so ch th:
MOV: chuyen tr cua source en destination
ADD: cong noi dung source va destination
SUB: tr noi dung source cho destination
Mode a ch
Th du:
Mode Dang a ch Gia
1
2
3
Absolute
Register
indexed
M
R
c (R)
M
R
c + contents (R)
1
0
1
4
5
6
indirect
register
inderect
indexed
literal
*R
*c (R)
# C
contents (R)
contents (c + contents (R))
hang C
0
1
1
Gia ch th (instruction cost)
Gia ch th c tnh bang mot cong gia ket hp trong bang mode a
ch nguon va ch tren.
Qua cac th du tren chung ta thay muon sinh ma tot th lam sao phai
ha gia cua cac ch th.
Sinh ma e quan ly cac ban ghi hoat ong trong thi gian thc thi.
Cac ma quan ly nay phai ap ng c hai ky thuat quan ly bo nh
tnh va cap phat bo nh theo c che stack.
Viec cap phat va giai toa v tr nh cho ban ghi hoat ong la mot phan
trong chuoi hanh vi goi va tr ve cua chng trnh con.
1. call 2. return
3. halt 4. action /* tng trng cho cac phat bieu khac
*/
Th du:
0: a ch kh hoi
0:
a ch kh hoi
8: arr 4: buf
56 i
60 j 84: n
Bang ma Bang ghi hoat
ong cho c
Bang ghi hoat
ong cho p
/*ma cho p*/
action 3
return
/*ma cho c*/
action 1
call p
action 2
halt
Cap phat tnh
Phat bieu call c hien thc bang hai ma oi tng MOV va GOTO.
MOV # here + 20, callee.static - area
GOTO callee. code rea
Th du 9.1.
Mo phong 9.1. Ma oi tng cho chng trnh con c va p
100: action
120: MOV 140, 364
132: GOTO 200
140: action
2
160: halt

/* ma cho c */
/* cat a ch kh hoi 140 */
/* goi p */
/* ma cho p */
200: action
3
220: GOTO * 364
300:
304:
364:
368:
/* tr ve a ch c cat tai v tr 364 */
/* 300 - 364 cat ban ghi hoat ong cua c */
/* cha a ch kh hoi */
/* d lieu cuc bo cua c */
/* 364 - 451 cha ban ghi hoat ong cua p*/
/* cha a ch kh hoi */
/* d lieu cuc bo cua p */
Cap phat theo c che stack
Ma cho chng trnh au tien la ma khi ong stack, cat a ch bat au
stack vao sp bang ch th MOV # stackstart, SP. Nh vay ma oi tng
cho chng trnh con au tien bao gom:
MOV # stackstart, SP /* khi ong stack */
oan ma cho chng trnh con
HALT /* ket thc s thc thi */
ADD # caller.recordsize, SP
MOV # here + 16, * SP /* lu a ch kh hoi */
GOTO callee.code-area
Chuoi tr ve gom hai ch th:
GOTO *0 (SP) /* tr ve chng trnh goi */
SUB # callee.recordsize, SP
Ch th GOTO *0 (SP)
Th du 9.2
/* ma cho s */
action
1
callq
action
2
halt
/* ma cho p */
action
3
return
/* ma cho q */
action
4
callp
action
5
callq
action
6
callq
return
Hnh 9.3. Ma trung gian cua chng trnh mo phong 9.1
Mo phong 9.2. Ma oi tng cho ma trung gian (H.9.3)
/* ma cho s */
100: MOV # 600, SP /* khi ong stack */
108: action
1
128: ADD # ssize, SP /* chuoi goi bat au */
136: MOV 152, * SP /* cat a ch kh hoi */
144: GOTO 300 /* goi q */
152: SUB # ssize, SP /* giam tr cua SP mot khoang ssize */
160: action
2
180: HALT
/* ma cho p */
200: action
3
220: GOTO * 0(SP) /* tr ve chng trnh goi */
/* ma cho q */
300: action
4
/* nhay co ieu kien ve 456 */
320: ADD # qsize, SP
328: MOV 344, * SP /* cat a ch kh hoi */
336: GOTO 200 /* goi P */
344: SUB # qsize, SP
352: action
5
372: ADD # qsize, SP
380: MOV 396, * SP /* cat a ch kh hoi */
388: GOTO 300 /* goi q */
396: SUB # qsize, SP
304: action
6
424: ADD # qsize, SP
432: MOV 440, * SP /* cat a ch kh hoi */
440: GOTO 300 /* goi q */
448: SUB # qsize, SP
456: GOTO *0 (SP) /* tr ve chng trnh goi */

600: /* a ch bat au cua stack trung tam */


Xac nh a ch cho ten danh bieu trong thi gian thc thi
Neu chung ta dung c che cap phat tnh, vung d lieu c cap phat
tai a ch static, co phat bieu x := 0. a ch tng oi cua x la 12.
Vay a ch cua x trong bo nh la static + 12. Neu static la 100. a
ch cua x trong bo nh la 112. Phat bieu x := 0 c dch sang ma oi
tng vi a ch tuyet oi la: MOV # 0, 112.
Gia s x la bien cuc bo cua chng trnh con hien hanh, thanh ghi R3
lu gi a ch bat au cua ban ghi hoat ong th chung ta se dch phat
bieu x := 0 sang ma trung gian.
t
1
:= 12 + R
3
* t
1
:= 0
Chuyen sang ma oi tng:
MOV # 0, 12 (R
3
)
Gia tr trong R
3
ch co the c xac nh trong thi gian thc thi.
9.3. Khoi c ban va lu o
Khoi c ban (basic block)
t
1
:= a * a;
t
2
:= a * b;
t
3
:= 2 * t2
t
4
:= t1 + t2
t
5
:= b * b;
t
6
:= t4 + t5
Giai thuat 9.1. Phan chia cac khoi c ban
Nhap: cac phat bieu ba a ch
Xuat: danh sach cac khoi c ban vi tng chuoi cac phat bieu ba a
ch cho tng khoi.
Phng phap:
1. Xac nh tap cac phat bieu dan au cua cac khoi chung ta dung cac
quy tac sau ay:
i) Phat bieu au tien la phat bieu dan au (leader) (t ay ta se
dung t leader thay cho cum t tieng Viet phat bieu dan au).
ii) Bat ky phat bieu nao la ch nhay en cua phat bieu GOTO
co ieu kien hoac khong ieu kien eu la leader.
iii) Bat ky phat bieu nao i ngay sau phat bieu goto hoac khong
ieu kien co ieu kien eu la leader.
2. Vi moi leader th khoi c ban gom co no va tat ca cac phat bieu
nhng khong bao gom mot leader nao khac hay la lenh ket thuc
chng trnh.
Th du 9.3.
Mo phong 9.3. Chng trnh tch tch vect vo hng
begin
prod := 0
i := 1
repeat
prod := prod + a[1] * b[1];
i := i + 1
until i > 20
end
Mo phong 9.4. Ma trung gian e tnh tch vect vo hng
(1) prod :=0
(2) i := 1
(3) t
1
:= 4 * i
(4) t
2
:= a[t
1
] /* tnh a[i]
(5) t
3
:= 4 * I
(6) t
4
:= b[t
3
]
(7) t
5
:= t
2
* t
4
(8) t
6
:= prod + t
5
(9) prod := t
6
(10) t
7
:= i + 1
(11) i := t
7
(12) if i <= 20 goto (3)
S luan chuyen tren cac khoi
Lu chuyen bao ton cau truc
1. Loai bo cac bieu thc con chung.
Th du: a := b + c; b := a d; c := b + c; d := a d
Nh vay ta chuyen bon phat bieu tren thanh:
a := b + c; b := a d; c := b + c; d := b
2. Loai bo ma chet
Gia s x la chet, neu xuat hien phat bieu x := y + z trong khoi c ban
th se b loai ma khong lam thay oi gia tr cua khoi.
3. at ten lai bien tam
t := b + c vi t la bien tam.
u := b + c ma u la bien tam mi ta cung phai thay t bang u bat
c cho nao xuat hien t.
4. Hoan oi phat bieu
t
1
:= b + c
t
2
:= x + y
Co the hoan oi th t hai phat bieu neu x va y eu khong phai t
1
ong thi b va c eu khong phai la t
2
.
Chuyen oi ai so
x := x + 0 hoac x := x * 1, x := y ** 2, x := y * y
Lu o (flow graph)
o th trc tiep c goi la lu o. Cac nut cua lu o la khoi c ban.
Mot nut c goi la khoi iem, neu no co cha phat bieu au tien cua
chng trnh.
prod := 0
i := 1
t
1
:= 4 * I
t
2
:= a [t
1
]
t
3
:= 4 * i
t
4
:= b [t
3
]
t
5
:= t
2
* t
4
t
6
:= prod + t
5
prod := t
6
t
7
:= i + 1
I := t
7
if I < = 20 goto B
2
B
1
B
2
Hnh 9.4. Lu o cua
chng trnh
Vong lap
9.4. Bo sinh ma n gian
Bo sinh ma nay se sinh ma oi tng cho cac ma trung gian ba a
ch.
ac ta thanh ghi va a ch
1. Bo ac ta thanh ghi se lu gi nhng g ton tai trong tng thanh ghi.
2. Bo ac ta a ch se lu gi cac v tr nh cha tr cua cac danh
bieu.
Giai thuat sinh ma oi tng
Nhan vao chuoi ma trung gian ba a ch cua mot khoi c ban. Vi
moi phat bieu ba a ch co dang x := y op z chung ta thc thi cac
bc sau:
1. Goi ham getreg e xac nh L.
2. Xac nh a ch ac ta cho y.
3. Tao ch th OP z,.
4. Neu tr hien tai cua y va hoac z se khong con c dung na.
Ham getreg
1. Neu y ang trong thanh ghi va y se khong c dung na sau phat
bieu x := y op z.
2. Ngc lai.
3. Neu khong co thanh ghi rong.
4. Neu X se khong c dung tiep va cung khong the tm c mot
thanh ghi nh a noi bc 3.
Th du 9.3. Ta co phat bieu gan d := (a b) + (a c) + (a c)
Chuyen thanh ma trung gian
t := a b; u := a c; v := t + u; d := v + u
Bang 9.1. Chuoi ma oi tng sinh ra cho th du 9.3
Ma trung
gian
Ma oi
tng
Gia Bo ac ta
thanh ghi
Bo ac ta
a ch
t := a b
u := a c
v := t + u
d := v + u
MOV a, R
0
SUB b, R
0
MOV a, R
1
SUB c, R
1
ADD R
1
, R
0
ADD R
1
, R
0
MOV R
0
, d
2
2
2
2
1
1
2
Thanh ghi rong, R
0
cha t
R
0
cha t
R
1
cha u
R
0
cha v
R
1
cha u
R
0
cha d
t trong R
0
t trong R
0
u trong R
1
u trong R
1
v trong R
0
d trong R
0
d trong bo nh
Sinh ma cho loai phat bieu khac
Bang 9.2. Chuoi ma oi tng cho phat bieu xac nh ch so va gan.
(1)
i trong thanh ghi R
1
(2)
i trong bo nh M
1
(3)
i tren stack
ma gia ma gia ma gia
a := b[1]
a[1] := b
MOV b (R
i
), R
MOV b, a (R
1
)
2
3
MOV M
i
, R
MOV b(R), R
MOV M
i
, R
MOV b, a(R)
4
5
MOV S
i
(A), R
MOV b(R), R
MOV S
i
(A), R
MOV b, a(R)
4
5
Phat
bieu
Bang 9.3. Ma oi tng cho phep gan con tro
p trong thanh ghi
R
p
p trong bo nh M
p
p trong stack
+
ma gia ma gia ma gia
a := * p
* p := a
MOV * R
p
,
a
MOV a * R
p
2
2
MOV M
p
, R
MOV * R, R
MOV M
p
, R
MOV a , * R
3
4
MOV S
p
(A), R
MOV * R , R
MOV a , R
MOV R, *
S
p
(A)
4
5
Phat
bieu
Sinh ma cho phat bieu ieu kien
if x < y goto z. Ch th so sanh CMP. Th du CMP x, y neu x > y th ma
ieu kien se c xac lap dng. Ch th nhay co ieu kien c
thc thi neu ieu kien c xac lap <, =, >, > =, < >, < = chung ta
dung ch th nhay co ieu kien CJ < = z. Nh vay phat bieu ieu
kien if x < y goto z c dch sang ma may nh sau:
CMP x, y; CJ < z
9.5. Dag bieu dien khoi c ban
Dag la cau truc d lieu rat thch hp e hien thc viec chuyen oi cac
khoi c ban.
1. Cac la c at ten bang cac danh bieu duy nhat, hoac la ten bien
hoac hang so. Hau het cac la la r-value.
2. Cac nut trung gian c at ten bang ky hieu phep toan.
3. Cac nut cung co the la chuoi cac danh bieu cho trc. Lu y phai
phan biet s khac nhau gia lu o va dag.
Th du 9.4.
Mo phong 9.5. Ma trung gian cua khoi B2
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
t
1
:= 4 * i
t
2
:= a [t
1
]
t
3
:= 4 * 1
t
4
:= b [3]
t
5
:= t
2
* t
4
t
6
:= prod + t
5
prod := t
6
t
7
:= i + 1
i := t
7
if i < = 20 goto (1)

[ ]

+
[ ] +

(1)
20
1
t
7
,
i
t
1
, t
3
t
4
t
5
t
6
, prod
prod
0
a
i
0 b
4
Hnh 9.5. Dag cho khoi B
2
mo phong 9.5
Xay dng dag
Giai thuat 9.2. Xay dng dag.
Nhap: khoi c ban
Xuat: dag cho khoi c ban, cha cac thong tin sau:
1. Ten cho tng nut.
2. Moi nut eu co danh sach cac danh bieu gan vao no.
Phng phap: Gia s ton tai ham node indentifier, ham nay khi ta xay
dng dag, se tra ve nut mi nhat co lien quan vi identifier.
Cac dang phat bieu ba a ch nh sau (i) x := y op z, (ii) x := op y, (iii)
x := y co trng hp phat bieu ieu kien, th du if i < = 20 goto ta
coi la trng hp (i) ma x khong c nh ngha.
1. Neu node (y) khong c nh ngha, ta tao la co ten y va node (y)
chnh la nut o. Trong trng hp (i) neu node (z) khong c nh
ngha, ta tao la ten z va la chnh la node (z).
2. Trong trng hp (i), xac nh xem tren dag co nut nao co ten op
ma con trai la node (y) va con phai la node (z). Trong trng hp
(ii) ta xac nh xem co nut nao co ten op, ma no ch co mot con duy
nhat la node (y). Trng hp th (iii) th at n la node (y).
3. Loai x ra khoi danh sach bieu gan vao nut node (x). Them x vao
danh sach cac danh bieu gan vao nut c tm bc (2) va at
node (x) vao n.
Th du 9.5. Khoi B
2
mo phong 9.5 cua th du 9.4.

[ ]
*
[ ]
t
4
t
5
t
1
, t
3
a
b
4

[ ]

+
[ ]
t
4
t
6
prod
0
t
2
t
2
t
2
a)
i
0
t
5
b)
t
1
, t
3
a
i
0
b
4

[ ]

+
[ ]
t
4
prod
0
t
2
t
6
, prod t
6
, prod
t
5
c)
t
1
, t
3
a
b i
0
4

[ ]

+
[ ]
t
1
, t
3
prod
0
i
0
t
2
t
6
, prod
t
5
t
4 d)
a
+
b
t
7
1
4

[ ]

+
[ ]
prod
0
i
0
t
2
t
6
, prod
t
5
t
1
, t
3
t
4
a
b
4
e)
+

(1)
t
7
, i
20
1
Hnh 9.7. Cac bc xay dng dag cua khoi B
2
th du 9.5.
ng dung cua dag
th du 9.5 chung ta a xay dng dag, no giup cho viec t ong loai
bo cac bieu thc con giong nhau. No xac nh nhng bien ma tr cua
chung c s dung trong khoi c ban. Dag con giup ta xac nh
nhng phat bieu ma tr cua chung c s dung ngoai pham vi cua
khoi c ban.
Th du 9.6. Chung ta se xay dng lai khoi c ban t dag cua (H.9.7e).
Day, con tro va lenh goi chng trnh con
Chung ta khao sat khoi c ban sau ay:
x := a[i]
a[j] := y
z := a[i]
Giai thuat 9.2 th a[i] se tr thanh bieu thc chung. T dag chung ta
tao lai khoi c ban cua no se toi u va co dang:
x := a[i]
z := x
a[j] := y
Nhng khoi (9.1) va (9.2) se tnh tr z khac nhau neu j = I va y a[i].
oi vi con tro cung xay ra van e khi ta co phat bieu gan * p := w.
Neu ta khong biet p se ch en oi tng nao, th phai loai tat ca cac
nut co dang tren.
Viec goi chng trnh con se giet tat ca cac nut bi v ta cha biet g
ve chng trnh b goi, nen ta buoc phai gia s rang bat c bien nao
cung co the b thay oi tr do hieu ng le.
9.6. Tao ma oi tng t dag
Sap xep lai th t
t
1
:= a + c
t
2
:= c + d
t
3
:= e t
2
t
4
:= t
1
t
3
Ta co the sap xep lai chuoi ma trung gian sao cho viec tnh toan t1 ch
xay ra ngay trc t4.
t2 := c + d t1 := a + b
t3 := e t2 t4 := t1 t3
Mo phong 9.6. Ma oi tng
cho chuoi phat bieu (H.9.8)
MOV a, R
0
ADD b, R
0
MOV c, R
1
ADD d, R
1
MOV R
0
, t
1
MOV e, R
0
SUB R
1
, R
0
MOV t
1
, R
1
SUB R
0
, R
1
MOV R
1
, t
4
MOV c, R
0
ADD d, R
0
MOV e, R
1
SUB R
0
, R
1
MOV a, R
0
ADD b, R
0
SUB R
1
, R
0
MOV R
0
, t
4
Mo phong 9.7. Chuoi ma sau
khi a sap xep lai ma trung gian
Heuristics dung e sap xep dag
Mo phong 9.8. Giai thuat sap xep cac nut cua dag
(1) While neu con cac nut trung gian cha c liet ke ra
do begin
(2) Chon nut cha liet ke n; tat ca cac nut cha me cua no a liet ke
(3) liet ke n;
(4) While con m tan cung ben trai cua n, co cac cha me a liet ke
va no khong phai la nut la do begin
(5) liet ke m;
(6) n := m;
end;
end
Th du 9.7. Giai thuat mo phong 9.8 e tao s sap xep cua cac ma
trung gian (H.9.9).

a
+
+

+
b
d c
1
8
10
6
5
4
2
3
12
7 11
9
Hnh 9.9. Dag cho th du
t
8
:= d + e
t
6
:= a + b
t
5
:= t
6
- c
t
4
:= t
5
* t
8
t
3
:= t
4
- e
t
2
:= t
6
+ t
4
t
1
:= t
2
* t
3
Sap xep toi u cho cay
Giai thuat co hai phan: phan au anh ten cho cac nut cua cay, phan
th hai cua giai thuat mieu ta lo trnh tren cay. Ma oi tng se sinh
ra trong qua trnh thc hien lo trnh tren cay.
Giai thuat xac nh nhan cua nut tren cay
Mo phong 9.9. Giai thuat tnh ten cua nut
label (n) = max (l
1
, l
2
) neu l
1
l
2
l
1
+ 1 neu l
1
= l
2
(1) if n la la then
(2) if n la con tan cung ben trai cua nut cha cua no
then
(3) label (n) := 1
(4) else label (n) := 0
else begin /* n la nut trung gian */
(5) gia s n
1
, n
2
, , n
k
la con cua nut n, c sap theo th t
cua ten, sao cho
label (n
1
) > label (n
2
) label (n
k
)
(6) label (n) := max (label (n
i
) + i 1)
1 < i < k
end
Th du 9.8. Chung ta xet cay (H.9.8)
Hnh 9.10. Cay c xac nh ten
Sinh ma oi tng t cay co ten
t
4
a
t
3
e b
d c
2
0
1
1
0
1
2
t
1
t
2
1
1
Mo phong 9.10. Giai thuat cua thu tuc gencode
procedure gencode (n);
begin
/* trng hp 0 */
if n la la ben trai bieu th cho toan hang name
and n la con tan cung ben trai cua nut cha cua no
then print MOV || name || , || top (rstack)
else if n la nut trung gian vi toan t la op, con ben trai la n
1
va
con ben phai la n
2
then
/* trng hp th nhat */
if label (n
2
) = 0 then begin
at name la toan hang c bieu th bang n
2
. gencode (n
1
);
print op || name || , || top (rstack)
end
/* trng hp th hai */
else if 1 label (n
1
) < label (n
2
) and
label (n
1
) < r then begin
swap (rstack);
gencode (n
2
);
R := pop (rstack); /* n
2
a c tnh, nam trong R */
gencode (n
1
);
print op || R || , || top (rstack);
push (rstack, R);
swap (rstack)
end
/* trng hp th ba */
else if 1 label (n
2
) label (n
1
) and label (n
2
) < r then begin
gencode (n
1
);
R := pop (rstack); /* n
1
a c tnh, nam trong thanh ghi
R*/
gencode (n
2
);
print op || top (rstack) || , || R;
push (rstack, R);
end
/* trng hp th t, ca hai ten r, r la so lng toi a cua thanh
ghi */
else begin
gencode (n
2
);
T := pop (rstack);
print MOV || top (rstack) || , || T;
gencode (n
1
)
push (tstack, T);
print op || T || , || top (rstack)
end
end;
Mo phong 9.11. Chuoi cac lenh goi thu tuc gencode va cac lenh print
cua cac trng hp
gencode (t
4
) [R
1
R
0
] /* trng hp 2 */
gencode (t
3
) [R
0
R
1
] /* trng hp 3 */
gencode (e) [R
0
R
1
] /* trng hp 0 */
print MOV e, R
1
gencode (t
2
) [R
0
) /* trng hp 1 */
gencode (c) [R
0
] /* trng hp 0 */
print MOV c, R
0
print ADD d, R
0
print SUB R
0
, R
1
gencode (t
1
) [R
0
] /* trng hp 1 */
gencode (a) [R
0
] /* trng hp 0 */
print MOV a, R
0
print ADD b, R
0
print SUB R
1
, R
0
1. Tac vu (toan t phep toan) cho moi nut trung gian.
2. Cat moi nut la la nut con tan cung ben trai vao thanh ghi.
3. Lu gi cho tng nut ca hai con ma chung co ten bang hoac nhieu
hn r.
Cac tac vu vi nhieu thanh ghi
Cac tnh chat ai so
+
+
+
l
1
max (2, l)
T
1
T
4
T
1
T
2
a)
T
1
0
l
+
+
T
3
b)
+
t
i4
T
i1
+
++
+
T
i3
t
i3
d)
Hnh 9.11. Chuyen oi cay bang phep hoan v,
ket hp
c)
Cac bieu thc chung
1
3
4
2
6 4
12
4
8
7
5
6
11 12
6
8
9
10
12
Hnh 9.12. Phan chia thanh cac cay con
CHNG 10
TOI U MA
10.1. Gii thieu
- Tieu chuan chuyen ma tot
- To chc cua trnh bien dch toi u
Hnh 10.1. To chc cua bo toi u ma
front end Bo toi u ma Bo sinh ma
Chuyen oi
Phan tch
dong d lieu
Phan tch dong
ieu khien
Ma trung gian
Th du 10.1. Chuyen oi sang ma trung gian ba a ch cho oan
chng trnh trong ngon ng Pascal
for i := n 1 down to 1 do
for j:= 1 to i do
if A [j] > A [j + 1] then
begin
temp := A [j];
A [j] := A [j + 1];
A [j + 1] := temp;
end;
Gia s moi o nh la 4 byte. a ch nen cua day A vay a ch phan t
th j cua day A la: addr(A[j]) = addr(A) + (j 1) * 4.
(1) i = n - 1
(2) ij i < 1 goto (31)
(3) j = 1
(4) if j > i goto (29)
(5) t
1
= j - 1
(6) t
2
= 4 * t
1
(7) t
3
= A [t
2
]
(8) t
4
= j + 1
(9) t
5
= t
4
- 1
(10) t
6
= 4 * t
5
(11) t
7
= A [t
6
]
(12) ij t
3
< t
7
goto (27)
(13) t
8
= j - 1
(14) t
9
= 4 * t
8
(15) temp = A [t
9
]
(16) t
10
= j + 1
(17) t
11
= t
10
- 1
(18) t
12
= 4 * t
11
(19) t
13
= A [t
12
]
(20) t
4
= j - 1
(21) t
15
= 4 * t
14
(22) A [t
5
] = t
13
(23) t
16
= j + 1
(24) t
17
= t
16
- 1
(25) t
18
= 4 * t
17
(26) A [t
18
] = temp
(27) j = j + 1
(28) goto (4)
(29) i = i - 1
(30) goto 2
* Khoi c ban
Th du 10.2. oan ma trung gian sau c xac nh 4 khoi c ban
(1) read L
(2) n := 0
(3) k := 0
(4) m := 1
(5) k := k + m
(6) c := k > L
(7) if (c) goto (11)
(8) n := n + 1
(9) m := m + 2
(10) goto (5)
(11) write n
BB
2
BB
3
BB
4
BB
1
10.2. Phan tch dong d lieu
Cac cau truc ieu khien nh if, while, for gay ra s re nhanh cua
chng trnh. Xac nh c s re nhanh se xac nh c s thay oi
tr cua bien trong chng trnh, t o s dung cac bien nay trong qua
trnh toi u hoa.
10.2.1. Muc ch
Xac nh cau truc ieu khien cua chng trnh la:
- mo ta cac con ng thc hien chng trnh
- xac nh cac vong lap
10.2.2. o th dong ieu khien (Control Flow Graphs)
nh ngha:
o th dong ieu khien (CFG) cua mot chng trnh la mot o th co
hng, c ky hieu G = (N, E) ma trong o N la cac khoi c ban, E
la tap canh the hien cho dong ieu khien gia cac khoi c ban.
Th du 10.3. oan ma trung gian (gom 4 khoi c ban) th du 10.2
c bieu dien thanh o th dong d lieu.
BB
1
BB
2
BB
3
BB
4
Hnh 10.2. o th dong ieu khien
10.2.3. Successor, predcessor cua mot khoi c ban
Cho mot o th dong ieu khien G = (N, E) va mot khoi c ban b N,
xac nh successor va predcessor cho khoi c ban b nh sau:
* Successor cua b, ky hieu succ (b) la tap cac khoi c ban n, ma co
the at en t b tren 1 canh succ (b) = {n N | (b, n) E}
nh th du 10.3: succ (BB
1
) = {BB
2
};
succ (BB
2
) = {BB
3
, BB
4
}, succ (BB
3
) = {BB
2
}
* Predcessor cua b, ky hieu pred (b) la tap cac khoi c ban m, ma co
the at en b tren 1 canh pred (b) = {m N | (m, b) E}
nh th du 10.3: pred (BB
2
) = {BB
1
, BB
3
}
pred (BB
3
) = {BB
2
}, pred (BB
4
) = {BB
2
}
Entry cua G: la mot nut khong co predcessor
Exit cua G: la mot nut khong co successor
nut re (branch node) trong G la nut co nhieu hn mot successor
nut hp (join node) trong G la nut co nhieu hn mot predcessor
o th dong ieu khien th du 10.3 c them 2 nut Entry, Exit.
Entry
Exit
BB
1
BB
2
BB
3
BB
4
Hnh 10.3. Nut Entry va Exit trong G
Th du minh hoa cac nut re nhanh va hp.
BB
1
BB
5
BB
6
BB
7
BB
8
BB
9
BB
10
BB
2
BB
3
BB
4
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
i := 1
if(I>n) goto (15)
t := 0
j := 1
if(j>n) goto (13)
tmp := te + ts
if(tmp < 0) goto (10)
t
1
:= t
1
+ t
s
goto (11)
t
1
:= 4*j
j := j+1
goto (5)
i := I+1
goto (2)
t
1
:= 0
BB
1
BB
5
BB
6
BB
7
BB
8
BB
9
BB
10
BB
2
BB
3
BB
4
BB
1
BB
5
BB
6
BB
7
BB
8
BB
9
BB
10
BB
2
BB
3
BB
4
Hnh 10.4. Cac nut re nhanh va hp
join node
branch
node
10.2.4. Chi phoi (dominater)
nh ngha dominater: nut n cua G chi phoi nut n

, ky hieu n dom n

(hay n n

), neu moi con ng t nut Entry cua G en n

eu phai
i qua n. Vi nh ngha nay th moi nut n chi phoi chnh no. Nut la
iem vao vong lap se chi phoi cac nut trong vong lap.
BB
1
BB
1
;
BB
1
BB
2
;
BB
1
BB
3
;
BB
1
BB
4
BB
2
BB
2
;
BB
2
BB
3
;
BB
2
BB
4
BB
3
BB
3
BB
4
BB
4
Entry
Exit
BB
1
BB
2
BB
3
BB
4
properdominate
N la proper dominate n

, ky hieu n
p
n

, neu n n

va n n

nh
th du tren th BB
1

p
BB
2
; BB
1

p
BB
3
; BB
1

p
BB
4
; BB
2

p
BB
3
; BB
2

p
BB
4
direct dominate
Nut n c goi la direct dominate n

, ky hieu n
d
n

, neu n
p
n

va khong ton tai n N ma n


p
n.
BB
1

d
BB
2
; BB
2

d
BB
3
; BB
2

d
BB
4
cay dominate (dominate tree); ky hieu viet tat DT, la cay ma nut goc
la Entry; nut thuoc G va canh la quan he direct dominator.
th du tren DT co dang:
Entry
BB
1
BB
2
BB
3
BB
4
Hnh 10.4. Cay dominate
Giai thuat 2.2: tm cac dominator.
Nhap: o th dong ieu khien G.
Xuat: tap dominator cua moi nut thuoc G.
Giai thuat:
DOM (Entry) = Entry
DOM () = N N - {Entry, Exit}
change = true
while (change) {change = false
for each N - {Entry, Exit} {
old DOM = DOM ()
DOM () = {} OM (p)
pepred ()
if (DOM () = old DOM) change = true
}
}
10.2.5. Direct dominator
Direct dominator cua mot nut n.
Giai thuat tm direct dominator cua mot nut:
- Khi ong tap proper dominator cua nut n
- Loai bo nhng nut ma no la proper dominator nhng nut khac trong
tap
Giai thuat 10.3. Tm direct dominator
Nhap: o th dong G.
Xuat: direct dominator cua moi nut cua G.
Giai thuat:
for vi moi nut n N - {Entry} do
DOM
d
(n) = DOM (n) - {n}
for vi moi nut n N - {Entry} do
for vi moi nut s DOM
d
(n) - {s} do
if t DOM
d
(s) then
DOM
d
(n) = DOM
d
(n) - {t};
th du hnh 10.1, ta co:
DOM
d
(1) = {Entry}; DOM
d
(2) = {1};
DOM
d
(3) = {2}; DOM
d
(4) = {2}
10.2.6. Post dominator
nh ngha:
Cho o th dong ieu khien G = (N, E) va n, n N.
- Nut n c goi la post dominator cua nut n, ky hieu n n neu
moi con ng t n en nut Exit cha n.
th du hnh 10.3, ta co cac post dominator:
1 1; 1 2; 1 3; 1 4; 2 2; 2 3; 2 4; 3 3; 4 4
- Nut n c goi la direct post dominator cua nut n, ky hieu n n,
neu n
p
n va khong ton tai n N ma n
p
n
p
n.
- Nut n c goi la proper post dominator cua nut n, ky hieu la
n
p
n, neu n n va n n.
Th du ve post dominator trong G la dominator trong G-1
Entry
Exit
BB
1
BB
2
BB
3
BB
4
G
1
G
-1
Entry
Exit
BB
1
BB
2
BB
3
BB
4
10.2.7. Vong lap
Cac yeu to xac nh vong lap t nhien:
- Mot vong lap phai co 1 iem vao n, goi la header.
- iem vao header dominate tat ca cac nut con lai trong vong lap.
- Phai co t nhat mot cach lap, ngha la phai co t nhat mot canh quay
ve header.
Giai thuat 10.3. Tm vong lap
Nhap: o th dong G va mot canh ve t h.
Xuat: vong lap bao gom tat ca cac nut trong vong lap t nhien t h.
Phng phap:
- Tm dominator cua moi nut trong CFG.
- Xac nh canh ve.
- Tm tat ca nhng nut lien quan en canh ve.
- e tm canh ve: thc hien duyet cay CFG theo chieu sau trc. Mot
canh lui e = (t, h) E la canh lui neu h t. Mot canh lui luon la canh
ve trong vong lap bang cach s dung ieu khien co cau truc.
Giai thuat:
stack s = empty
set loop = {h}
insert on stack (t); /* stack s*
while S is not empty do beg
m = pop (s);
for each pred (m) do
insert on stack (p); end
insert on stack (a) begin
if (a loop) then begin loop = loop {a} push on stack (a);
end
Th du ve tm vong lap
Cho grap nh sau:
Entry
BB
3
BB
4
BB
7
BB
8
BB
1
BB
2
BB
5
BB
9
BB
6
BB
10
Exit
au tien xac nh canh ve h t.
Loop = {BB
3
, BB
8
}, stack = {BB
8
}
Loop = {BB
3
, BB
8
}, stack = {}
Loop = {BB
3
, BB
8
, BB
7
}, stack = {BB
7
}
Loop = {BB
3
, BB
8
, BB
7
}, stack = {}
Loop = {BB
3
, BB
8
, BB
7
, BB
5
}, stack = {BB
5
}
Loop = {BB
3
, BB
8
, BB
7
, BB
5
, BB
6
}, stack = {BB
5
, BB
6
}
Loop = {BB
3
, BB
8
, BB
7
, BB
5
, BB
6
}, stack = {BB
5
}
Loop = {BB
3
, BB
8
, BB
7
, BB
5
, BB
6
, BB
4
}, stack = {BB
5
, BB
4
}
Loop = {BB
3
, BB
8
, BB
7
, BB
5
, BB
6
, BB
4
}, stack = {BB
5
}
Loop = {BB
3
, BB
8
, BB
7
, BB
5
, BB
6
, BB
4
}, stack = {}
Vong lap tm c la {BB
3
, BB
4
, BB
5
, BB
6
, BB
7
, BB
8
}, BB
3
la
header, BB
8
la node ket thuc.
10.3. Phan tch dong d lieu (Data Flow Analyst) DFA
10.3.1. Muc ch cua phan tch dong d lieu
- Xac nh d lieu c dung trong chng trnh.
- S dung d lieu e trnh bien dch quyet nh toi u ma.
- Trong mot khoi c ban: xac nh tnh hieu qua trong cau lenh, t au
en cuoi khoi c ban.
10.3.2. iem va ng
iem la v tr gia hai phat bieu lien nhau.
Ton tai iem trc va sau phat bieu.
Th du oan chng trnh:
p
0

d
1
i := m - 1
p
1

d
2
j := n
p
2

d
3
a := u
1
p
3

ay co 4 iem p
0
trc d
1
, p
1
trc d
2
, trc d
3
, p
3
sau d
3
ng: t p
1
en p
n
la con ng i t p
1
en iem p
n
trong chng
trnh.
10.3.3. at en s nh ngha (Reaching definition)
nh ngha cua mot bien x la tac vu gan tr cho bien x.
nh ngha d cho mot bien x c goi la at en mot iem p trong
chng trnh neu ton tai mot con ng t iem ngay sau d en p ma
x khong b thay oi tr bi mot nh ngha cua x doc theo con ng
nay.
10.3.3.1. Tap Gen
Gen (b) la tap cac nh ngha trong b va at en iem ket thuc cua
b.
10.3.3.2. Tap Kill
Kill (b) la tap nh ngha mot khoi c ban khac b nhng b thay oi
trong b (bi mot tac vu trong b), la bien c nh ngha trong b, tap
kill cha tat ca cac nh ngha cua v trong cac khoi c ban khac.
10.3.3.3. S can bang dong d lieu
RDin (b): tap cac nh ngha ma at en s bat au cua b
RDout (b): tap cac nh ngha ma at en s ket thuc cua b.
Cong thc xac nh:
RDin (b) = RDout (i)
i pred (b)
RDout (b) = Gen (b) [RDin (b) Kill (b)]
Giai thuat: xac nh viec at en s nh ngha.
Nhap: o th dong G vi tap Gen (b) va kill (b) a c tnh toan trc
cho moi khoi c ban b.
Xuat: RDin (b) va Rdout (b) cho moi khoi c ban b
Giai thuat:
RDout (Entry) =
RDout (b) = b N - {Entry, Exit}
/* Gen (b) th tot hn */
change = true
while (change) {
change = false
for each b N - {Entry, Exit} {
oldout = RDout (b)
RDin (b) = RDout (i)
i pred (b)
RDout (b) = Gen (b) [RDin (b) kill (b)]
if (RDout (b) oldout) change = true
}
}
RDin (Exit) = RDout (i)
i pred (Exit)
Th du:
d
1
: i := m - 1
d
2
: j := n
d
3
: a := u
1
d
4
: i := i + 1
d
5
: j := j - 1
d
6
: a := u
2
d
7
: a := u
3
i := m -1
j := n
a := u
1
Entry
a := u
3
Exit
BB
1
{d
4
,d
5
,
d
3
,d
6
}
{d
4
,d
5
,d
7
}
BB
3
{d
1
,d
2
,d
3
,d
4
,
d
5
,d
6
}
{d
4
,d
5
,d
3
,d
6
}

BB
2
BB
4

i := j + 1
j := j - 1
e
1
?
{d
1
,d
2
,d
3
}
a := u
2
{d
4
,d
5
,
d
3
,d
6
}
BB Gen (BB) Kill(BB)
1
2
3
4
{d
1
,d
2
,d
3
}
{d
4
,d
5
}
{d
6
}
{d
7
}
{d
4
,d
5
,d
6
,d
7
}
{d
1
,d
2
}
{d
3
,d
7
}
{d
3
,d
6
}
RDin(b) = RDout(i)
i pred(b)
RDout(b) = Gen(b) [RDin(b)
- kill(b)]
{d
4
,d
5
,d
6
}
10.3.4. Bien song
Bien c goi la song tai iem p trong chng trnh neu gia tr hien
tai cua c dung trc khi c gan gia tr mi hoac trc khi
chng trnh ket thuc, ngc lai goi la bien chet.
- ng dung bien song la xac nh xem co can lu gi tr cua no khi ra
khoi khoi c ban, trong thanh ghi.
- Can xac nh bien song iem vao va ra cua moi khoi c ban.
10.3.4.1. Tap Use
Use (b) la tap cac bien c s dung trc khi (hoac co the) c nh
ngha trong b.
10.3.4.2. Tap Def
Def (b) la tap cac bien c nh ngha trong b.
10.3.4.3. S can bang dong d lieu
LVin (b): tap cac bien song tai iem vao cua b
LVout (b): tap cac bien song tai iem ra cua b
Cong thc:
LVout (b) = LVin (i)
i succ (b)
LVin (b) = Use (b) [LVout (b) Def (b)]
Giai thuat 3.2. Giai thuat tm bien song
Nhap: o th dong G vi Def (b) va Use (b) c xac nh trc.
Xuat: LVout (b) la tap bien song tai iem ra cua khoi c ban b.
Giai thuat:
LVin (Entry) =
Lvin (b) = b N - {Entry, Exit}
change = true
while change {change = false}
for each b N - {Entry, Exit} {
oldin = LVin (b)
LVout (b) = LVin (i)
i succ (b)
LVin (b) = Use (b) [LVout (b) - Def (b)]
if (LVin (b) oldin) change = true
}
}
Th du: cho dong ieu khien nh sau, tm tap cac bien song khi ra khoi
cac khoi c ban.
a := 2
b := 3
d := c
e := a
g := c + 1
a < d ?
print (b,d,e,g)
Entry
b := b + 1
d := 2 * d
b > 10
d := d + 1
f := a + b
g := e + g
Exit
{c}
BB
1
{a,b,d,e,g}
{b,d,e,g}
{b,d,e,g} {b,d,e,g}
BB
2
BB
3
{a,b,d,e,g}
{b,d,e,g}

BB
3
BB
4
BB Use (BB) Def (BB)
1
2
3
4
{c}
{b,d}
{a,b,d,e,g}
{b,d,e,g}
{a,b,d,e,g}
{b,d}
{d,f,g}

LVout(b) = LVin(i)
i succ(b)
LVin(b) = Use(b) [LVout(b)
- Def(b)]
10.3.5. Bieu thc co san (Avaible expression)
Mot bieu thc x op y c goi bieu thc co san tai iem p neu moi
con ng t nut khi au en p hoac sau lan tnh toan trc khi at
en p khong co tac vu gan cho x va y.
ng dung cua bieu thc co san la e loai bo bieu thc con dung
chung.
Ta phai tm tat ca bieu thc co san tai iem vao va ra cua moi khoi
c ban.
10.3.5.1. Tap Eval
Eval (b) la tap cac bieu thc co san c thc hien trong b ma van co
san tai iem ra cua b.
10.3.5.2. Tap Kill
Kill (b) la tap cac bieu thc b thay oi trong b.
10.3.5.3. S can bang dong d lieu
AEin (b): tap cac bieu thc co san tai iem bat au cua b.
AEout (b); tap bieu thc co san cham en iem ket thuc cua b.
Cong thc:
AEin (b) = AEout (i)
i pred (b)
AEout (b) = Eval (b) [AEin (b) Kill (b)]
Giai thuat: tm tap cac bieu thc co san tai iem vao va ra cua moi
khoi c ban.
Nhap: o th dong G vi Eval (b) va Kill (b) c tnh toan trc cho
khoi c ban b.
Xuat: AEin (b) cho khoi c ban b.
Giai thuat:
: tap cac bieu thc trong o th dong ieu khien
AEout (Entry) =
AEout (b) = Eval (b) [U Kill (b)] b N - {Entry, Exit}
change = true
while (change) {
change = false
for each b N - {Entry, Exit} {
oldout = AEout (b)
AEin (b) = AEout (i)
i pred (b)
10.4. Loai bo d tha
Qua trnh loai bo d tha bao gom loai bo nhng bieu thc con chung,
lan truyen nhng ban copy, di chuyen ma khong oi trong vong lap ra
ngoai vong lap.
10.4.1. Loai bo bieu thc con chung
Giai thuat: loai bo bieu thc con chung
Nhap: ma ba a ch cua o th dong ieu khien vi cac AEin va
AEout cho tng khoi c ban.
Xuat: oan ma ba a ch a loai bo bieu thc con chung.
Giai thuat:
for moi khoi b N
for moi lenh b co dang y = x op y
ma x op y la co san tai iem vao cua b {
1. Xac nh neu x op y co san tai moi cau lenh
2. Xac nh viec tnh toan x op y ma at en z
3. Tao mot bien mi t
4. Thay the s nh ngha w = x op y tm thay bc 2 bang
t = x op y; w = t
5. Thay z = x op y bang z = t
}
}
Th du ve loai bo bieu thc con dung chung
c := a+b
d := a*c
e := d*d
i := 1
Entry
Exit
BB
1
{a+b, d*d}
BB
3
{a+b, d*d}
{a+b, d*d}
BB
2
BB
4
f := a+b
c := c*2
c > d ?
g := a*c
{a+b, d*d}
d := c
g := d*d
i := i+1
i > 10 ?
BB
5
t
1
:= a+b
c := t
1
d := a*c
e := d*d
i := 1
Entry
Exit
BB
1
BB
3
BB
2
BB
4
f := t
1
c := c*2
c > d ?
g := a*c
d := c
g := d*d
i := i+1
i > 10 ?
BB
5
10.4.2. Lan truyen ban copy
10.4.2.1. nh ngha s dung (use definition)
Tap cac nh ngha at en viec s dung cua a nh la mot bien c
goi la day xch s dung nh ngha (ud - chain) cho bien o.
Th du ve ud chain
Entry
Exit
z = 1
x = 1
z > y
x = 2
y = x+1
z = x-3
10.4.2.2. Day xch nh ngha s dung
Tap tat ca cac lan s dung ma at en bi mot nh ngha c goi la
day xch nh ngha s dung (du chain).
Th du ve du chain va ud chain
Entry
Exit
z = 1
x = 1
z > y
x = 2
y = x+1
z = x-3
10.4.2.3. Bieu thc copy co san (Available Copy Expression)
Tap copy
Tap nhng cau lenh copy u := v trong b ma u va v khong c gan sau
o trong b, ngha la cau lenh co san tai iem ket thuc cua b.
Tap kill
Tap cac cau lenh copy b thay oi trong b, ngha la tap cau lenh copy
trong khoi c ban khac ma co toan hang cua no c gan cho b.
S can bang dong d lieu
copyin: la tap lenh copy co san tai iem vao b
copyout: la tap lenh copy co san tai iem ket thuc b
cong thc: copyin (b) = copyout (i)
i pred (b)
copyout (b) = copy (b) [copyin (b) kill (b)]
Giai thuat: tm ban copy co san
Nhap: o th dong ieu khien G vi kill (b) va copy (b) c tnh san
cho moi khoi c ban b.
Xuat: copyin (b) cho moi khoi c ban.
Giai thuat:
U : Tap tat ca cac copy trong o th dong ieu khien
copyout (Entry) =
copyout (b) = copy (b) [U - kill (b)] b N - {Entry, Exit}
changed = true
while (changed) {
changed = false
for each b N - {Entry, Exit} {
oldout = copyout (b)
copyin (b) = copyout (i)
i pred (b)
copyout (b) = copy (b) [copyin (b) kill (b)]
if (copyout (b) oldout) changed = true
}
}
Aein (Exit) = Aeout (i)
i pred (Exit)
10.4.2.4. Lan truyen ban copy
Cau lenh copy la cau lenh co dang x = y.
S lan truyen ban copy la thay the x bang y ma khong lam thay oi
tr cua x hoac y.
Giai thuat: lan truyen ban copy
Nhap: o th dong ieu khien G vi du chain.
Xuat: o th dong ieu khien co s dung lan truyen ban copy.
Giai thuat:
for moi ban copy s: x := y thc hien cac bc sau:
1. Xac nh tat ca cac ni ma s nh ngha cua x c s dung.
2. for moi lan s dung u:
a. s phai co mot s nh ngha cua x cham at en u va
b. moi con ng t s en u, khong co tac vu gan en y.
Th du ve s lan truyen ban copy
c := a+b
d := c
e := d*d
Entry
Exit
BB
1
{d := c}
BB
3
{d := c}
{d:= c,g:= e}
BB
4
BB
2
f := a+c
g := e
a := g+d
a < c ?
h := g+1
e := f+2
{d:= c,g:= e}
f := d-g
f > a ?
b := g+a
h < f ?
BB
6
c := 2
c := a+b
d := c
e := c*c
Entry
Exit
BB
1
BB
2
BB
3
BB
4
f := a+c
g := e
a := e+c
a < c ?
h := e+1
e := f+2
f := c-e
f > a ?
b := g+a
h < f ?
BB
5
BB
5 BB
6
c := 2
{d:= c,g:= e}
10.4.3. Di chuyen ma khong oi cua vong lap (loop invariant code
motion)
Mot s tnh toan trong vong lap c goi la loop invariant neu s
tnh toan cua no luon luon tao ra cung mot gia tr.
Di chuyen code khong oi la di chuyen cac loop invariant ra ben
ngoai vong lap.
10.4.3.1. Loop Invariant
Mot tac vu trong vong lap la loop invariant neu moi toan hang trong
tac vu la:
- hang so hoac
- tat ca cac nh ngha cua toan hang eu ben ngoai vong lap hoac
- ch duy nhat co mot nh ngha trong vong lap cho toan hang ma s
nh ngha la loop invariant.
10.4.3.2. Thc hien di chuyen code
S di chuyen code phai thoa man 3 ieu kien v du cho phat bieu
s : x = y + z.
1. Khoi c ban cha s phai dominate tat ca cac loi ra cua vong lap.
2. Khong co phat bieu nao khac gan cho x.
3. Tat ca cac lan s dung x ch at en s nh ngha x trong s.
Th du (ieu kien 1)
if u <v goto BB
3
i :=1
BB
1
BB
3
BB
2
BB
4
v := v-1
if v < =20 goto BB
5
i := 2
u := u+1
j := i
BB
5
Th du (ieu kien 2)
if u <v goto BB
3
j := i
BB
1
BB
3
BB
2
BB
4
k := I
v := v-1
if v < =20 goto BB
5
i := 2
u := u+1
j :=1
BB
5
i :=3
if u <v goto BB
3
i :=1
BB
1
BB
3
BB
2
BB
4
v := v-1
if v < =20 goto BB
5
i := 2
u := u+1
i :=1
BB
5
Th du (ieu kien 3)
10.5. Toi u vong lap
Trong phan nay chung ta se trnh bay giai thuat toi u vong lap la
strength reduction. Muc ch cua giai thuat nay la thay the cac cau
lenh at tien bang cau lenh re tien hn.
10.5.1. Bien thay oi (Induction variable)
Bien thay oi trong vong lap L la x neu moi lan thay oi no tang hoac
giam mot hang so nhat nh.
10.5.2. Bien thay oi c ban (Basic Induction Variable BIV)
Bien v c goi la BIV trong L neu no co dang
v := v c vi c la hang so
10.5.3. Bien thay oi dan xuat (Derived Induction Variable DIV)
Bien j c goi la bien thay oi dan xuat neu no co mot trong cac
dang sau xuat hien trong vong lap:
j := a * i hoac j := i * a
j := b + i hoac j := a * i
j := b i hoac j := i a
j := i / a
trong o i la bien thay oi c ban (BIV)
Giai thuat 6.1. Tm bien thay oi trong vong lap L.
Nhap: vong lap L.
Xuat: tat ca cac BIV va DIV trong L.
Giai thuat:
1. Tm tat ca BIV trong L.
2. Tm cac DIV.
3. Lap lai bc (2) cho en khi nao khong tm thay DIV khac.
10.5.4. Giai thuat strength Reduction
Nhap: vong lap L va tap ho cac bien thay oi.
Xuat: oan ma a thc hien thay the cac cau lenh phc tap bang
nhng cau lenh t phc tap hn t vong lap L.
Giai thuat:
for moi bien BIV i
{
for moi bien j trong ho i (I, a, b)
{
tao ra mot bien mi sj
khi ong sj := a * i + b va at vao preheader cua L
thay the cau lenh gan j bang j := sj
sau moi phat bieu i := i c trong L
{
chen them sj := sj c * a
}
}
them sj vao ho cua i

You might also like