Bài giảng Trình biên dịch - Chương 1: Giới thiệu về trình biên dịch

ặc tả ngôn ngữ lập trình

1. Tập các ký hiệu cần dùng trong các chương trình hợp lệ

2. Tập các chương trình hợp lệ

3. Nghĩa của chương trình hợp lệ

- Phương pháp thứ nhất là định nghĩa bằng phép ánh xạ. Sử

dụng phép toán hàm: hàm Lamda.

- Phương pháp thứ hai: Máy trừu tượng.

- Phương pháp thứ ba: Tập (x,y) là sự biên dịch

 

pdf 19 trang yennguyen 10280
Bạn đang xem tài liệu "Bài giảng Trình biên dịch - Chương 1: Giới thiệu về trình biên dịch", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Trình biên dịch - Chương 1: Giới thiệu về trình biên dịch

Bài giảng Trình biên dịch - Chương 1: Giới thiệu về trình biên dịch
MÔN HỌC 
TRÌNH BIÊN DỊCH
„ CHƯƠNG I
Giới thiệu về trình biên dịch
„ CHƯƠNG 2
Trình biên dịch đơn giản
„ CHƯƠNG 3
Phân tích từ vựng
„ CHƯƠNG 4
Phân tích cú pháp
„ CHƯƠNG 5 
Trình biên dịch trực tiếp cú
pháp
„ CHƯƠNG 6
Xử lí ngữ nghĩa
„ CHƯƠNG 7
Quản lí bộ nhớ trong thời
gian thực thi
„ CHƯƠNG 8
Tổ chức bảng danh biểu
„ CHƯƠNG 9
Sinh mã đối tượng
„ CHƯƠNG 10
Tối ưu mã
MỤC LỤC
TÀI LIỆU THAM KHẢO
1) Alfred V.Aho, Jeffrey D.Ullman (1986). Compilers, Principles techniques, and 
tools. Addison – Wesley Publishing Company.
2) Alfred V.Aho, Jeffrey D.Ullman (1972). The theory of parsing, translation and 
compiling. Prentice – Hall, inc.
3) Terrence W. Pratt. Programming Languages: design and implementation second 
edition. Prebtice – Hall International editions.
4)Allen I. Holub. Compiler design in C. Prentice – Hall International editions.
5) D. Gries (1976). Compiler construction. Springger – Verlag.
6) Jeffrey D. Ullman (1977). Fundamental concepts of programming system. Addion -
Wesley Publsihing Company.
7) Dương Tuấn Anh (1986) Giáo trình Trình biên dịch. Đại học Bách Khoa TP. Hồ
Chí Minh.
8) Nicklaus Wirth (1976), Algorithms + Data Structure = program. Prentice – Hall 
International editions.
9) Alfred V.Aho, Jeffrey D. Ullman (1977). Principles of compiler design. Addison –
Wesley, Reading, Mass. 
10) Lê Hồng Sơn, Luận văn tốt nghiệp “Xây dựng giải thuật tối ưu mã trung gian của
trình biên dịch” – Khoa CNTT Trường ĐH Bách khoa 2002.
11) Phan Thị Tươi (2001). Trình Biên Dịch. Đại học Bách Khoa TP. Hồ Chí Minh
YÊU CẦU
„ Phần Lý thuyết:
SV học 42 tiết lý thuyết
„ Phần Thực hành:
SV tham dự thực hành – thực hiện Bài tập Môn học 14t
(1 Bài tập Môn học / 1 SV)
„ Hình thức đánh giá:
„ Kiểm tra Bài tập Môn họcỈ Điểm TH
„ Thi viết Lý thuyết cuối kỳỈ Điểm LT
„ Cách tính điểm:
Điểm tổng kết môn = LT * 60% + BTTH * 40%
CHƯƠNG 1
GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH
1.1. Ngôn ngữ lập trình
1. Giới thiệu
Phân loại
Chương trình dịch
- Trình biên dịch
Dữ liệu
Chương
trình nguồn
Trình
biên dịch
Chương
trình đích
Máy tính
thực thi Kết quả
Hình 1.1. Chương trình thực thi theo cơ chế dịch của trình biên dịch
- Trình thông dịch
Đặc tả ngôn ngữ lập trình
1. Tập các ký hiệu cần dùng trong các chương trình hợp lệ
2. Tập các chương trình hợp lệ
3. Nghĩa của chương trình hợp lệ
- Phương pháp thứ nhất là định nghĩa bằng phép ánh xạ. Sử
dụng phép toán hàm: hàm Lamda.
- Phương pháp thứ hai: Máy trừu tượng.
- Phương pháp thứ ba: Tập (x,y) là sự biên dịch.
Chương trình
nguồn
Trình thông
dịch Kết quả
Dữ liệu
Hình 1.2. Chương trình thực thi theo cơ chế dịch của trình thông dịch
2. Cú pháp và ngữ nghĩa
- Ánh xạ cú pháp (syntactic mapping)
Hình 1.3 Cấu trúc cây của câu tiếng Anh: the pig is in the pen
the pig
is
the pen
- Ánh xạ cú pháp
a
+
∗
cb
Hình 1.4. Cây cú pháp của biểu thức số học a + b * c
1.2. Trình biên dịch
1. Các thành phần của trình biên dịch
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: 
() := ( () + () ) * (,4)
Viết gọn : id1 := (id2 + id3) * num4
Bộ phân tích từ vựng thao tác trực tiếp
Bộ phân tích từ vựng thao tác không trực tiếp
2. Bảng danh biểu
Ví dụ: COST := (PRICE + TAX) * 65
Bảng 1.1 Bảng danh biểu
Chỉ số token lexeme Các thông tin khác
1 id COST biến thực
2 id PRICE biến thực
3 id TAX biến thực
4 num 65 hằng số nguyên
3. Phát hiện và thông báo lỗi
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
Kết quả phân tích cú pháp:
Hình 1.6. Cây cú pháp của phát biểu
5. Phân tích ngữ nghĩa
Hình 1.7. Cây cú pháp có xử lý ngữ nghĩa
id1 :=
n2
n1
id2
num4*
id3+
n3
id1 := n2
n2
id2
intoreal (65)*
id3 65.0+
PRICE TAX
n3
6. Sinh mã trung gian
temp1 := intoreal (65)
temp2 := id2 + id3
temp3 := temp2 * temp1
id1 := temp3
7. Tối ưu mã trung gian
temp1 := id2 + id3
id1 := temp1 + 65.0
8. Sinh mã đối tượng
movF id2, R1
movF id3, R2
addF R2, R1
multF # 65.0, R1
movF R1, id1
Bộ phân tích từ vựng
Bộ phân tích cú pháp
Bộ phân tích ngữ nghĩa
id := (id2 + id3) * num4
COST := (PRICE + TAX) * 65
n1
id1 n2:=
n3 num4*
id2 + id3
n1
id1
n2:=
n3
id2 + id3
intoreal (65)*
Bộ sinh mã trung gian
Bộ tối ưu trung gian
Bộ sinh mã đối tượng
temp1 := intoreal (65)
temp2 := id3 + id3
temp3 := temp2 * temp1
id1 := temp3
temp1 := id2 + id3
id1 := temp1 * 65.0
movF id2 , R1
movF id3 , R2
ADDF R2 . R1
mulF # 65.0, R1
movF R1 ,id1
Hình 1.8. Biên dịch phát biểu
1.3. 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)
Thí dụ về xử lý macro:
- Hệ thống máy đánh chữ typesetting:
\define {}
Thí dụ macro định nghĩa về sự trích dẫn của tạp chí ACM:
\define\JACM # 1; #2; #3
{{\S1J.ACM}{\bf #1}: #2, pp.#3}
Khi dùng macro:
\JACM 17; 4; 715-728
Sẽ được hiểu như sau:
J.ACM 17 : 4 , pp. 715-728
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
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*
4. Bộ cất liên kết soạn thảo
Loader là chương trình thực hienä 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.
Chương trình nguồn viết tắt
Bộ tiền xử lý
Trình biên dịch
Trình biên dịch hợp ngữ
Bộ cất/ liên kết – soạn thảo
Chương trình nguồn
Chương trình đối tượng trong mã hợp ngữ
Chương trình trong mã máy khả định vị
Chương trình mã máy địa chỉ tuyệt đối
Hình 1.19. Hệ thống xử lý ngôn ngữ
Thư viện hệ thống, 
các tập tin đối tượng
khả định vị địa chỉ
1.4. 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ác chuyến
- Thu giảm số lượng các chuyến
Thí dụï: goto L
:
goto L
:
L : a = b + c
„
„

File đính kèm:

  • pdfbai_giang_trinh_bien_dich_chuong_1_gioi_thieu_ve_trinh_bien.pdf