Tải bản đầy đủ (.ppt) (30 trang)

Giới thiệu môn học chương trình 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 (435.18 KB, 30 trang )

Nguyễn Phương Thái
Bộ môn Khoa học Máy tính
/>Thông tin môn học

Giảng viên
Nguyễn Phương Thái
Trang nhà: />
Trợ giảng:
Lê Minh Khôi (Bộ môn Khoa học Máy tính)
Nguyễn Duy Khương (Phòng thí nghiệm Tương tác
Người-Máy)

Môn học tiên quyết: lập trình (C/C++, Java), toán rời
rạc, cấu trúc dữ liệu và giải thuật
22/10/14 2
Thông tin môn học

Sách và tài liệu tham khảo
[1] Bài giảng Lý thuyết và Thực hành Chương Trình Dịch. Lê
Anh Cường, Khoa Công nghệ, ĐHQG Hà Nội, 2004
[2] Giáo trình lý thuyết, thực hành môn học Chương trình
dịch. Phạm Hồng Nguyên, Khoa Công nghệ, ĐHQG Hà
Nội, 1998
[3] Ngôn ngữ hình thức. Nguyễn Văn Ba, ĐHBK Hà Nội, 1994
[4] Thực hành kỹ thuật biên dịch. Nguyễn Văn Ba, ĐHBK Hà
Nội, 1993
[5] Compiler: principles techniques and tools. A.V. Aho, Ravi
Sethi, D. Ulman, 1986
22/10/14 3
Thông tin môn học


Khóa học tương tự:


Trang web môn học (cho cả hai lớp K51CC và K51CD):
/>22/10/14 4
Chương trình dịch là gì?

Nhận dạng chương trình hợp lệ (hay không)

Sinh đúng (và hiệu quả) mã
22/10/14 5
Chương trình dịch
Mã đích
Mã nguồn
Lỗi
Các loại chương trình dịch

Trình biên dịch
→ Có nhiệm vụ dịch một chương trình từ ngôn ngữ này
sang ngôn ngữ khác (chương trình thực thi được)
→ Chương trình nên được cải tiến bằng cách này hay
cách khác

Trình thông dịch
→ Đọc một chương trình và sinh ra kết quả thực thi
chương trình đó
22/10/14 6
7
Ngôn ngữ máy, hợp ngữ, và ngôn
ngữ bậc cao

1. Ngôn ngữ máy

Đây là ngôn ngữ duy nhất máy tính có thể hiểu trực tiếp

“Ngôn ngữ tự nhiên” của máy tính

Được định nghĩa bằng cách thiết kế phần cứng

Phụ thuộc máy

Nói chung bao gồm các xâu của các số nhị phân

Ra lệnh cho máy tính thực hiện các phép toán cơ sở

Mỗi lần một lệnh

Khó hiểu với con người

Ví dụ:
+1300042774
+1400593419
+1200274027
8
Ngôn ngữ máy, hợp ngữ, và ngôn
ngữ bậc cao
2. Hợp ngữ

Sử dụng các từ viết tắt tiếng Anh để biểu diễn lệnh

Dễ hiểu hơn với con người


Nhưng lại không phải là “ngôn ngữ tự nhiên” của máy
tính

Cần các trình biên dịch: hợp ngữ  ngôn ngữ máy

Ví dụ:
LOAD BASEPAY
ADD OVERPAY
STORE GROSSPAY
9
Ngôn ngữ máy, hợp ngữ, và ngôn
ngữ bậc cao
3. Các ngôn ngữ bậc cao

Tương tự tiếng Anh ngày nay, sử dụng các ký hiệu toán
học thông dụng

Một câu lệnh đơn có thể thực hiện một khối lượng công
việc đáng kể so với chương trình tương ứng viết bằng
hợp ngữ

Ví dụ:
grossPay = basePay + overTimePay
Các nhiệm vụ của sinh viên

Học các kỹ thuật, thuật toán, và công cụ của chương
trình dịch

Học cách sử dụng chương trình dịch (và chương

trình gỡ rối) hiệu quả hơn

Hiểu hơn về hành vi của chương trình

Học cách xây dựng một hệ thống lớn và đáng tin cậy
22/10/14 10
Tri thức sinh viên cần đạt được

Ôtômát hữu hạn trạng thái và quan hệ với biểu
thức chính qui

Văn phạm phi ngữ cảnh và quan hệ với phân tích
cú pháp phi ngữ cảnh

Các chiến lược đặc tả ngôn ngữ hình thức

Phân tích từ dưới lên và từ trên xuống

Văn phạm thuộc tính

Kiểm tra kiểu

Máy ảo Java
22/10/14 11
Kỹ năng sinh viên cần đạt được

Có thể tự xây dựng các hệ phân tích từ tố, phân tích
cú pháp, phân tích ngữ nghĩa và sinh mã

Có thể sử dụng các công cụ xây dựng chương trình

dịch: từ vựng và cú pháp

Biết cách mô tả cú pháp và ngữ nghĩa của một ngôn
ngữ

Hiểu về sinh mã

