El proyecto CompCert es un compilador de investigación C que no está escrito en C ni en C ++, sino más en Ocaml y Coq.
Observe que C ++ solía traducirse a C (en Cfront ). Ahora puede usar el front-end GCC para Gimple , luego volcar el Gimple en alguna base de datos, luego escribir un Gimple en su traductor ensamblador. Pero las razones legales (la excepción de la biblioteca de tiempo de ejecución de GCC ) requieren que dicho compilador sea de código abierto. Pídale detalles a su abogado, no soy un abogado. Las variantes antiguas de GCC se han escrito en C (+ varios lenguajes específicos de dominio) con un front-end para alguna variante de C ++. OpenWatcom podría ser un compilador de C ++ escrito en C (lo dejo para verificar eso).
La fuente de Compcert está disponible gratuitamente para fines académicos y de investigación. Si desea usarlo industrialmente (y legalmente), necesita obtener una licencia de Absint.
Vea también esto y aquello que responde a dos preguntas relacionadas.
Si en 2020 se me asignó la tarea de escribir un compilador C (o C ++) desde cero (ejecutándose en Linux, tal vez algún compilador cruzado ), probablemente no lo escribiré en C ++. Consideraría escribirlo usando Ocaml , Go o Rust . Y podría basarlo en Frama-C si así lo permite. Si fuera necesario para codificar en C o C ++, primero codificaría una biblioteca recolectora de basura , probablemente alguna capa de persistencia , muy útil para la optimización de todo el programa , y luego consideraría un enfoque de metaprogramación (generando la mayor parte del código C o C ++ del compilador con mis herramientas ad-hoc, tal vez Bismon o RefPerSys si está permitido)
Puede encontrar algunos compiladores de C (más o menos de código abierto) codificados en Common Lisp o en Python (por ejemplo, ShivyC o nqcc ). Mira también en ZetaC .
Tenga en cuenta que las versiones recientes de GCC técnicamente no están codificadas en C ++ puro, son una docena de lenguajes específicos de dominio involucrados en GCC (varios de ellos son completos de Turing ). Vea también mi antiguo proyecto GCC MELT .
No me sorprendería si, en futuras versiones de GCC, algún intérprete de Python o Guile se integrara dentro de ellos (por ejemplo, como un reemplazo para el administrador de pases de GCC).
Mire también el proyecto MILEPOST GCC .