CHƯƠNG I
GII THIU V S BIÊN DCH
Ni dung chính:
Để máy tính có th hiu và thc thi mt chương trình đưc viết bng ngôn ng cp
cao, ta cn phi có mt trình biên dch thc hin vic chuyn đổi chương trình đó sang
chương trình dng ngôn ng đích. Chương này trình bày mt cách tng quan v cu
trúc ca mt trình biên dch và mi liên h gia nó vi các thành phn khác - “h
hàng” ca nó - như b tin x lý, b ti và son tho liên kết,v.v. Cu trúc ca trình
biên dch được mô t trong chương là mt cu trúc mc quan nim bao gm các giai
đon: Phân tích t vng, Phân tích cú pháp, Phân tích ng nghĩa, Sinh mã trung gian,
Ti ưu mã và Sinh mã đích.
Mc tiêu cn đạt:
Sau khi hc xong chương này, sinh viên phi nm được mt cách tng quan v nhim
v ca các thành phn ca mt trình biên dch, mi liên h gia các thành phn đó và
môi trường nơi trình biên dch thc hin công vic ca nó.
Tài liu tham kho:
[1] Trình Biên Dch - Phan Th Tươi (Trường Ði hc k thut Tp.HCM) - NXB
Giáo dc, 1998.
[2] Compilers : Principles, Technique and Tools - Alfred V.Aho, Jeffrey
D.Ullman - Addison - Wesley Publishing Company, 1986.
[3] Compiler Design – Reinhard Wilhelm, Dieter Maurer - Addison - Wesley
Publishing Company, 1996.
I. TRÌNH BIÊN DCH
Nói mt cách đơn gin, trình biên dch là mt chương trình làm nhim v đọc mt
chương trình được viết bng mt ngôn ng - ngôn ng ngun (source language) - ri
dch nó thành mt chương trình tương đương mt ngôn ng khác - ngôn ng đích
(target languague). Mt phn quan trng trong quá trình dch là ghi nhn li các li có
trong chương trình ngun để thông báo li cho người viết chương trình.
Trình biên
dch
Chương trình
đích
Chương trình
ngun
Hình 1.1 - Mt trình biên dch
1. Mô hình phân tích - tng hp ca mt trình biên dch
Chương trình dch thường bao gm hai quá trình : phân tích và tng hp
- Phân tích đặc t trung gian
- Tng hp chương trình đích
1
Chương
trình ngun
Phán
têch
Đặc t trung
gian
Phán
têch
Tng hp
Phân tích Chương
trình đích
Hình 1.2 - Mô hình phân tích - tng hp
Trong quá trình phân tích chương trình ngun s được phân rã thành mt cu trúc
phân cp, thường là dng cây - cây cú pháp (syntax tree) mà trong đó có mi nút là
mt toán t và các nhánh con là các toán hng.
Ví d 1.1: Cây cú pháp cho câu lnh gán position := initial + rate * 60
:=
position
+
initial *
rate 60
2. Môi trường ca trình biên dch
Ngoài trình biên dch, chúng ta có th cn dùng nhiu chương trình khác na để
to ra mt chương trình đích có th thc thi được (executable). Các chương trình đó
gm: B tin x lý, Trình dch hp ng, B ti và son tho liên kết.
Mt chương trình ngun có th được phân thành các module và được lưu trong các
tp tin riêng r. Công vic tp hp li các tp tin này thường được giao cho mt
chương trình riêng bit gi là b tin x (preprocessor). B tin x lý có th "bung"
các ký hiu tt được gi là các macro thành các câu lnh ca ngôn ng ngun.
Ngoài ra, chương trình đích được to ra bi trình biên dch có th cn phi được
x lý thêm trước khi chúng có th chy được. Thông thường, trình biên dch ch to ra
mã lnh hp ng (assembly code) để trình dch hp ng (assembler) dch thành dng
mã máy ri được liên kết vi mt s th tc trong thư vin h thng thành các mã thc
thi được trên máy.
Hình sau trình bày mt quá trình biên dch đin hình :
2
Hình 1.3 - Mt trình x lý ngôn ng đin hình
Chương trình ngun khung
Chương trình ngun
B tin x
Trình biên dch
Trình dch hp ng
Chương trình đích hp ng
Mã máy kh tái định v
Trình ti / Liên kết
Mã máy tuyt đối
Thư vin,
Tp tin đối tượng
kh tái định v
II. S PHÂN TÍCH CHƯƠNG TRÌNH NGUN
Phn này gii thiu v các quá trình phân tích và cách dùng nó thông qua mt s
ngôn ng định dng văn bn.
1. Phân tích t vng (Lexical Analysis)
Trong mt trình biên dch, giai đọan phân tích t vng s đọc chương trình ngun
t trái sang phi (quét nguyên liu - scanning) để tách ra thành các th t (token).
d 1.2: Quá trình phân tích t vng cho câu lnh gán position := initial + rate *
60 s tách thành các token như sau:
1. Danh biu position
2. Ký hiu phép gán :=
3. Danh biu initial
3
4. Ký hiu phép cng (+)
5. Danh biu rate
6. Ký hiu phép nhân (*)
7. S 60
Trong quá trình phân tích t vng các khong trng (blank) s b b qua.
2. Phân tích cú pháp (Syntax Analysis)
Giai đon phân tích cú pháp thc hin công vic nhóm các th t ca chương trình
ngun thành các ng đon văn phm (grammatical phrase), mà sau đó s được trình
biên dch tng hp ra thành phm. Thông thường, các ng đon văn phm này được
biu din bng dng cây phân tích cú pháp (parse tree) vi :
- Ngôn ng được đặc t bi các lut sinh.
- Phân tích cú pháp da vào lut sinh để xây dng cây phân tích cú pháp.
Ví d 1.3: Gi s ngôn ng đặc t bi các lut sinh sau :
Stmt id := expr
expr expr + expr | expr * expr | id | number
Vi câu nhp: position := initial + rate * 60, cây phân tích cú pháp đưc xây dng
như sau :
Stmt
expr
expr
expr
expr
:=
+
id
id
number
id
60
rate
initial
expr
position
Hình 1.4 - Mt cây phân tích cú pháp
Cu trúc phân cp ca mt chương trình thường được din t bi quy lut đệ qui.
Ví d 1.4:
1) Danh biu (identifier) là mt biu thc (expr).
2) S (number) là mt biu thc.
3) Nếu expr1 và expr2 là các biu thc thì:
expr1 + expr2
expr1 * expr2
(expr)
4
cũng là nhng biu thc.
Câu lnh (statement) cũng có th định nghĩa đệ qui :
1) Nếu id1 là mt danh biu và expr2 là mt biu thc thì id1 := expr2 là mt
lnh (stmt).
2) Nếu expr1 là mt biu thc và stmt2 là mt lnh thì
while (expr1) do stmt2
if (expr1) then stmt2
đều là các lnh.
Người ta dùng các qui tc đệ qui như trên để đặc t lut sinh (production) cho
ngôn ng. S phân chia gia quá trình phân tích t vng và phân tích cú pháp cũng
tu theo công vic thc hin.
3. Phân tích ng nghĩa (Semantic Analysis)
Giai đon phân tích ng nghĩa s thc hin vic kim tra xem chương trình ngun
có cha li v ng nghĩa hay không và tp hp thông tin v kiu cho giai đon sinh mã
v sau. Mt phn quan trng trong giai đon phân tích ng nghĩa là kim tra kiu (type
checking) và ép chuyn đổi kiu.
Ví d 1.5: Trong biu thc position := initial + rate * 60
Các danh biu (tên biến) được khai báo là real, 60 là s integer vì vy trình biên
dch đổi s nguyên 60 thành s thc 60.0
+
*
position
initial
60
rate
:
=
thành
:=
+
*
p
osition
initial
inttoreal
rate
60.0
Hình 1.5 - Chuyn đổi kiu trên cây phân tích cú pháp
5