trình biên dịch

Download Report

Transcript trình biên dịch

MÔN HỌC TRÌNH
BIÊN DỊCH
Số tiết: 45t
Trường: Đại học Công Nghiệp
GV: Nguyễn Trần Cao Tấn Khoa
1
NỘI DUNG MÔN HỌC


Môn học Trình biên dịch hay còn gọi là Chương
trình dịch sẽ giới thiệu những nguyên tắc và kỹ
thuật cơ bản để cài đặt một trình biên dịch.
Những kiến thức này sẽ giúp hiểu được cơ cấu và
cách vận hành trong các trình biên dịch của các
ngôn ngữ lập trình thông dụng như Pascal, C, C++
và Java, nhờ đó hiểu thấu đáo hơn về các ngôn ngữ
này, giúp nâng cao kỹ năng lập trình và gỡ lỗi
chương trình.
2
NỘI DUNG CỤ THỂ





Mô hình biên dịch phân tích-tổng hợp
Các kỹ thuật phân tích từ vựng
Lý thuyết phân tích cú pháp LL, LR
Phân tích ngữ nghĩa
Tổ chức bộ nhớ lúc chương trình hoạt động (môi
trường lúc thực thi)
3
TÀI LIỆU THAM KHẢO
1. Aho, Sethi, and Ullman [1986]. Compilers:
Principles, Techniques, and Tools, AddisonWesley, Reading Mass., 1986. (Bản dịch tiếng Việt
gồm hai tập với tựa đề: Trình biên dịch: Nguyên lý,
Kỹ thuật và Công cụ, nhà xuất bản Thống kê,
2000-2001).
2. Trần Đức Quang. Trình biên dịch thiết kế và cài đặt,
nhà xuất bản đại học quốc gia tp HCM.
3. Phan Thị Tươi. Trình biên dịch, nhà xuất bản giáo
dục.
4
KIỂM TRA VÀ TÍNH ĐIỂM
1. Một bài thi lý thuyết giữa kỳ.
2. Một bài thi lý thuyết ngay sau khi kết thúc môn học.
3. Một bài đồ án lập trình: Thiết kế và cài đặt một trình
biên dịch cho một ngôn ngữ lập trình đơn giản.
(thời hạn nộp sẽ thông báo sau).
Nguyên tắc tính điểm:
1. Điểm thi lý thuyết giữa kỳ: 2 điểm (tối đa).
1. Điểm thi lý thuyết cuối khóa: 5 điểm (tối đa).
2. Bài tập lập trình: 3 điểm (tối đa).
Các bài nộp chỉ được phép trễ trong vòng 24 giờ (một
ngày) và bị trừ 25% trên điểm số nhận được.
5
CHƯƠNG 1
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
1. Ngôn ngữ lập trình:
1.1 Giới thiệu:
 Con người muốn máy tính thực hiện công việc,
phải viết các yêu cầu đưa cho máy bằng ngôn ngữ
máy hiểu được.
 Việc viết các yêu cầu ta gọi là lập trình
 Ngôn ngữ dùng để lập trình được gọi là ngôn ngữ
lập trình
6
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
1.2 Phân loại:

Ngôn ngữ máy.

Hợp ngữ.

Ngôn ngữ cấp trung.

Ngôn ngữ cấp cao.
1.3 Chương trình:

Tập hợp các yêu cầu được sắp đặt hợp lý để máy thực hiện.

Các yêu cầu có thể được diễn tả bằng nhiều ngôn ngữ khác
nhau, thế nhưng máy tính chỉ hiểu được một ngôn ngữ duy
nhất: ngôn ngữ máy (machine language).
7
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
1.4 Phiên dịch (translation):
 Quá trình biến đổi một chương trình được viết
bằng một ngôn ngữ (ngôn ngữ nguồn) thành một
chương trình tương đương nhưng được diễn tả
bằng một ngôn ngữ khác (ngôn ngữ đích).
 Ngôn ngữ đích thường là ngôn ngữ máy.
 Có hai dạng phiên dịch:
