Tài liệu này dành cho sinh viên, giáo viên khối ngành công nghệ thông tin tham khảo và có những bài học bổ ích hơn, bổ trợ cho việc tìm kiếm tài liệu, giáo án, giáo trình, bài giảng các môn học khối ngành công nghệ thông tin
Nguyễn Phương Thái Bộ môn Khoa học Máy tính http://www.coltech.vnu.vn/~thainp/ Thô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 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ự: http://www.cse.unsw.edu.au/~cs3131/ Trang web môn học (cho cả hai lớp K51CC và K51CD): http://www.coltech.vnu.vn/courses/ 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 [...]... đú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 môđun chương trình Đọc thêm tài liệu Thảo luận Ở lớp Qua trang web môn học Gặp thầy 22/10/14 28 Đánh giá Qua bài tập Qua kiểm tra cuối kỳ 22/10/14 29 Tổng kết Mục tiêu của bài giảng Tổng quan về chương trình dịch Tổng quan về nội dung sinh viên sẽ học và sẽ làm Một chú ý nhỏ: Sinh... 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 22/10/14 lỗi khác nữa (thuộc phần chương trình còn lại) 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... 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 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... 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ệ... 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/10/14 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/10/14 25 VC (a variant of C) Chú thích: //... 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 22/10/14 26 Kế 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 Bài tập 1: tuần 3 2: 6 3: 9 4: 12 5: 15 22/10/14 27 Cách học Hoàn thành mỗi bài tập đúng... 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 . 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. 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. 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