Tải bản đầy đủ (.pdf) (17 trang)

Giới thiệu trình biên dịch

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (294.23 KB, 17 trang )


hbiê
dị
h
T
r
ì
n
h

biê
n
dị
c
h

i
1
T


i

1


T

ng quan
Các chủ đề chính


Thế nào là
trì
nh biên
dị
ch

Thế

nào



trì
nh

biên

dị
ch
•Sự cần thiết của trình biên dịch
•Những yêu cầu đối với một trình biên dịch
T ihiêứ tì hbiê dị h

T

i
sao ng
hiê
n c


u
t
r
ì
n
h

biê
n
dị
c
h
•Cấu trúc chung của trình biên dịch
– Trình biên dịch 2 chuyến
– Trình biên dịch 3 chuyến
–Các kỹ thuật dịch
•Các
p
ha của trình biên d

ch
p ị
– Phân tích từ vựng
– Phân tích cú pháp

Phân

ch ng
ữ nghĩ
a

Phân


ch

ng


nghĩ
a
– Phát sinh mã trung gian
–Tối ưu mã

Phá
tsinh

2
Phá
t

sinh


• Các công cụ xây dựng trình biên dịch
•Các chương trình hỗ trợ
Thế nào là trình biên dịch
• Trình biên dịch là một phần mềm có nhiệm vụ chuyển một
chương trình, được viết bởi ngôn ngữ nguồn, sang chương
trình tương đương, biểu diễn bởi ngôn ngữ đích.
– Ngôn ngữ nguồn thường là các ngôn ngữ cấp cao.

– Ngôn ngữ đích: thường là ngôn ngữ cấp thấp (mã máy hay
mã hợp ngữ).
Thô

á
l

i

h

h

đ

thi


Thô
ng

o c
á
c
l

i
c

a c

h
ương
t
r
ì
n
h
ngu

n,
đ
ược p

t

hi

n
trong quá trình dịch.
3
Ví dụ: Thế giới của con người và máy tính
ồ ế ằ ấ
1. Mã ngu

n được vi
ế
t b

ng ngôn ngữ c


p cao.
2. Thông thường được dịch sang mã hợp ngữ của hệ thống.
3
Trình biên dịch hợpngữ (củahệ thống) tiếptụcdịch sang
Mã nguồnviết
Mã hợpngữ
Mã máy
3
.
Trình

biên

dịch

hợp

ngữ

(của

hệ

thống)

tiếp

tục

dịch


sang

