Nguồn: prog21.dadgum.com
Tóm tắt
Bài viết của James Hague (2008) phản bác quan niệm phổ biến rằng việc viết compiler là cực kỳ khó. Lý do nhiều lập trình viên cảm thấy compiler phức tạp không phải vì bản chất kỹ thuật của nó, mà vì các sách giáo khoa về compiler thường quá rộng và đặt bar quá cao ngay từ đầu, khiến người đọc không biết bắt đầu từ đâu.
Tài nguyên được khuyến nghị đầu tiên là series “Let’s Build a Compiler!” của Jack Crenshaw (bắt đầu từ 1988). Series này tiếp cận compiler theo hướng single-pass, kết hợp parsing và code generation, phù hợp với người mới. Tuy nhiên, hạn chế lớn nhất của Crenshaw là không có internal representation (abstract syntax tree), điều này giới hạn sự linh hoạt của compiler được xây dựng.
Để bổ sung phần còn thiếu, bài viết giới thiệu paper “A Nanopass Framework for Compiler Education” của Sarkar, Waddell, và Dybvig. Ý tưởng cốt lõi là một compiler chỉ là một chuỗi các phép biến đổi trên internal representation của chương trình — với hàng chục hoặc hàng trăm compiler pass, mỗi pass thực hiện một việc đơn giản và rõ ràng, thay vì gộp nhiều transformations lại với nhau.
Thông điệp thực tế của bài là: thay vì mua Dragon Book ngay từ đầu, hãy đọc hai nguồn trên trước để hiểu nguyên lý cơ bản theo cách thực hành. Khi đã có một vài compiler trong tay, sách giáo khoa nặng về lý thuyết mới có ý nghĩa thực sự.