Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 138 trang
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ÁTVÀXÂYDỰNG THỬ NGHIỆM
CHUYẾN TRƯỚCCỦATRÌNHBIÊNDỊCH
DÀNH CHONGÔNNGỮANSICGIẢNLƯỢ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 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
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átvàxâydựngthửnghiệmchuyếntrướccủatrìnhbiêndịchdành
cho ngônngữANSICgiả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âydựng ứng dụng.
Nội Dung Đề Tài:
Nội dung:
– Tìm hiểu kỹ thuật xâydựngtrìnhbiên dịch.
– Khảo sát các công cụ hỗ trợ phát sinh một phần trìnhbiên dịch.
– Vận dụng vào việc xâydựngchuyếntrướcchongônngữANSICgiả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âydựng thành công chuyếntrướccủatrìnhbiêndị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 giancủ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)
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 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âydự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ìnhbiêndị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ÌNHBIÊNDỊCH 6
1.1.1. Trìnhbiêndịch là gì? 6
1.1.2. Phân loại trìnhbiêndịch 6
1.1.3. Quá trìnhbiêndị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ìnhbiêndịch 9
1.1.7. Các module phụ củatrìnhbiêndịch 11
1.2. CÁC GIỚI HẠN CỦALUẬN VĂN 13
1.2.1. Các giới hạn chung 13
1.2.2. NgônngữANSICgiảnlược 13
1.3. NỘI DUNGLUẬN VĂN 17
CHƯƠNG 2: GIỚI THIỆU VỀ CHUYẾNTRƯỚC 18
2.1. VAI TRÒ, CHỨC NĂNG CỦACHUYẾ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ÂYDỰ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ÂYDỰNGCHUYẾNTRƯỚCCỦATRÌNHBIÊNDỊCH 46
4.1. QUẢN LÝ MÃ TRUNG GIAN 46
4.2. XÂYDỰ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 và 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ìnhbiêndịch 6
Hình 1.2. Quá trìnhbiêndịch 8
Hình 1.3. Các pha biêndịch mã nguồn 10
Hình 1.4. Quá trìnhdị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) chodanh 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ủatrình phân tích cú pháp trong chuyếntrướccủatrìnhbiê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ànhcho 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 và typedef 57
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ố 59
Hình 4.12. Cây cú pháp và 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 và 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ụngcho luật sinh 3 và 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 và external_definition 97
Hình 4.26. Sự lan truyền thuộc tính “int” và “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 và 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 và 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êndịch 1 bư cCctrìnhbiêndịch trư c đây cho Pascal hay Borland C là trìnhbiêndịch một bư c 6 Chương 1 – Tổng quan 1.1.2.2 Trìnhbiêndịch nhiều bư cCctrìnhbiêndịchc n nhiều hơn một bư c để hoàn tất gọi là trìnhbiêndịch nhiều bư cCc kiểu trìnhbiêndịch nhiều bư c bao gồm: Trìnhbiêndịch nguồn sang nguồn: dịch từ một ngônngữc p cao này sang một ngônngữc p cao kh c Chẳng hạn biên. .. trìnhbiêndịch – Khảo sátcc công c hỗ trợ phát sinh một phần trìnhbiêndịch – Vận dụng vào vi cxâydựng một trìnhbiêndịchchongônngữANSICgiản lư c – Giải quyết cc 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ế, ctrìnhbiêndịch th c hiện biêndịchngư c, dịch từ ngônngữc p thấp sang lại ngônngữc p cao vàtrìnhbiêndịch như thế đư c gọi là trìnhbiêndịchngưc 1.1.3 Quá trìnhbiêndịch Quá trìnhbiêndịch mã nguồn đư c th c hiện theo mô hình biêndị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. .. gian mà chuyến trư c cung c p, vàcc đ c điểm phần c ng mà mã đích th c thi trên đó Khi chuyến sau đã đư cxâydựng tốt trên một bộ mã trung gian chuẩn, thì vi cxâydựng nên một 10 Chương 1 – Tổng quan trìnhbiêndịchngônngữ mới để dịch mã choc ng một loại phần c ng chỉ là vi cxâydựng lại chuyến trư ccho phù hợp với ngônngữ 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... số cc trường hợp, ngônngữ nguồn là ngônngữc p cao như Fortran, C/ C++, Java, … Vàngônngữđí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ìnhbiêndịch Theo số bư cbiên dịch, ta chia làm hai loại chính: một bư cvà nhiều bư c 1.1.2.1 Trìnhbiêndịch một bư c Vi cbiêndịch mã nguồn viết bằng ngônngữc p cao sang ngônngữ máy (hay mã máy) gọi là trình biên. .. ccc quy t c diễn tả c u tr c cú pháp c a cc chương trìnhc định dạng đúngCc 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 cc 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ônngữ nguồn C 2 phương pháp chính... biêndịch một chương trình viết bằng ngônngữ C+ + sang một chương trình viết bằng ngônngữC Trìnhbiêndịch phân đoạn: biêndị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êndịch một chương trình viết bằng ngônngữ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ìnhbiêndịch hợp ngữ để dịch. .. đư c tất ccc thông tin từ cc 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ịchcc macro, cc chỉ thị thành cc câu lệnh tương ứng trong chương trình Tiền xử lý th c hiện dịchcc khai báo hỗ trợ lập trình đư c viết trong chương trình, chuyểncc khai báo đó thành mã nguồn mà trìnhbiêndịchc thể xử lý đư c Tiền xử lý th c. .. 1.1.7 Cc module phụ c a trìnhbiêndịch Chương trình nguồn (mã nguồn) Tiền xử lý Trìnhbiêndị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ìnhdị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êndị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 cdịch chương trình hay một chuỗi cc câu lệnh đư c viết bằng ngônngữ lập trình (gọi là ngônngữ nguồn hay mã nguồn) thành chương trình tương đương dưới dạng ngônngữđích Một phần quan trọng trong quá trìnhdịch là ghi nhận và thông báo lỗi Chương trình nguồn (mã nguồn) Trìnhbiêndịch Báo lỗi Chương trìnhđích (mã nguồn) Hình 1.1 Trìnhbiêndị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