Projekt CompCert jest kompilatorem badawczym C, który nie jest napisany w C lub C ++, ale bardziej w Ocaml i Coq.
Zauważ, że C ++ było tłumaczone na C (w Cfront ). Teraz możesz użyć interfejsu GCC do Gimple , następnie zrzucić Gimple do jakiejś bazy danych, a następnie napisać Gimple do tłumacza asemblera. Jednak względy prawne ( wyjątek biblioteki wykonawczej GCC ) wymagają, aby taki kompilator był oprogramowaniem typu open source. Zapytaj swojego prawnika o szczegóły, nie jestem prawnikiem. Stare warianty GCC zostały napisane w C (+ kilka języków specyficznych dla domeny) z interfejsem dla niektórych wariantów C ++. OpenWatcom może być kompilatorem C ++ napisanym w C (zostawiam to, aby to sprawdzić).
Źródło Compcert jest bezpłatnie dostępne do celów akademickich i badawczych. Jeśli chcesz korzystać z niego przemysłowo (i legalnie), musisz uzyskać licencję od Absinta.
Zobacz także to i tamto odpowiedzi na dwa powiązane pytania.
Gdyby w 2020 r. Powierzono mi zadanie napisania od zera kompilatora C (lub C ++) (działającego w systemie Linux, być może kompilatora krzyżowego ), prawdopodobnie nie napisałbym go w C ++. Zastanowiłbym się nad napisaniem go za pomocą Ocaml , Go lub Rust . I mógłbym oprzeć to na Frama-C, jeśli pozwolę . Jeśli jest to wymagane do kodowania w C lub C ++, najpierw kodowałbym dla niego bibliotekę śmieciarza , prawdopodobnie pewną warstwę trwałości - bardzo przydatną do optymalizacji całego programu - a następnie rozważyłbym podejście do metaprogramowania (generowanie większości kodu C lub C ++ z kompilator z moimi narzędziami ad-hoc, może jeśli jest to dozwolone). Bismon lub RefPerSys
Możesz znaleźć niektóre (mniej lub bardziej otwarte) kompilatory C zakodowane we Common Lisp lub Python (np. ShivyC lub nqcc ). Zobacz także ZetaC .
Zauważ, że najnowsze wersje GCC technicznie nie są kodowane w czystym C ++, są to tuziny języków specyficznych dla domeny zaangażowanych w GCC (niektóre z nich są w pełni Turinga ). Zobacz także mój stary GCC MELT projekt .
Nie zdziwię się, jeśli w przyszłych wersjach GCC pojawi się jakiś Python lub Guile interpreter byłby w nich osadzony (na przykład jako zamiennik menedżera przepustek GCC).
Zobacz także projekt MILEPOST GCC .