Trình biên dịch bao gồm hai khối chính: 'giao diện người dùng' và 'kết thúc'. Phần đầu của trình biên dịch phân tích mã nguồn và xây dựng một số dạng 'đại diện trung gian' của mã nguồn được cho là dễ dàng hơn để phân tích bằng thuật toán máy hơn là mã nguồn (tức là trong khi mã nguồn ví dụ: C++ được thiết kế để giúp lập trình viên con người viết mã, biểu mẫu trung gian được thiết kế để giúp đơn giản hóa thuật toán phân tích biểu mẫu trung gian cho biết dễ dàng hơn). Phần cuối của trình biên dịch có dạng trung gian và sau đó chuyển đổi nó thành 'ngôn ngữ đích'.
Bây giờ, ngôn ngữ đích cho trình biên dịch sử dụng chung là ngôn ngữ lắp ráp cho các bộ vi xử lý khác nhau, nhưng không có gì để ngăn cản trình biên dịch kết thúc để tạo mã bằng một ngôn ngữ khác, miễn là ngôn ngữ đích được cho là (ít nhất) linh hoạt như một bộ tổng hợp CPU chung. Bây giờ, như bạn có thể tưởng tượng, C chắc chắn là linh hoạt như một bộ xử lý của CPU, như vậy mà một trình biên dịch C + + C thực sự không có vấn đề gì để thực hiện từ một pov kỹ thuật.
Vì vậy, bạn có: C++ --- Frontend ---> someIntermediaryForm --- backend ---> C
Bạn có thể muốn kiểm tra những kẻ ra: http://www.edg.com/index.php?location=c_frontend (liên kết ở trên chỉ là thông tin cho những gì thể được thực hiện, họ cấp phép trước của họ kết thúc cho hàng chục ngàn đô la)
PS theo như tôi biết, không có một C như ++ để biên dịch C bởi GNU, và điều này hoàn toàn đánh bại tôi (nếu Tôi đúng về điều này). Bởi vì ngôn ngữ C là khá nhỏ và cơ chế nội bộ khá thô sơ, trình biên dịch C đòi hỏi một công việc giống như một năm (tôi có thể nói với bạn điều này vì tôi đã viết một trình biên dịch như vậy từ nhiều năm trước, và nó tạo ra một [ mã trung gian máy ảo) và có thể có trình biên dịch C++ được cập nhật, duy trì trong khi chỉ phải viết trình biên dịch C một lần ... Điện thoại
@MSalters: Cảm ơn con trỏ về trình biên dịch Comeaus. Nhưng thật đáng buồn là nó không phục vụ cho mục đích của tôi, vì không thể có được mã định dạng trung gian trình biên dịch comeaus, và thậm chí nếu chúng ta thu được bằng cách nào đó nó không thể biên dịch được bằng các trình biên dịch ANSI-C bình thường. – goldenmean
Nếu mã của bạn không sử dụng ngoại lệ và các mẫu, bạn có thể có cơ hội nhận một bản sao cũ của cfront để hoạt động trên mã của bạn. Nhưng như MSalters cho biết nó sẽ xấu xí :-) – lothar
nó cũng sẽ phải sử dụng không có chức năng thư viện chuẩn –