Hiểu về máy ảo, đặc biệt là JVM
22/10/14 12
Kiến trúc của một chương trình dịch
22/10/14 13
Phân tích từ tố (từ vựng)
Phân tích ngữ nghĩa
Phân tích cú pháp
Sinh mã trung gian
Tối ưu mã
Sinh mã đích
Mã nguồn
Mã đích
Phân tích từ vựng

Nhiệm vụ

Nhóm các ký tự thành các từ tố các đơn vị của cú
pháp
Ví dụ: position = initial + rate * 60
Sẽ được phân tích là:
identifier position (tên)
assignment operator = (toán tử gán)
identifier initial (tên)

plus sign (dấu trừ)
multiplication sign (dấu nhân)
interger constant 60 (hằng số nguyên)

Xâu ký tự tạo thành từ tố gọi là từ vị
22/10/14 14
Phân tích cú pháp

Nhiệm vụ của hệ phân tích cú pháp (parser)

Nhóm các từ tố thành các cụm từ cú pháp

Biểu diễn các cụm từ cú pháp thành các cây cú pháp
trừu tượng AST (abstract syntax tree)

Sinh ra các thông báo lỗi đúng

Cố gắng phát hiện và khôi phục lỗi

Cú pháp của một ngôn ngữ lập trình thường được
mô tả bằng một văn phạm phi ngữ cảnh (context-free
grammar – CFG)
22/10/14 15
Ví dụ về văn phạm phi ngữ cảnh
22/10/14 16
22/10/14 17
Phân tích ngữ nghĩa

Nhiệm vụ của hệ phân tích ngữ nghĩa


Phát hiện lỗi ngữ nghĩa của chương trình, chẳng hạn:

Các biến có được khai báo trước khi sử dụng hay không?

Các toán hạng có tương thích về kiểu hay không?

Các thủ tục có được gọi với đúng số lượng và kiểu tham số hay
không?

Một công việc quan trọng: kiểm tra kiểu

Bảng ký hiệu (symbol table) sẽ được sử dụng
22/10/14 18
Sinh mã trung gian
Hệ sinh mã trung gian sinh ra một biểu diễn trung gian
(intermediate representation – IR)

Các đặc điểm quan trọng của IR

Dễ sinh

Dễ dịch thành mã máy

Sự khôn khéo trong thiết kế IR rất ảnh hưởng tới tốc độ
và hiệu quả của trình biên dịch

Các IR phổ biến:

Cây cú pháp trừu tượng (ASTs)


Đồ thị định hướng không có chu trình (DAGs)

Chú giải hậu tố

Mã ba địa chỉ (3AC or quadruples)
22/10/14 19
Tối ưu mã

Nhiệm vụ của hệ tối ưu mã

Phân tích và cải tiến IR

Mục tiêu là giảm thời gian chạy

Bảo toàn giá trị

Các tối ưu phổ biến

Phát hiện và truyền đi một số giá trị hằng

Chuyển một tính toán tới một nơi được thực hiện với tần
suất ít hơn

Phát hiện và loại bỏ tính toán không hiệu quả

Loại bỏ các đoạn mã vô dụng hoặc không bao giờ được thực
hiện
22/10/14 20
Sinh mã


Nhiệm vụ của hệ sinh mã

Sinh mã đích: mã máy có thể định vị lại được hoặc mã
hợp ngữ

Chọn các chỉ thị cho mỗi thao tác IR (IR operation)

Quyết định xem giữ lại cái gì trong các thanh ghi tại
mỗi thời điểm
22/10/14 21
22/10/14 22
Phát hiện, thông báo, và phục hồi lỗi

Phát hiện

Lỗi từ vựng: “123 => xâu ký tự không được kết thúc
đúng

Lỗi cú pháp: ví dụ quên đóng dấu ngoặc

Lỗi ngữ nghĩa: sử dụng các toán hạng không tương
thích về kiểu đối với một phép toán nào đó

Thông báo chính xác nhất có thể vị trí xuất hiện
lỗi

Sau khi phát hiện lỗi, chương trình cần có khả
năng hồi phục và tiếp tục, cho phép phát hiện các
lỗi khác nữa (thuộc phần chương trình còn lại)
22/10/14 23

Đề cương môn học
1. Phân tích từ vựng
1. Biểu thức chính qui, NFA và DFA
2. Chương trình sinh bộ phân tích từ vựng (lex và JLex)
2. Văn phạm phi ngữ cảnh
3. Phân tích cú pháp
1. Cây cú pháp trừu tượng
2. Phân tích đệ qui từ trên xuống và LL(k)
3. Phân tích từ dưới lên và LR(k)
4. Các chương trình sinh bộ phân tích cú pháp (yacc, JavaCC, JavaCUP)
4. Phân tích ngữ nghĩa
1. Bảng ký hiệu
2. Định danh (i.e., binding)
3. Kiểm tra kiểu
5. Sinh mã
1. Dịch dựa vào cú pháp
2. Hợp ngữ Jasmin
3. Máy ảo Java (JVMs)
22/10/14 24
Các bài tập
22/10/14 25

×