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
Trang 1Nguyễn Phương Thái
Bộ môn Khoa học Máy tính
http://www.coltech.vnu.vn/~thainp/
Trang 2Thông tin môn học
Giảng viên
Nguyễn Phương Thái
Trang nhà: http://www.coltech.vnu.vn/~thainp/
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
Trang 3Thông tin môn học
[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
Trang 4Thông tin môn học
http://www.cse.unsw.edu.au/~cs3131/
K51CD):
http://www.coltech.vnu.vn/courses/
Trang 5Chươ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ã
Chương trình dịch Mã đích
Mã nguồn
Lỗi
Trang 6Cá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 đó
Trang 7 “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
Trang 8Ngôn ngữ máy, hợp ngữ, và ngôn ngữ bậc cao
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
Trang 9 Ví dụ:
grossPay = basePay + overTimePay
Trang 10Cá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
Trang 11Tri 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
Trang 12Kỹ 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à
Trang 13Kiến trúc của một chương trình dịch
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
Trang 14identifier 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ị
Trang 15Sinh 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)
Trang 16Ví dụ về văn phạm phi ngữ cảnh
Trang 1729/12/23 17
Trang 18Phâ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
Trang 19Sinh mã trung gian
Hệ sinh mã trung gian sinh ra một biểu diễn trung gian (intermediate representation – IR)
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)
Trang 20Tối ưu mã
Nhiệm vụ của hệ tối ưu mã
Các tối ưu phổ biến
tần suất ít hơn
được thực hiện
Trang 21Sinh mã
Nhiệm vụ của hệ sinh mã
Sinh mã đích: mã máy có thể định vị lại được
Trang 23Phá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)
Trang 24Đề 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
Trang 25Các bài tập
Trang 26VC (a variant of C)
Chú thích: // và /* */
Kiểu:
Cơ sở: void, int, float và boolean
Mảng: int[], float[], boolean[]
Biến: toàn cục và cục bộ
Literals: integers, reals, boolean, strings
Biểu thức: điều kiện, quan hệ, số học và lời gọi
Câu lệnh: if, for, while, gán, break, continue, return
Các hàm: với tham số được truyền bởi giá trị
Sinh viên sẽ cần đọc kỹ tài liệu đặc tả VC để hiểu rõ
về ngôn ngữ này
Trang 27Kế hoạch
Tổng thời gian: 15 tuần
10 tuần học lý thuyết
5 tuần cho bài tập
Trang 28Cách học
Hoàn thành mỗi bài tập đúng hạn!
Hiểu các lý thuyết được giới thiệu trong các bài giảng và áp dụng chúng khi cài đặt các
Trang 29Đánh giá
Qua bài tập
Qua kiểm tra cuối kỳ