8
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
1.4.1 Biên dịch (compilation):
 Chương trình nguồn được ghi trong các tập tin rồi
được dịch thành chương trình đích và được ghi lại
trong các tập tin.
 Sau đó chúng ta có thể cho chương trình chạy bằng
cách "mở" tập tin chứa chương trình đích ra.
 Công việc này tương tự như công việc của một
chuyên gia dịch thuật khi thực hiện dịch một văn
bản (tác phẩm văn học, tài liệu kỹ thuật).
9
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
10
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
1.4.2 Thông dịch (interpretation):
 Chương trình nguồn được dịch rồi cho thực hiện
ngay mà không ghi lại bản dịch.
 Công việc này tương tự như công việc của một
thông dịch viên.
11
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
12
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH



Chương trình chịu trách nhiệm dịch từ một ngôn
ngữ này sang một ngôn ngữ khác được gọi chung
là chương trình dịch (translator) và có thể được
chia thành hai loại:
Trình biên dịch (compiler)
Trình thông dịch (interpreter).
13
TRÌNH BIÊN DỊCH
1. Các thành phần của trình biên dịch:
1.1 Phân tích từ vựng:
Nhận dạng token.
Token: danh biểu, hằng, từ khóa, các toán tử phép toán, các ký
hiệu phân cách, khoảng trắng, các ký hiệu đặc biệt
Ví dụ:
COST := ( PRICE + TAX )*65
Đầu ra của bộ phân tích từ vựng:
(<id,1>) := ( (<id,2>) + (<id,3>) ) * (<num>,4)
Viết gọn: id1 := (id2 + id3) * num4
14
TRÌNH BIÊN DỊCH
1.2 Bảng danh biểu
Ví dụ: COST := (PRICE + TAX) * 65
Bảng danh biểu
15
TRÌNH BIÊN DỊCH
1.3 Phát hiện và thông báo lỗi:
1.4 Phân tích cú pháp
Vídụ: COST := (PRICE + TAX) * 65
Kết quả phân tích từ vựng:
id1 := ( id2 + id3 )* num4
16
TRÌNH BIÊN DỊCH

Kết quả phân tích cú pháp:
Cây cú pháp của phát biểu
17
TRÌNH BIÊN DỊCH
1.5 Phân tích ngữ nghĩa:
Cây cú pháp có xử lý ngữ nghĩa
18
TRÌNH BIÊN DỊCH
1.6 Sinh mã trung gian:
temp1:= intoreal(65)
temp2:= id2+ id3
temp3:= temp2* temp1
id1:= temp3
1.7 Tối ưu mã trung gian:
temp1:= id2+ id3
id1:= temp1 * 65
19
TRÌNH BIÊN DỊCH
1.8 Sinh mã đối tượng:
movF id2, R1
movF id3, R2
addF R2, R1
multF# 65.0, R1
movF R1, id1
20
TRÌNH BIÊN DỊCH
21
TRÌNH BIÊN DỊCH
22
CÁC MỐI LIÊN QUAN VỚI TRÌNH
BIÊN DỊCH
1. Bộ tiền xử lý:
 Xử lý macro (macro processing)
 Chêm tập tin (file inclusion)
 Bộ xử lý hoà hợp (rational processor)
 Mở rộng ngôn ngữ (language extension)
