- Phần lớn giáo trình compiler rất đồ sộ và nặng về lý thuyết, khiến người mới khó tự triển khai một compiler thực sự hoạt động
- Để khắc phục điều này, tài liệu thực dụng “Let’s Build a Compiler!” của Jack Crenshaw được giới thiệu, trình bày một compiler Pascal ngắn gọn với kiến trúc single-pass
- Bộ hướng dẫn này hỗ trợ học theo kiểu thử nghiệm thông qua kết hợp phân tích cú pháp và sinh mã, mức tối ưu hóa tối thiểu, cùng các phiên bản C và Forth
- Tài liệu thứ hai, bài báo “A Nanopass Framework for Compiler Education”, đưa ra một kiến trúc compiler mô-đun gồm rất nhiều phép biến đổi đơn giản (pass)
- Sau khi tích lũy kinh nghiệm triển khai thực tế từ hai tài liệu này, nếu cần có thể tham khảo thêm giáo trình truyền thống (Dragon Book) để học sâu hơn
Thực tế của việc học compiler và hai bài viết cốt lõi
- Các sách về compiler hiện có bị cho là quá đồ sộ và khó tiếp cận, khiến người mới khó viết được một compiler thực sự chạy được
- Phần lớn sách bao quát những chủ đề lớn như chuyển đổi biểu thức chính quy, lý thuyết ngữ pháp, nhưng không đưa ra điểm khởi đầu mang tính thực hành
- Vì vậy đã hình thành những ngộ nhận và huyền thoại rằng “compiler là thứ rất khó”
- Một tài liệu tiêu biểu giúp phá vỡ nhận thức này là loạt bài “Let’s Build a Compiler!” của Jack Crenshaw
- Bắt đầu từ năm 1988, bộ hướng dẫn này xây dựng một compiler single-pass ở mức Turbo Pascal
- Nó dùng cấu trúc kết hợp giữa phân tích cú pháp và sinh mã, chỉ thực hiện mức tối ưu hóa tối thiểu
- Ban đầu được viết bằng Pascal, về sau còn có phiên bản C và bản dịch Forth
- Bản Forth giúp việc thử nghiệm và hiểu bài dễ hơn nhờ đặc tính ngôn ngữ tương tác
- Hạn chế của loạt bài Crenshaw là không có biểu diễn nội bộ của chương trình (cây cú pháp trừu tượng, AST)
- Trong Pascal, thao tác với cây khá phức tạp nên bị lược bỏ, nhưng với các ngôn ngữ bậc cao như Python, Ruby, Erlang, Haskell, Lisp thì có thể hiện thực khá dễ dàng
- Các ngôn ngữ này vốn được thiết kế để xử lý dữ liệu dạng cây
- Tài liệu thứ hai được khuyến nghị là bài báo của Sarkar, Waddell, Dybvig
“A Nanopass Framework for Compiler Education”
- Ý tưởng cốt lõi là “compiler là một chuỗi các quá trình biến đổi dần biểu diễn nội bộ của chương trình”
- Bài báo đề xuất một cấu trúc gồm hàng chục đến hàng trăm phép biến đổi đơn giản (pass)
- Mỗi phép biến đổi được giữ đơn giản tối đa và tránh liên kết chặt giữa các phép biến đổi
- Framework định nghĩa tường minh đầu vào và đầu ra của từng pass
- Ngôn ngữ triển khai là Scheme, dùng kiểu động để kiểm tra tại runtime
- Sau khi tự viết compiler bằng hai tài liệu này, nếu cần có thể tiếp tục học sâu với các giáo trình truyền thống như Dragon Book
- Tuy vậy, chỉ riêng hai tài liệu này cũng đã đủ để có được kinh nghiệm thực tế trong việc xây dựng compiler
Chưa có bình luận nào.