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ườiMáy)
Mơn học tiên quyết: lập trình (C/C+
+, Java), tốn rời rạc, cấu trúc dữ
liệu và giải thuật
22/12/16
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/12/16
3
Thơng tin mơn học
22/12/16
Khóa học tương tự:
/>Trang web mơn học (cho cả hai lớp K51CC
và K51CD):
/>
4
Chương trình dịch là gì?
Mã nguồn
Chương trình dịch
Mã đích
Lỗi
Nhận dạng chương trình hợp lệ (hay
khơng)
Sinh đúng (và hiệu quả) mã
22/12/16
5
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/12/16
6
Ngôn ngữ máy, hợp ngữ, và ngôn
ngữ
bậc
cao
1. Ngôn ngữ máy
7
Đâ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 tốn cơ sở
Mỗi lần một lệnh
Khó hiểu với con người
Ví dụ:
+1300042774
+1400593419
+1200274027
Ngôn ngữ máy, hợp ngữ, và ngôn
ngữ
bậc
cao
2. Hợp ngữ
8
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
Ngôn ngữ máy, hợp ngữ, và ngôn
ngữ
bậc
cao
3. Các ngôn ngữ bậc cao
9
Tương tự tiếng Anh ngày nay, sử dụng các ký hiệu tố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 tố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/12/16
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/12/16
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/12/16
12
Kiến trúc của một chương trình dịch
Mã nguồn
Phân tích từ tố (từ vựng)
Phân tích cú pháp
Phân tích ngữ nghĩa
Sinh mã trung gian
Tối ưu mã
Sinh mã đích
22/12/16
Mã đích
13
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 = (tố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/12/16
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/12/16
15
Ví dụ về văn phạm phi ngữ cảnh
22/12/16
16
22/12/16
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 tố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
22/12/16
Bảng ký hiệu (symbol table) sẽ được sử dụng
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/12/16
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 tố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 tố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/12/16
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/12/16
21
22/12/16
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ụ qn đó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 tố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/12/16
23
Đề cương mơn học
Phân tích từ vựng
1.
1.
2.
Biểu thức chính qui, NFA và DFA
Chương trình sinh bộ phân tích từ vựng (lex và JLex)
Văn phạm phi ngữ cảnh
Phân tích cú pháp
2.
3.
1.
2.
3.
4.
Cây cú pháp trừu tượng
Phân tích đệ qui từ trên xuống và LL(k)
Phân tích từ dưới lên và LR(k)
Các chương trình sinh bộ phân tích cú pháp (yacc, JavaCC, JavaCUP)
Phân tích ngữ nghĩa
4.
1.
2.
3.
Bảng ký hiệu
Định danh (i.e., binding)
Kiểm tra kiểu
Sinh mã
5.
1.
2.
3.
22/12/16
Dịch dựa vào cú pháp
Hợp ngữ Jasmin
Máy ảo Java (JVMs)
24
Các bài tập
22/12/16
25