KHẢO SÁT VÀ XÂY DỰNG THỬ NGHIỆM CHUYẾN TRƯỚC CỦA TRÌNH BIÊN DỊCH DÀNH CHO NGÔN NGỮ ANSI C GIẢN LƯỢC
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN KHOA HỌC MÁY TÍNH NGUYỄN VIỆT CƢỜNG – NGUYỄN THÀNH TRUNG KHẢO SÁT VÀ XÂY DỰNG THỬ NGHIỆM CHUYẾN TRƯỚC CỦA TRÌNH BIÊN DỊCH DÀNH CHO NGÔN NGỮ ANSI C GIẢN LƯỢC KHÓA LUẬN TỐT NGHIỆP CỬ NHÂN CNTT TP. HCM, 2010 TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN KHOA HỌC MÁY TÍNH NGUYỄN VIỆT CƢỜNG – 0612051 NGUYỄN THÀNH TRUNG – 0612468 KHẢO SÁT VÀ XÂY DỰNG THỬ NGHIỆM CHUYẾN TRƯỚC CỦA TRÌNH BIÊN DỊCH DÀNH CHO NGÔN NGỮ ANSI C GIẢN LƯỢC KHÓA LUẬN TỐT NGHIỆP CỬ NHÂN CNTT GIÁO VIÊN HƢỚNG DẪN TS. NGUYỄN THANH PHƢƠNG KHÓA 2006 – 2010 i NHẬN XÉT CỦA GIÁO VIÊN HƢỚNG DẪN ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… TpHCM, ngày … tháng …… năm …… Giáo viên hướng dẫn ii NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… ……………………………………………………………………………… Khóa luận đáp ứng yêu cầu của Khóa luận cử nhân CNTT. TpHCM, ngày … tháng …… năm …… Giáo viên phản biện iii LỜI CÁM ƠN Đầu tiên, chúng em xin cảm ơn khoa Công nghệ Thông tin, trường Đại học Khoa học Tự nhiên Thành phố Hồ Chí Minh đã tạo điều kiện cho chúng em thực hiện đề tài này. Chúng em xin chân thành cám ơn các thầy cô khoa Công nghệ Thông tin đã truyền đạt những kiến thức hữu ích tạo nền tảng vững chắc cho chúng em định hướng trong học tập và phát huy khả năng của mình khi bước vào đời. Đặc biệt, chúng em xin gởi lời cảm ơn chân thành và lời chúc sức khỏe đến thầy Nguyễn Thanh Phương đã hướng dẫn và dạy bảo tận tình để nhóm em hoàn thành tốt luận văn tốt nghiệp của mình. Chúng em xin cảm ơn anh Đặng Đăng Khoa và anh Phan Lê Sang đã giúp đỡ tận tụy và luôn sát cánh bên chúng em như những người anh trong gia đình trong suốt quá trình thực hiện khóa luận. Chúng em cũng xin cảm ơn sự động viên tích cực của các anh chị nhân viên phòng SELab trường Khoa hoc Tự nhiên và bạn bè trong quá trình chúng em thực hiện đề tài. Và cuối cùng chúng con xin cảm ơn các đấng sinh thành đã nuôi dạy, dìu dắt và luôn là nguồn khích lệ để chúng con phấn đấu trong học tập. Mặc dù cố gắng và nổ lực hết mình, chúng em vẫn còn mắc nhiều thiếu sót trong luận văn của mình, chúng em hy vọng sẽ nhận được sự ủng hộ và đóng góp ý kiến để hoàn thiện đề tài này một cách tốt hơn. TP. Hồ Chí Minh, tháng 06, 2010. Nhóm sinh viên thực hiện Nguyễn Việt Cường – Nguyễn Thành Trung iv KHOA CÔNG NGHỆ THÔNG TIN BỘ MÔN: KHOA HỌC MÁY TÍNH ĐỀ CƢƠNG CHI TIẾT Tên đề tài: Khảo sát và xây dựng thử nghiệm chuyến trước của trình biên dịch dành cho ngôn ngữ ANSI C giản lược. Giáo viên hƣớng dẫn: TS. Nguyễn Thanh Phƣơng Thời gian thực hiện: Từ ngày 01/09/2009 đến ngày 10/07/2010 Sinh viên thực hiện: 1. Nguyễn Việt Cường - 0612051 2. Nguyễn Thành Trung - 0612468 Loại đề tài: Tìm hiểu công nghệ và xây dựng ứng dụng. Nội Dung Đề Tài: Nội dung: – Tìm hiểu kỹ thuật xây dựng trình biên dịch. – Khảo sát các công cụ hỗ trợ phát sinh một phần trình biên dịch. – Vận dụng vào việc xây dựng chuyến trước cho ngôn ngữ ANSI C giản lược. – Giải quyết các bài toán nảy sinh trong thực tế, vốn không xuất hiện trong lý thuyết nền tảng. Yêu cầu: – Nắm vững và vận dụng có sáng tạo các kiến thức tiếp thu được từ lý thuyết cũng như thực tế. – Xây dựng thành công chuyến trước của trình biên dịch (có thể vận hành). Kết quả: Phát sinh ra mã trung gian, hướng đến họ chip VN-08 Kế Hoạch Thực Hiện: (mô tả chi tiết thời gian của các giai đoạn thực hiện và phân công công việc của từng thành viên trong nhóm) Các giai đoạn thực hiện : v o Bắt đầu : 01/09/2009 o Hoàn thành giai đoạn tìm tài liệu và project liên quan : 28/09/2009 o Hoàn thành đọc tài liệu và thiết kế mô hình C-Compiler : 28/12/2009 o Hoàn thành giai đoạn Coding và Testing : 15/05/2010 o Hoàn thành báo cáo cuối cùng : 10/07/2010 Phân công công việc : o Xây dựng cấu trúc, quản lý bảng danh biểu : Nguyễn Thành Trung. o Tìm hiểu các công cụ phát sinh trình biên dịch : Nguyễn Việt Cường. o Phát sinh mã cho các cấu trúc khai báo, định nghĩa kiểu dữ liệu : Nguyễn Thành Trung. o Phát sinh mã cho các cấu trúc điều khiển, biểu thức : Nguyễn Việt Cường. Xác nhận của GVHD Ngày……tháng……năm…… SV Thực hiện 1 MỤC LỤC MỤC LỤC 1 DANH MỤC CÁC HÌNH VẼ 3 DANH MỤC CÁC BẢNG 5 CHƢƠNG 1: TỔNG QUAN 6 1.1. GIỚI THIỆU VỀ TRÌNH BIÊN DỊCH 6 1.1.1. Trình biên dịch là gì? 6 1.1.2. Phân loại trình biên dịch 6 1.1.3. Quá trình biên dịch 7 1.1.4. Quá trình phân tích 8 1.1.5. Quá trình tổng hợp 9 1.1.6. Các pha trong quá trình biên dịch 9 1.1.7. Các module phụ của trình biên dịch 11 1.2. CÁC GIỚI HẠN CỦA LUẬN VĂN 13 1.2.1. Các giới hạn chung 13 1.2.2. Ngôn ngữ ANSI C giản lược 13 1.3. NỘI DUNG LUẬN VĂN 17 CHƢƠNG 2: GIỚI THIỆU VỀ CHUYẾN TRƢỚC 18 2.1. VAI TRÒ, CHỨC NĂNG CỦA CHUYẾN TRƯỚC. 18 2.2. BẢNG DANH BIỂU. 18 2.2.1. Bảng danh biểu là gì? Vai trò và chức năng? 18 2.2.2. Tầng dữ liệu 20 2.2.3. Tổ chức lưu trữ dạng bảng băm 21 2.2.4. Tầng quản lý 23 2.3. PHÂN TÍCH TỪ VỰNG. 24 2.4. PHÂN TÍCH CÚ PHÁP. 26 2.4.1. Phương pháp phân tích cú pháp từ dưới lên (Bottom-Up Parsing) 27 2.4.2. Kỹ thuật phân tích cú pháp LR 30 2.5. PHÂN TÍCH NGỮ NGHĨA 34 2.6. PHÁT SINH MÃ TRUNG GIAN. 35 2 CHƢƠNG 3: CÁC CÔNG CỤ HỖ TRỢ XÂY DỰNG MỘT PHẦN TRÌNH BIÊN DỊCH. 38 3.1. GIỚI THIỆU. 38 3.2. Bộ phát sinh trình phân tích từ vựng FLEX 38 3.2.1. Cấu trúc. 38 3.2.2. Quy trình vận hành. 39 3.2.3. Một số hàm hỗ trợ. 40 3.3. Bộ phát sinh trình phân tích cú pháp BISON 41 3.3.1. Cấu trúc. 41 3.3.2. Quy trình vận hành. 44 CHƢƠNG 4: XÂY DỰNG CHUYẾN TRƢỚC CỦA TRÌNH BIÊN DỊCH 46 4.1. MÔ HÌNH CHUYẾN TRƯỚC CỦA TRÌNH BIÊN DỊCH 46 4.2. QUẢN LÝ MÃ TRUNG GIAN [9] 47 4.3. XÂY DỰNG BẢNG DANH BIỂU [1, 2, 3, 8, 9] 48 4.3.1. Cấu trúc cài đặt chung 48 4.3.2. Các cấu trúc dữ liệu lưu trữ thông tin danh biểu 49 4.3.3. Ví dụ biễu diễn một số kiểu dữ liệu 56 4.3.4. Các thao tác quản lý bảng danh biểu. 57 4.3.5. Minh họa sơ đồ lưu trữ 57 4.4. DỊCH CÁC CẤU TRÚC 59 4.4.1. Biểu thức 59 4.4.2. Mảng và con trỏ 67 4.4.3. Dịch biểu thức logic - luồng điều khiển. 73 4.4.4. Khai báo 96 CHƢƠNG 5: TỔNG KẾT 115 5.1. KẾT QUẢ 115 5.2. HẠN CHẾ 115 5.3. HƯỚNG PHÁT TRIỂN 115 PHỤ LỤC 117 PHỤ LỤC 1: Bảng xác định độ ưu tiên của các toán tử. 117 PHỤ LỤC 2: Dịch chương trình mẫu. 118 THAM KHẢO 133 3 DANH MỤC CÁC HÌNH VẼ Hình 1.1. Trình biên dịch 6 Hình 1.2. Quá trình biên dịch 8 Hình 1.3. Các pha biên dịch mã nguồn 10 Hình 1.4. Quá trình dịch mã cho chip 11 Hình 1.5. Cấu trúc chương trình 13 Hình 2.1. Sự phân chia tầng trong cài đặt bảng danh biểu 19 Hình 2.2. Cấu trúc lưu trữ (dạng đơn giản) cho danh biểu 20 Hình 2.3. Bảng băm với kích thước khóa 256 21 Hình 2.4. Bảng danh biểu với liên kết chỉ định phạm vi 23 Hình 2.5 .Giao thức liên hệ của bộ phân tích từ vựng. 25 Hình 2.6. Vị trí của trình phân tích cú pháp trong chuyến trước của trình biên dịch 27 Hình 2.7. Cấu trúc của một bộ phân tích cú pháp LR 31 Hình 2.8. Automat của văn phạm dành cho biểu thức đơn giản[1] 32 Hình 3.1. Quá trình phân tích từ vựng 39 Hình 3.2. Quá trình phân tích cú pháp của BISON 44 Hình 4.1. Cấu trúc của một toán hạng (operand) 47 Hình 4.2. Mô hình cài đặt bảng danh biểu 48 Hình 4.3. Các cấu trúc lưu trữ thông tin danh biểu 50 Hình 4.4. Sơ đồ lưu trữ của bucket 51 Hình 4.5. Structdef trong tổ chưc lưu trữ struct 52 Hình 4.6. Declarator trong khai báo con trỏ integer 53 Hình 4.7. Symlink trong chuỗi thông tin danh biểu 55 Hình 4.8. Symbol trong tổ chức lưu trữ khai báo biến 56 Hình 4.9. Biễu diễn một sô kiểu dữ liệu 56 Hình 4.10. Sơ đồ lưu trữ biến, struct và typedef 58 Hình 4.11. Quá trình lan truyền thuộc tính danh biểu và thuộc tính hằng số 60 [...]... C c trình biên dịch trư c đây cho Pascal hay Borland C là trình biên dịch một bư c 6 Chương 1 – Tổng quan 1.1.2.2 Trình biên dịch nhiều bư c C c trình biên dịch c n nhiều hơn một bư c để hoàn tất gọi là trình biên dịch nhiều bư c C c kiểu trình biên dịch nhiều bư c bao gồm: Trình biên dịch nguồn sang nguồn: dịch từ một ngôn ngữ c p cao này sang một ngôn ngữ c p cao kh c Chẳng hạn biên dịch một chương... hợp, ngôn ngữ nguồn là ngôn ngữ c p cao như Fortran, C/ C++, Java, … Và ngôn ngữ đích là mã hợp ngữ ho c mã máy c a một ho c một họ hệ thống phần c ng 1.1.2 Phân loại trình biên dịch Theo số bư c biên dịch, ta chia làm hai loại chính: một bư c và nhiều bư c 1.1.2.1 Trình biên dịch một bư c Vi c biên dịch mã nguồn viết bằng ngôn ngữ c p cao sang ngôn ngữ máy (hay mã máy) gọi là trình biên dịch 1 bư c C c. .. th c thi trên chip Trên th c tế, c trình biên dịch th c hiện biên dịch ngư c, dịch từ ngôn ngữ c p thấp sang lại ngôn ngữ c p cao và trình biên dịch như thế đư c gọi là trình biên dịch ngư c 1.1.3 Quá trình biên dịch Quá trình biên dịch mã nguồn đư c th c hiện theo mô hình biên dịch phân tích - tổng hợp bao gồm 2 bư c: Phân tích Tổng hợp 7 Chương 1 – Tổng quan Chương trình nguồn (mã nguồn) Trình. .. trình biên dịch – Khảo sát c c công c hỗ trợ phát sinh một phần trình biên dịch – Vận dụng vào vi c xây dựng một trình biên dịch cho ngôn ngữ ANSI C giản lư c – Giải quyết c c bài toán nảy sinh trong th c tế, vốn không đư c đề c p trong tài liệu 17 Chương 2 – Giới thiệu về chuyến trư c CHƢƠNG 2: GIỚI THIỆU VỀ CHUYẾN TRƢ C 2.1 VAI TRÒ, CH C NĂNG C A CHUYẾN TRƢ C Với nhiệm vụ chính là phân tích mã nguồn,... gian mà chuyến trư c cung c p, và c c đ c điểm phần c ng mà mã đích th c thi trên đó Khi chuyến sau đã đư c xây dựng tốt trên một bộ mã trung gian chuẩn, thì vi c xây dựng nên một 10 Chương 1 – Tổng quan trình biên dịch ngôn ngữ mới để dịch mã cho c ng một loại phần c ng chỉ là vi c xây dựng lại chuyến trư c cho phù hợp với ngôn ngữ mới Quản lý bảng danh biểu và quản lý lỗi là hai pha luôn đư c th c hiện... c c c quy t c diễn tả c u tr c cú pháp c a c c chương trình c định dạng đúng C c cấu tr c cú pháp này đư c mô tả bởi văn phạm phi ngữ c nh (Context Free Gramma – CFG) [4] Trình phân tích c pháp (parser) nhận chuỗi c c token từ trình phân tích từ vựng (Hình 2.6), và x c định rằng chuỗi này c hợp lệ hay không bằng c ch tạo ra c y phân tích c pháp từ văn phạm c a ngôn ngữ nguồn C 2 phương pháp chính... đư c tất c c c thông tin từ c c tập tin mã nguồn 11 Chương 1 – Tổng quan riêng lẻ, c ng vi c đó sẽ đư c th c hiện ở quá trình tiền xử lý, đồng thời dịch c c macro, c c chỉ thị thành c c câu lệnh tương ứng trong chương trình Tiền xử lý th c hiện dịch c c khai báo hỗ trợ lập trình đư c viết trong chương trình, chuyển c c khai báo đó thành mã nguồn mà trình biên dịch c thể xử lý đư c Tiền xử lý th c. .. 1.1.7 C c module phụ c a trình biên dịch Chương trình nguồn (mã nguồn) Tiền xử lý Trình biên dịch Bộ dịch mã hợp ngữ Linker/Loader Thư viện Mã th c thi tuyệt đối trên chip Hình 1.4 Quá trình dịch mã cho chip 1.1.7.1 Tiền xử lý - Preprocessor Trong th c tế, mã nguồn c a một chương trình thường đư c tách ra thành nhiều tập tin để thuận tiện cho vi c quản lý Do đó để biên dịch đư c chương trình, ta c n... chương trình viết bằng ngôn ngữ C+ + sang một chương trình viết bằng ngôn ngữ C Trình biên dịch phân đoạn: biên dịch sang một loại mã th c thi gần với máy, thông thường là mã hợp ngữ Ví dụ biên dịch một chương trình viết bằng ngôn ngữ C sang một chương trình viết bằng mã hợp ngữ cho một con chip bất kỳ (x86, VN-08, SG-08), từ mã hợp ngữ này, ta lại c n một trình biên dịch hợp ngữ để dịch mã hợp ngữ sang... trình xử lý ngôn ngữ, làm c ng vi c dịch chương trình hay một chuỗi c c câu lệnh đư c viết bằng ngôn ngữ lập trình (gọi là ngôn ngữ nguồn hay mã nguồn) thành chương trình tương đương dưới dạng ngôn ngữ đích Một phần quan trọng trong quá trình dịch là ghi nhận và thông báo lỗi Chương trình nguồn (mã nguồn) Trình biên dịch Báo lỗi Chương trình đích (mã nguồn) Hình 1.1 Trình biên dịch Trong đa số c c trường . KHOA H C MÁY TÍNH ĐỀ C ƠNG CHI TIẾT Tên đề tài: Khảo sát và xây dựng thử nghiệm chuyến trư c c a trình biên dịch dành cho ngôn ngữ ANSI C giản lư c. Giáo. KHẢO SÁT VÀ XÂY DỰNG THỬ NGHIỆM CHUYẾN TRƯ C CỦA TRÌNH BIÊN DỊCH DÀNH CHO NGÔN NGỮ ANSI C GIẢN LƯ C KHÓA LUẬN TỐT NGHIỆP C NHÂN CNTT