Saya pikir BS menjawab pertanyaan itu:
Kompiler C ++ pertama (Cfront) ditulis dalam C ++. Untuk membangun itu, saya pertama kali menggunakan C untuk menulis preprocessor "C with Classes" -to-C. "C with Classes" adalah dialek C yang menjadi leluhur langsung ke C ++. Preprosesor itu menerjemahkan konstruksi "C dengan Kelas" (seperti kelas dan konstruktor) ke dalam C. Itu adalah preprosesor tradisional yang tidak mengerti semua bahasa, membuat sebagian besar jenis memeriksa untuk kompiler C yang harus dilakukan, dan menerjemahkan masing-masing membangun tanpa pengetahuan lengkap.
Saya kemudian menulis versi pertama Cfront di "C with Classes". Cfront adalah kompiler tradisional yang melakukan sintaksis lengkap dan pemeriksaan semantik sumber C ++. Untuk itu, ia memiliki parser lengkap, membangun tabel simbol, dan membangun representasi pohon internal lengkap dari setiap kelas, fungsi, dll. Ia juga melakukan beberapa optimasi tingkat sumber pada representasi pohon internal konstruksi C ++ sebelum menghasilkan C. Versi yang dihasilkan C, tidak bergantung pada C untuk pengecekan tipe apa pun. Itu hanya menggunakan C sebagai assembler. Kode yang dihasilkan cepat tanpa kompromi.
Pertama dia menciptakan sesuatu yang dia sebut "C with Classes" diimplementasikan oleh preprocessor sederhana ke dalam C. Itu pada dasarnya C ++, tetapi preprocessor melakukan sedikit atau tidak ada pengecekan. Dia kemudian menggunakannya untuk menulis Cfront, versi yang lebih kuat dari penerjemah C ++ ke C, lengkap dengan pengecekan tipe, tabel simbol, dll.