Tôi nghĩ BS trả lời câu hỏi đó:
Trình biên dịch C ++ đầu tiên (Cfront) được viết bằng C ++. Để xây dựng điều đó, trước tiên tôi sử dụng C để viết bộ tiền xử lý "C với các lớp" -to-C. "C with Classes" là một phương ngữ C đã trở thành tổ tiên ngay lập tức của C ++. Bộ tiền xử lý đó đã dịch các cấu trúc "C with Classes" (chẳng hạn như các lớp và hàm tạo) thành C. Đó là một bộ tiền xử lý truyền thống không hiểu tất cả ngôn ngữ, khiến hầu hết các loại kiểm tra trình biên dịch C phải làm và dịch riêng lẻ xây dựng mà không có kiến thức đầy đủ.
Sau đó tôi đã viết phiên bản đầu tiên của Cfront trong "C with Classes". Cfront là một trình biên dịch truyền thống đã hoàn thành cú pháp và kiểm tra ngữ nghĩa của nguồn C ++. Do đó, nó đã có một trình phân tích cú pháp hoàn chỉnh, xây dựng các bảng biểu tượng và xây dựng một biểu diễn cây bên trong hoàn chỉnh của từng lớp, hàm, v.v. Nó cũng đã thực hiện một số tối ưu hóa mức nguồn trên biểu diễn cây nội bộ của các cấu trúc C ++ trước khi xuất ra C. Phiên bản đó tạo C, không dựa vào C để kiểm tra loại nào. Nó chỉ đơn giản là sử dụng C như là một trình biên dịch. Mã kết quả là nhanh chóng không khoan nhượng.
Đầu tiên anh ta tạo ra thứ mà anh ta gọi là "C with Classes" được triển khai bởi một bộ tiền xử lý đơn giản thành C. Nó cơ bản là C ++, nhưng bộ tiền xử lý đã làm rất ít hoặc không kiểm tra. Sau đó, ông đã sử dụng nó để viết Cfront, phiên bản mạnh mẽ hơn của trình dịch C ++ sang C, hoàn thành với kiểm tra kiểu, bảng biểu tượng, v.v.