23
CÁC MỐI LIÊN QUAN VỚI TRÌNH
BIÊN DỊCH
2. Trình biên dịch hợp ngữ:
Phát biểu gán b := a + 2 được dịch ra mã hợp ngữ
MOV a, R1
ADD #2 , R1
MOV R1, b
24
CÁC MỐI LIÊN QUAN VỚI TRÌNH
BIÊN DỊCH
3. Trình biên dịch hợp ngữ hai chuyến:
Chuyến thứ nhất: đọc mã hợp ngữ và tạo bảng danh biểu
Danh biểu
Điạ chỉ tương đối
a
0
b
4
Chuyến thứ hai: đọc mã hợp ngữ và dịch sang mã máy khả định
vị địa chỉ:
MOV a, R1
0001 010000000000*
ADD #2, R1
0010 0110 00000010 (1.6)
MOV R1, b
0100 010000000100*
25
CÁC MỐI LIÊN QUAN VỚI TRÌNH
BIÊN DỊCH
4. Bộ cất liên kết soạn thảo:
Loader là chương trình thực hiện hai nhiệm vụ: cất và soạn thảo
liên kết. Quá trình cất bao gồm lấy mã máy khả định vị tính
lại thành địa chỉ tuyệt đối. Như ở ví dụ phần 3: Giả sử mã
máy được cất trong bộ nhớ trong tại địa chỉ L = 00001111;
địa chỉ tuyệt đối của a, b là 00001111 và 00010011. Ba chỉ
thị (1.6) được viết lại dưới dạng mã máy tuyệt đối:
0001010000001111
0011011000000010 (1.7)
0010010000010011
Link-editor cho phép tạo một chương trình duy nhất từ nhiều tập
tin ở dạng mã máy khả định vị của những lần biên dịch
riêng biệt và từ các tập tin thư viện do hệ thống cung cấp.
26
CÁC MỐI LIÊN QUAN VỚI TRÌNH
BIÊN DỊCH
27
CÁC MỐI LIÊN QUAN VỚI TRÌNH
BIÊN DỊCH
5. Nhóm các giai đoạn của trình biên dịch
 Giai đoạn trước và giai đoạn sau(front end and
back end)
 Cácchuyến
 Thu giảmsốlượngcácchuyến
Thídụ:
goto L
:
goto L
:
L:a=b+c
28
MỘT SỐ CHƯƠNG TRÌNH
PHỤ TRỢ
Thông thường, trình biên dịch chỉ lo dịch một chương trình
nguồn được diễn tả bằng một ngôn ngữ cấp cao thành
chương trình được diễn tả ở dạng mã hợp ngữ. Do vậy
chúng ta cần có một số chương trình phụ trợ để hoàn tất
quá trình biên dịch.
1. Trình tiền xử lý (preprocessor). Để chuẩn bị một bản nguồn
hoàn chỉnh cho trình biên dịch, một ngôn ngữ có thể dùng
một trình tiền xử lý để thực hiện một lượt xử lý dựa vào các
chỉ dẫn (directives) do lập trình viên ghi trong bản nguồn.
Trình tiền xử lý của C là một thí dụ minh họa.

29
MỘT SỐ CHƯƠNG TRÌNH
PHỤ TRỢ
2. Trình dịch hợp ngữ (assembler). Thành phẩm của
trình biên dịch thường không phải là mã đích mà là
mã hợp ngữ (assembly code), và trách nhiệm dịch
từ mã hợp ngữ thành mã đích được trao lại cho
trình dịch hợp ngữ. Cách làm này tuy tốn thêm một
lượt biên dịch nhưng tạo thuận lợi cho việc viết
trình biên dịch và việc sửa lỗi chương trình.
30
MỘT SỐ CHƯƠNG TRÌNH
PHỤ TRỢ
3. Trình liên kết (linker) và trình tải (loader). Hai chương trình
này có liên quan mật thiết với hạ tầng (platform) hệ điều
hành và họ máy tính và có khi chúng được tích hợp thành
một chương trình.

Trình liên kết chịu trách nhiệm kết nối các mô đun đã được
biên dịch lại với nhau để tạo ra một chương trình hoàn
chỉnh có thể chạy được.

Trình tải thường là bộ phận của hệ điều hành chịu trách
nhiệm đưa bản dịch hoàn chỉnh vào bộ nhớ tại một vị trí
thích hợp để cho thực hiện. Muốn vậy trình tải phải sửa lại
các tham chiếu đến đúng địa chỉ bộ nhớ cho mỗi lần thực
thi cụ thể của chương trình.
31
32