mã máy.
7F45 4C46 0102 0100 0000 0000 0000 0000 0002 0002 0000 0001 0001 04A0
0000 0034 0000 1474 0000 0000 0034 0020 0005 0028 001B 0019 0000 0006
0000 0034 0001 0034 0000 0000 0000 00A0 0000 00A0 0000 0005 0000 0000
0000 0003 0000 00D4 0000 0000 0000 0000 0000 0011 0000 0000 0000 0004
int main(void) {
int
a
b
s
;


nguồn

viết

bằng ngôn ngữ C


hợp

ngữ

(Hệ thống SPARC)



máy
0000 0000 0000 0001 0000 0000 0001 0000 0000 0000 0000 0782 0000 0782
0000 0005 0001 0000 0000 0001 0000 0784 0002 0784 0000 0000 0000 0188
0000 01A4 0000 0007 0001 0000 0000 0002 0000 0838 0002 0838 0000 0000
0000 00B8 0000 0000 0000 0007 0000 0000 2F75 7372 2F6C 6962 2F6C 642E
736F 2E31 0000 0000 0000 0017 0000 0016 0000 0000 0000 0001 0000 0002
0000 0000 0000 0003 0000 0004 0000 0006 0000 0007 0000 0009 0000 0000
0000 000A 0000 000C 0000 000D 0000 000E 0000 0000 0000 0000 0000 000F
0000 0010 0000 0000 0000 0011 0000 0012 0000 0013 0000 0015 0000 0000
0000 0000 0000 0000 0000 0000 0000 0005 0000 0000 0000 0000 0000 0008
int
a
,
b
,
s
;
printf("Enter two integers: ");
scanf("%d %d", &a, &b);
s = a*a + b*b;
printf("%d^2 + %d^2
=
%
d
\
n"
,
a,
b,
s)

;
0000 0000 0000 0000 0000 000B 0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0014 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0002 0924 0000 0004
1100 0014 0000 000A 0001 0782 0000 0000 1100 000C 0000 0011 0002 07A4
0000 0000 1100 000E 0000 002B 0002 07D4 0000 0000 1200 0000 0000 0032
0002 081C 0000 0000 1200 0000 0000 0038 0000 0000 0000 0000 2000 0000
0000 004E 0002 0928 0000 0000 1100 0014 0000 0053 0002 0838 0000 0000
1100 000F 0000 005C 0002 0924 0000 0004 2100 0014 0000 0064 0002 0810
0000 0000 1200 0000 0000 006B 0002 0784 0000 0000 1100 000D 0000 0081
0002
0828
0000
0000
1200
0000
0000
008
0002
0
E
0
0000
0000
1200
0000
%
d
\
,

a,
b,
s)
;
}
4
0002
0828
0000
0000
1200
0000
0000
008
7
0002
0
7
E
0
0000
0000
1200
0000
0000 008C 0002 090C 0000 0000 1100 0013 0000 0093 0002 07EC 0000 0000
1200 0000 0000 0099 0001 0714 0000 001C 1200 000A 0000 009F 0001 0730
0000 0014 1200 000B 0000 00A5 0001 04A0 0000 0074 1200 0009 0000 00AC
0000 0000 0000 0000 2000 0000 0000 00C4 0001 0748 0000 0004 1100 000C
0000 00D1 0001 0634 0000 007C 1200 0009 005F 656E 7669 726F 6E00 5F65
7465 7874 005F 5052 4F43 4544 5552 455F 4C49 4E4B 4147 455F 5441 424C


Sự cần thiết của trình biên dịch
•Những khó khăn khi sử dụng ngôn ngữ cấp thấp (hợp ngữ
hay ngôn ngữ máy)
–Viết mã nhiều, kém thân thiện.
–Hỗ trợ tìm lỗi kém.




Kh

năng b

o trì th

p.
–Trở ngại trong việc đọc và hiểu chương trình.
S
ra đ

i
củ
a ngôn ng

l

p
trì
nh c


pcao
àtrì
nh biên
dị
ch

S

ra

đ

i

củ
a

ngôn

ng


l

p

trì
nh


c

p

cao
v
à

trì
nh

biên

dị
ch

đã giải phóng những tiềm năng to lớn trong việc viết
chương
trì
nh.
chương

trì
nh.
•Hợp ngữ vẫn được sử dụng trong một số ít trường hợp:

Tr
uy
x
u


t

đế
n

c


i n
guyê
n
c

p

t
h

p
.
5
uy u

t
đế

c

guyê c


pt

p
–Các đoạn mã tương đối nhỏ, thời gian thực thi nhanh.
Những yêu cầu đối với một trình biên dịch
• Trình biên dịch bản thân phải là một phần mềm không
chứa lỗi.
•Mã đích được phát sinh phải hoàn toàn tương đương
với mã nguồnkhithựcthi
với



nguồn

khi

thực

thi
.
• Trình biên dịch cần phải khả chuyển (hỗ trợ biên dịch
riêng)
riêng)
.
•Thời gian biên dịch nhanh.
Thờii th thi ã đ biê dị hh h

Thời

g
i
an
th
ực
thi
m
ã

