Для этого вам нужно использовать немодифицированный C лексер + синтаксический анализатор (часто называемый внешним интерфейсом) и модифицированный компонент генерации кода (внутренний конец).
pycparser Эли Бендерски можно использовать в качестве внешнего интерфейса, а мини-компилятор Atul C можно использовать в качестве источника вдохновения для серверная часть, генерирующая код: http://people.cs.uchicago.edu/~varmaa/mini_c/
С помощью pycparser Эли Бендерски все, что вам нужно сделать, это преобразовать AST в граф потока управления (CFG) и сгенерировать оттуда код. Легче начать с поддержки подмножества C, чем полного шебанга.
Два инструмента написаны на Python, но вы не упомянули какие-либо настройки языка реализации :)
Я обнаружил, что большинство компиляторов с открытым исходным кодом (за исключением clang, кажется) слишком тесно связаны, чтобы легко модифицировать серверную часть. В Clang и особенно в GCC не так просто погрузиться, нигде НЕ так просто, как в двух вышеперечисленных. И поскольку синтаксический анализатор Эли выполняет полный C99 (он анализирует все, что я ему бросил), он кажется хорошим интерфейсом для дальнейшей разработки. Примеры проекта Github демонстрируют большинство функций проекта и его легко начать. Пример, который преобразует C в буквальный английский, заслуживает внимания, но может потребоваться некоторое время, чтобы полностью разобраться. В основном он обрабатывает любое выражение C, поэтому является хорошим справочником по работе с различными узлами AST.
Я также рекомендовал вышеперечисленные инструменты в своем ответе на этот вопрос: код
person
Morten Jensen
schedule
07.03.2014
avr-gcc
или MIPS) в байт-код VM собственной разработки. - person Morten Jensen   schedule 08.03.2014