Professional Documents
Culture Documents
<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
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)
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
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
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):
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
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
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)
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.
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
/* 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 */
[ ]
+
[ ] +
(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
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
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