Le projet CompCert est un compilateur C de recherche qui n'est pas écrit en C ou en C ++, mais plus en Ocaml et Coq.
Remarquez que C ++ était auparavant traduit en C (dans Cfront ). Vous pouvez maintenant utiliser l' interface GCC vers Gimple , puis vider le Gimple dans une base de données, puis écrire un Gimple dans votre traducteur d'assembleur. Mais pour des raisons juridiques (l' exception de la bibliothèque d'exécution GCC ), un tel compilateur doit être open source. Demandez des précisions à votre avocat, je ne suis pas avocat. Les anciennes variantes de GCC ont été écrites en C (+ plusieurs langages spécifiques au domaine) avec un front-end pour une variante de C ++. OpenWatcom pourrait être un compilateur C ++ écrit en C (je vous laisse le vérifier).
La source de Compcert est disponible gratuitement à des fins académiques et de recherche. Si vous souhaitez l'utiliser industriellement (et légalement), vous devez obtenir une licence d'Absint.
Voir aussi ceci et cela qui répond à deux questions connexes.
Si j'ai été chargé en 2020 d'écrire un compilateur C (ou C ++) à partir de zéro (fonctionnant sous Linux, peut-être un compilateur croisé ), je ne l'écrirai probablement pas en C ++. J'envisagerais de l' écrire en utilisant Ocaml , Go ou Rust . Et je pourrais le baser sur Frama-C si cela était permis. Si je devais coder en C ou C ++, je coderais d'abord une bibliothèque de garbage collector pour cela, probablement une couche de persistance - très utile pour l'optimisation de programme entier - et ensuite je considérerais une approche de métaprogrammation (générant la plupart du code C ou C ++ du compilateur avec mes outils ad-hoc, peut-être Bismon ou RefPerSys si cela est autorisé).
Vous pouvez trouver des compilateurs C (plus ou moins open source) codés en Common Lisp ou en Python (par exemple ShivyC ou nqcc ). Regardez également dans ZetaC .
Notez que les versions récentes de GCC ne sont pas techniquement codées en C ++ pur, elles sont une douzaine de langages spécifiques à un domaine impliqués dans GCC (plusieurs d'entre eux étant Turing-complete ). Voir aussi mon ancien projet GCC MELT .
Je ne serai pas surpris si, dans les futures versions de GCC, un interpréteur Python ou Guile serait intégré à l'intérieur (par exemple, en remplacement du gestionnaire de passes de GCC).
Consultez également le projet MILEPOST GCC .