1. Trang chủ
  2. » Luận Văn - Báo Cáo

LUẬN VĂN: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 doc

138 401 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 138
Dung lượng 1,16 MB

Nội dung

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 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 i 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 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 lời chúc sức khỏe đến thầy Nguyễn Thanh Phương đã hướng dẫn 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 anh Phan Lê Sang đã giúp đỡ tận tụy 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 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 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ộ đó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 ii 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 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ệ 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ậ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 phân công công việc của từng thành viên trong nhóm) iii  Các giai đoạn thực hiện : o Bắt đầu : 01/09/2009 o Hoàn thành giai đoạn tìm tài liệu project liên quan : 28/09/2009 o Hoàn thành đọc tài liệu thiết kế mô hình C-Compiler : 28/12/2009 o Hoàn thành giai đoạn Coding 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 iv 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 4 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ò 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. QUẢN LÝ MÃ TRUNG GIAN 46 4.2. XÂY DỰNG BẢNG DANH BIỂU 47 4.2.1. Cấu trúc cài đặt chung 47 4.2.2. Các cấu trúc dữ liệu lưu trữ thông tin danh biểu 48 4.2.3. Ví dụ biễu diễn một số kiểu dữ liệu 55 4.2.4. Các thao tác quản lý bảng danh biểu. 56 4.2.5. Minh họa sơ đồ lưu trữ 56 4.3. DỊCH CÁC CẤU TRÚC 58 4.3.1. Biểu thức 58 4.3.2. Mảng con trỏ 66 4.3.3. Dịch biểu thức logic - luồng điều khiển. 72 4.3.4. Khai báo 95 CHƯƠNG 5: TỔNG KẾT 114 5.1. KẾT QUẢ 114 5.2. HẠN CHẾ 114 5.3. HƯỚNG PHÁT TRIỂN 114 PHỤ LỤC 116 PHỤ LỤC 1: Bảng xác định độ ưu tiên của các toán tử. 116 PHỤ LỤC 2: Dịch chương trình mẫu. 117 THAM KHẢO 132 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ịchcho 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) 46 Hình 4.2. Mô hình cài đặt bảng danh biểu 47 Hình 4.3. Các cấu trúc lưu trữ thông tin danh biểu 49 Hình 4.4. Sơ đồ lưu trữ của bucket 50 Hình 4.5. Structdef trong tổ chưc lưu trữ struct 51 Hình 4.6. Declarator trong khai báo con trỏ integer 52 Hình 4.7. Symlink trong chuỗi thông tin danh biểu 54 Hình 4.8. Symbol trong tổ chức lưu trữ khai báo biến 55 Hình 4.9. Biễu diễn một sô kiểu dữ liệu 55 Hình 4.10. Sơ đồ lưu trữ biến, struct typedef 57 Hình 4.11. Quá trình lan truyền thuộc tính danh biểu thuộc tính hằng số 59 Hình 4.12. Cây cú pháp lan truyền thuộc tính cho biểu thức ++a + b * c 65 4 Hình 4.13. Cây cú pháp lan truyền thuộc tính cho ví dụ 4.13 71 Hình 4.14. Phân bố mã cho các câu lệnh if 74 Hình 4.15. Cây phân tích cú pháp sử dụng cho luật sinh 3 3’ 77 Hình 4.16. Cây phân tích cú pháp của cấu trúc điều khiển ví dụ 4.16 82 Hình 4.17. Cây phân tích cú pháp cho cấu trúc lệnh switch 89 Hình 4.18. Mô tả cấu trúc một case_val 90 Hình 4.19. Mô tả cấu trúc một switch table 90 Hình 4.20. Switch table khi đã lưu trữ đầy đủ thông tin để thực hiện hành vi ACT06 93 Hình 4.21. Phân bố mã cho các câu lệnh while 94 Hình 4.22. Phân bố mã cho các câu lệnh do-while 95 Hình 4.23. Cấu trúc khai báo của một chương trình 96 Hình 4.24. Cây phân tích cú pháp của một chương trình đơn giản 96 Hình 4.25. Sự tương quan giửa khai báo external_definition 97 Hình 4.26. Sự lan truyền thuộc tính “int” “x” 100 Hình 4.27. Sơ đồ tổ chức lưu trữ khai báo int x; 101 Hình 4.28. Cây phân tích cú pháp lan truyền thuộc tính cho ví dụ ví dụ 4.20: . 104 Hình 4.29. Sơ đồ tổ chức lưu trữ hàm inc trong Ví dụ 4.20: 105 Hình 4.30. Cây phân tích cú pháp quá trình lan truyền thuộc tính cho khai báo struct 108 Hình 4.31. Sơ đồ tổ chức lưu trữ cho kiểu dữ liệu struct 109 Hình 4.32. Cây phân tích cú pháp cho khai báo con trỏ 110 Hình 4.33 Sơ đồ lưu trữ cho khai báo int *x; 111 Hình 4.34. Cây phân tích cú pháp cho khai báo typedef 112 Hình 4.36. Tổ chức lưu trữ typedef 113 [...]... biên dịch 1 bư c C c trình biên dịch trư c đây cho Pascal hay Borland Ctrì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. .. 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ảnc – 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,... mã hợp ngữ sang mã máy 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 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. .. gianchuyến trư c cung c p, 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ịchcho 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 quản lý lỗi là hai pha luôn đư c th c hiện... số c c trường hợp, ngôn ngữ nguồn là ngôn ngữ c p cao như Fortran, C/ C++, Java, … 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 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. .. 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), 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... 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 ngôn ngữ CTrì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. .. đư 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ịchcho 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... là một chương 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 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 . 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 trình biên dịch trư c. 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. 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 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

Ngày đăng: 28/03/2014, 11:20

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w