Writing a front end in C++ would make that process: Stage0: any 'ol C compiler -> gcc<c, c++> Stage1: gcc<c, c++> + new_frontend -> gcc<c, c++, New> Stage2: gcc<c, c++, New> -> presumably_finished_compiler Stage3: presumably_finished_compiler -> finished_compiler