Проект CompCert - это исследовательский компилятор C, который написан не на C или C ++, а на Ocaml и Coq.
Заметьте, что C ++ раньше переводили в C (в Cfront ). Теперь вы можете использовать интерфейс GCC для Gimple , затем выгрузить Gimple в некоторую базу данных, а затем написать Gimple для вашего ассемблерного переводчика. Но юридические причины ( исключение библиотеки времени выполнения GCC ) требуют, чтобы такой компилятор был открытым исходным кодом. Узнайте подробности у своего адвоката, я не юрист. Старые варианты GCC были написаны на C (+ несколько доменных языков) с внешним интерфейсом для некоторого варианта C ++. OpenWatcom может быть компилятором C ++, написанным на C (я оставляю вас проверить это).
Источник Compcert находится в свободном доступе для академических и исследовательских целей. Если вы хотите использовать его в промышленности (и на законных основаниях), вам необходимо получить лицензию от Absint.
Смотрите также это и это ответы на два связанных вопроса.
Если бы в 2020 году мне было поручено написать компилятор C (или C ++) с нуля (работающий в Linux, может быть, кросс-компилятор ), я, вероятно, не буду писать его на C ++. Я хотел бы написать это с помощью Ocaml , Go или Rust . И я мог бы основывать это на Frama-C, если это позволено. Если бы мне потребовалось кодировать на C или C ++, я бы сначала написал для него библиотеку сборщика мусора , возможно, некоторый постоянный уровень - очень полезный для оптимизации всей программы, - а затем я бы рассмотрел подход метапрограммирования (генерирующий большую часть кода C или C ++ из компилятор с моими специальными инструментами, возможно Bismon или RefPerSys если позволено).
Вы можете найти некоторые (более или менее с открытым исходным кодом) компиляторы C, написанные на Common Lisp или Python (например, ShivyC или nqcc ). Посмотрите также на ZetaC .
Обратите внимание, что последние версии GCC технически не кодируются на чистом C ++, они представляют собой дюжину доменных языков, участвующих в GCC (некоторые из них являются Turing-complete ). Смотрите также мой старый проект GCC MELT .
Я не удивлюсь, если в будущих версиях GCC в них будет встроен какой- либо интерпретатор Python или Guile (например, в качестве замены для менеджера проходов GCC).
Смотрите также в проект MILEPOST GCC .