đ
ược
biê
n
dị
c
h
n
h
an
h
.
•Kết xuất thông báo lỗi chính xác và có thông điệp rõ
6
ràng.
Tại sao nghiên cứu trình biên dịch
•Thế giới riêng trong ngành Khoa học máy tính
• Để xây dựng một trình biên dịch, cần hội tụ nhiều kiến thức:
–Trí tuệ nhân tạo: các giải thuật máy học, heuristic, …
–Cấu trúc dữ liệu và giải thuật: kỹ thuật băm, các giải thuật đồ
thị qui hoạch động

thị
,
qui

hoạch

động
, …
– Các mô hình tính toán, lý thuyết ngôn ngữ hình thức, toán rời
rạc, l
ý
thu
y
ết
g
iàn tron
g

p
hân tích, …
ýyggp
–Kiến trúc máy tính: quản lý đa luồng, quản lý tập chỉ thị lệnh,
phân cấp bộ nhớ, …
ầ ề

Công nghệ ph

n m

m

–Xử lý song song
Lý thuyếtvề ngôn ngữ lập trình (truyền tham số phạmvicủa
7



thuyết

về

ngôn

ngữ

lập

trình

(truyền

tham

số
,
phạm

vi

của


biến, quản lý bộ nhớ, con trỏ, …)
Cấu trúc chung của trình biên dịch
Trình biên
dịch
Chương trình
nguồn
Chương trình
đích
Kết
quả
Lỗi Dữ liệu nhập
8
Trình biên dịch 2 chuyến (2-pass)
Ch
ế
t
ướ


Ch
ế


IR
Bảng danh biểu
Ch
uy
ế
n
tr

ướ
c

(front-end)

nguồn
Ch
uy
ế
n

sau

(back-end)

đích
IR

IR
(
Intermediate Representation
):

trung gian
Lỗi
IR

(
Intermediate


Representation
):



trung

gian
.
• Chuyến trước: còn được gọi là phần Phân tích

Chuy

n

ngu

n
(
h

pl

)
sang

trung gian
Chuy

n




ngu

n

(
h

p

l

)

sang



trung

gian
.
–Tập hợp các thông tin và lưu vào bảng danh biểu.

Chuy
ế
nsau
:


n đ
ượ
c
gọ
i

ph

n
T

ng h

p
9
Chuy
ế
n

sau
:


n

đ
ượ
c


gọ
i



ph

n

T

ng

h

p
– Chuyển mã trung gian sang mã đích.
Sự ngụybiện!?!
Fortran
Front
Fortran
Front
Fortran
code
C++
Front
end
Front
Back
end

SPARC
system
Fortran
code
C++
Front
end
Front
Back
end
SPARC
system
IRs
code
Basic
code
end
Front
end
Back
end
Pentium
system
IR
code
Basic
code
end
Front
end

Back
end
Back
Pentium
system
PowerPC
ADA
code
Front
end
Back
end
PowerPC
system
ADA
code
Front
end
Back
end
PowerPC
system
•Xây dựng (m  n) trình biên dịch từ (m + n) thành phần?
• Câu trả lời: Phải tìm được mã trung gian (IR) thỏa:
Mã hóa được toàn bộ tri thứccủa
từng
chuyếntrước




hóa

được

toàn

bộ

tri

thức

của

từng
chuyến

trước
.
–Biểu diễn được mọi đặc tính trong một bộ mã trung gian.
–Xử lý được mọi đặc trưng trong từng chuyến sau.
10
•Chỉ đạt thành công hạn chế với mã trung gian mức thấp.
– Ứng dụng ở mức (1 + n) với ngôn ngữ như Java
Trình biên dịch 3 chuyến (3-pass)
Bảng danh biểu
Chuyến trước
(front-end)

nguồn

Chuyến sau
(back-end)

đích
IR
Chuyến giữa
(middle-end)
IR
Lỗi
T

i ưu
1
T

i ưu
2
T

i ưu
n
IR IR IRIR
T

i ưu
1
T

i ưu
2


T

i ưu
n
L

i
11
L

i
Các kỹ thuật dịch
Biên dịch
Thông dịch
Kỹ thuậtlai
Biên

dịch
(Compiler)
Thông

dịch
(Interpreter)
Kỹ

thuật

lai
(Hybrid)

Cổ điển Just-In-Time
Mã nguồn
Tì hbiê dị h
Mã nguồn
Dữ liệu
Mã nguồn
Trình
Mã nguồn
Trình biên dịch
ế
T
r
ì
n
h

biê
n
dị
c
h
(Chuyến trước)
Trình thông dịch
(máy ảo)
Trình

biên dịch
(Chuy
ế
n trước)

Mã trung gian

trung gian
Dữ liệu
Kết quả

máy
Dữ liệu
Trình biên dịch
(Chuyến sau i)
Trình thông dịch
(máy ảo i)
Máy tính
ế
Má tí h
i
Mã máy i
12
Kết quả
K
ế
t quả
Kết quả

y

n
h

i

Các pha của
trình biên dịch
Phân

ch t

v

ng
Chương trình nguồn
Phân

ch t

v

ng
Phân tích cú pháp
Luồng token
Phân tích ngữ nghĩa
Cây phân tích cú pháp
Cây
cú phá
p tr

u t
ượ
ng
Bả
dh bi


Phát sinh mã trung gian
Cây
cú phá
p tr

u t
ượ
ng
Mã trung gian
Bả
ng
d
an
h bi

u
Bộ xử lý lỗi
Cây cú pháp
úí
Tối ưu mã trung gian

h
ã
đ
í
h
Mã trung gian
ch
ú

th
í
ch
P

t sin
h
m
ã

đ
í
c
h
Mã đích
Tối ưu mã đích
13
Mã đích
Phân tích từ vựng
(
Lexical analysis/Scanning
)
(
Lexical

analysis/Scanning
)

Đ


clu

ng

t
ự củ
achương
trì
nh ngu

n
Đ

c

lu

ng



t


củ
a

chương

trì

nh

ngu

n
.
• Nhóm các ký tự thành các lexeme (có nghĩa).
V

i

i
l
b



ht


V

i
m

i

l
exeme,
b


p

n

c
h

t

vựng:
–Tạo token tương ứng và gửi cho bộ phân tích cú pháp.
–Lưu thông tin vào bảng danh biểu.
•Loại trừ các khoảng trắng (tab, blank, comment, …).
•Kiểm tra lỗi từ vựng.
14
position = initial + rate * 60
Bộ phân tích từ vựng

id,
1


=


id,
2



+


id,
3


*


60


id,

1




id,

2


+


id,


3




60

1 position …
2 initial …
3
t
3
ra
t
e …
Bản
g
danh biểu
15
g
Phân tích cú pháp
(
St li/P i
)
(
S
yn
t
ax ana
l

ys
i
s
/P
ars
i
ng
)

S
ử dụ
ng
token
để
xây d

ng cây phân

ch
cú phá
p(
parse
S


dụ
ng

token


để

xây

d

ng

cây

phân


ch



phá
p

(
parse

tree).
Cây phân

ch
cú phá
pmô
tả

c

u
trú
cvăn
phạ
m
củ
alu

ng

Cây

phân


ch



phá
p



tả

c


u

trú
c

văn

phạ
m

củ
a

lu

ng

token.
Văn
phạ
m phi ng
ữ cả
nh (
contex
free grammar
CFG
)
đ
ượ
c


Văn

phạ
m

phi

ng


cả
nh

(
contex
-
free

grammar



CFG
)

đ
ượ
c


sử dụng để mô tả cấu trúc văn phạm của các ngôn ngữ lập
trì
nh.
trì
nh.
•Kiểm tra lỗi cú pháp.
16
Văn phạm phi ngữ cảnh
•Gọi văn phạm phi ngữ cảnh G = (S, N, T, P), với:

S: K
ý
hi

u bắt đầu của văn
p
h

m.
ý

p ạ
–N: Tập các ký hiệu không kết thúc.
–T: tập các ký hiệu kết thúc.
–P: tập các luật sinh có dạng A  B với A  N và B  N  T.
•Ví d

:

1. <assign>  id = <expr>

2. <expr>  <expr> + <term> | <term>
3. <term>  <term> * <fact> | <fact>
4. <fact>  id | num
17
id, 1=id, 2+id, 3*60
Bộ phân tích cú pháp
<assign> =
<id, 1> = <expr>
<expr>
+
<term>
<id, 1> +
<id, 2> *
<expr>
+
<term>
<term>
<term> * <fact>
<id, 3> 60
<fact>
<id
2
>
<fact>
<id
3
>
60
18
<id

,

2
>
<id
,

3
>
Cây phân tích cú pháp
Cây cú pháp trừu tượng
Phân tích ngữ nghĩa
(
Semantic analysis
)
(
Semantic

analysis
)
•Sử dụng cây cú pháp trừu tượng và bảng danh biểu để
ki

t“
ữ hĩ

ki

m
t

ra

ng

ng

a

.
–Biến sử dụng đã được khai báo?
T

h
thô ti
l t

lê â
úhá
à
/
h

bả

T

p
h
ợp
thô

ng
ti
n,
l
ưu
tr



n c
â
y c
ú
p

p v
à
/
h
o

c
bả
ng
danh biểu.

Ti
ế
n


nh ki

mtraki

u(
type checking
):

Ti
ế
n


nh

ki

m

tra

ki

u

(
type

checking
):


– Toán tử có phù hợp với toán hạng.

Chỉ
s
ố mả
ng
có phả
i

ki

us

nguyên?
Chỉ

s


mả
ng



phả
i




ki

u

s


nguyên?
–Kiểu của toán hạng bên trái và phải phép gán có phù hợp?


19
•Thực hiện chuyển kiểu (coercion)
=
<id
1
>
+
<id
,

1
>
+
<id, 2> *
<id, 3> 60
=
Bộ phân tích ngữ nghĩa
<id, 1> +
<id, 2> *

<id
3
>
int
2
float
Chuyển kiểu
20
<id
,

3
>
int
2
float
60
Phát sinh mã trung gian
(
Intermediate Code Generation
)
(
Intermediate

Code

Generation
)

Trì

nh biên
dị
ch

th

phát sinh m

tho

cnhi

ubi

udi

n
Trì
nh

biên

dị
ch



th



phát

sinh

m

t

ho

c

nhi

u

bi

u

di

n

trung gian.


y

p


p
t
r
ừu tượn
g

(
hi
g
h
-
level IR
)
.
y
p
p
g(
g
)
– Mã 3 địa chỉ, mã máy ngăn xếp (low-level IR).
•IR cấ
p
thấ
p

g
iốn
g

như chươn
g
trình được viết bằn
g
n
g
ôn
p
pg
g g
gg
ngữ của một máy ảo, có ưu điểm:
–Dễ dàng sản sinh.
–Dễ dàng dịch sang mã đích.
–Hoặc có thể chạy trực tiếp trên máy ảo.
21
Mã 3 địa chỉ
(
Three
Address Code
)
(
Three
-
Address

Code
)

Tương t


như

ccâul

nh h

png

Tương

t


như


c

câu

l

nh

h

p

ng


.
•Chứa tối đa 3 toán hạng trên một chỉ thị.
M

i

h
đ
ó
i

h

tth h hi

M

i

t
o
á
n
h
ạng
đ
ó
ng va
i


t
r
ò
n
h
ư m

t

th
an
h
g
hi
.
•Chứa tối đa một toán tử bên vế phải của chỉ thị.
 Thứ tự các chỉ thị sẽ cố định thứ tự các toán tử được thực
thi.
•Khi cần thiết, các tên tạm (temporary name) có thể được
sinh ra để chứa giá trị trung gian khi tính toán.
22
Ví dụ: Biểu diễn trung gian cho biểu thức x – 2  y
23
=
<id, 1> +
id
2
*
<

id
,

2
>
*
<id, 3> int2float
60
B
ộ phá
t sinh

trung gian
B
ộ phá
t sinh

trung gian
t1 = int2float(60)
t2 = id3 * t1
t3 = id2 + t2
id1 = t3
24
Tối ưu mã
(
Code Optimization
)
(
Code


Optimization
)
•Cải tiến mã trung gian để cho ra mã đích “tốt hơn”.
•“Tốt hơn”: tùy trường hợp cụ thể
– Nhanh hơn.
– Mã ngắn hơn.
–Mã đích tiêu hao ít năng lượng hơn.
• Các trình biên dịch có pha “tối ưu mã” gọi là “optimizing
compiler”  mất nhiều thời gian hơn.
• Có 2 loại tối ưu, liên quan đến phần cứng
–Phụ thuộc phần cứng: tối ưu trên mã đích.
25
– Độc lập phần cứng: tối ưu trên mã trung gian.
Tối ưu mã …
•Bộ tối ưu mã phải thỏa các tiêu chí sau:
Mã đượctối ưuphải đúng nghĩa là duy trì ngữ nghĩacủa



được

tối

ưu

phải

đúng
,
nghĩa




duy

trì

ngữ

nghĩa

của

chương trình được biên dịch.
Sự tối ưuphảicảitiến đượcsự thựcthicủamãbanđầu

Sự

tối

ưu

phải

cải

tiến

được


sự

thực

thi

của



ban

đầu
.
 Với hệ thống nhúng: Tối thiểu hóa kích thước mã phát sinh.

Vớithiếtbị di động: Tốithiểu hóa năng lượng sử dụng

Với

thiết

bị

di

động:

Tối


thiểu

hóa

năng

lượng

sử

dụng
.
 Tăng tốc độ thực thi.
Thời gian cho quá trình tối ưumãlàhợplý

Thời

gian

cho

quá

trình

tối

ưu






hợp


.
– Duy trì chi phí phát triển cũng như bảo trì toàn hệ thống biên
dịch ở mứchợplý
26
dịch



mức

hợp


.
Bộ phát sinh mã
(
Code Generation
)
(
Code

Generation
)
•Bộ phát sinh mã:

–Nhập: IR của chương trình nguồn.
–Xuất: mã của ngôn ngữ đích.
• Ngôn ngữ đích:
–Mã máy:
 Mỗi chỉ thị của mã trung gian được dịch thành dãy các mã máy.
 Thanh ghi/bộ nhớ thay thế các biến trong chương trình.

T

d
khả
ă
ử d
th h hi

T

n
d
ụng
khả
n
ă
ng s


d
ụng
th
an

h
g
hi
.
–Mã dạng hợp ngữ:

Ti
ế
p
tụ
cs
ử dụ
ng
trì
nh biên
dị
ch h

png
ữ để dị
ch sang
mã má
y
27

Ti
ế
p

tụ

c

s


dụ
ng

trì
nh

biên

dị
ch

h

p

ng


để

dị
ch

sang





y
.
t1 = int2float(60)
t2 = id3 * t1
t3 = id2 + t2
id1 = t3
Bộ tối ưu mã
t1 = id3 * 60.0
id1 = id2 + t1
Bộ phát sinh mã
LDF R2, id3
MULF R2, R2, #60.0
LDF R1, id2
28
ADDF R1, R1, R2
STF id1, R1
Bảng danh biểu
(
Symbol Tables
)
(
Symbol

Tables
)
•Bản chất của trình biên dịch là
Ghi h


á
dhbi

đ
ử d
th

h

Ghi
n
h

n c
á
c
d
an
h

bi

u
đ
ược s


d
ụng

t
rong c
h
ương
t
r
ì
n
h
.
–Tập hợp các thông tin về những thuộc tính của danh biểu:


ng nh

đ
ượ
cc

p
phá
t


ng

nh


đ

ượ
c

c

p

phá
t
.
 Kiểu dữ liệu.
 Ph

m vi.

 Số lượng tham số truyền, kiểu tham số, kiểu truyền, kiểu trả về,
… (nếu danh biểu là tên chương trình con).
•Bảng danh biểu là cấu trúc dữ liệu gồm nhiều bản ghi
chứa:

29

Tên danh bi

u.
–Các trường (fields) tương ứng với các thuộc tính.
Xử lý lỗi
(
Error Handling
)

(
Error

Handling
)


cl

i
chủ
y
ế
u đ
ượ
c

m

x
ử lý
trong
chuyếntrước

c

l

i


chủ

y
ế
u

đ
ượ
c


m



x




trong

chuyến

trước
.
• Phân tích từ vựng:


t

óhì
h
thà

tk
?


c


t
ự c
ó


n
h

thà
n
h
n
ê
n
t
o
k
en
?

• Phân tích cú pháp:
–Luồng token có vi phạm luật cú pháp của ngôn ngữ?
• Phân tích ngữ nghĩa:
–Xảy ra: <tên mảng> + <tên thủ tục>?
–Chỉ mục mảng có phải là số nguyên?
30
Các công cụ xây dựng trình biên dịch
•Lợi ích của việc sử dụng các công cụ:

Tránh nhữn
g
chi tiết
p
hức t

p
của
g
iải thu

t.
g
p

p
g

–Dễ dàng tích hợp kết quả thành phần vào trình biên dịch.

M


ts

công
cụ
thông
dụ
ng:

M

t

s


công

cụ

thông

dụ
ng:
– Scanner generator: phát sinh bộ phân tích từ vựng từ những

tả
token
b


ng bi

uth

c
chí
nh qui


tả

token

b

ng

bi

u

th

c

chí
nh

qui
.

– Parser generator: phát sinh bộ phân tích cú pháp từ những

tả
văn
phạ
m
củ
angônng

ngu

n


tả

văn

phạ
m

củ
a

ngôn

ng


ngu


n
.
– Code-generator generator: tạo bộ phát sinh mã, dựa trên tập
lu

t
dị
ch
chỉ thị củ
a

trung gian sang ngôn ng

đ
í
ch
31
lu

t

dị
ch

chỉ

thị

củ

a



trung

gian

sang

ngôn

ng


đ
í
ch
.
–…
Các chương trình hỗ trợ
Chương trình nguồn
Chương

trình

nguồn
Bộ tiền xử lý
Chương trình nguồn
(đã hiệu chỉnh)

Trình biên dịch
Mã hợpngữ
Trình biên dịch hợp ngữ


hợp

ngữ

Bộ liên kết/Bộ nạp
Mã máy khả tái định vị
•Tập tin mã đ

i tượng
khả tái định vị
•Hàm thư viện
32
Bộ

liên

kết/Bộ

nạp
Mã máy đích
Các chương trình hỗ trợ
•Bộ tiền xử lý (Preprocessor)
– “Bung” các macro.
–Kết nối các file nguồn được lưu trữ riêng.
• Trình biên dịch hợ

p
n
g

(
A
ssembler
)
pg(
)
– Phát sinh mã máy đích từ mã hợp ngữ.
•B

liên kết
(
Linker
)
ộ (
)
– Liên kết các file mã khả tái định vị được biên dịch riêng.

Kết nối đ

a chỉ c

thể của các hàm thư vi

n ho

c hàm h



ị ụ ệ


thống với những lời gọi hàm trong chương trình.
•Bộ nạ
p

(
Loader
)
: tải các file mã đối tượn
g
vào bộ nhớ,
33
p(
) g
chuẩn bị thực thi chương trình.

×