Рекомендовать интерфейс C, который сохраняет директивы препроцессора

Я хотел бы начать проект, который включает в себя преобразование C код, но яхотел бывключают директивы препроцессора. Я нене хочу изобретать велосипед, написав свой собственный C синтаксический анализатор, так кто-нибудь знает интерфейс, который может анализировать C препроцессор и С код, и производить AST, который может быть использован для повторной генерации (или симпатичной печати) исходного кода?

например.,:

#define FILENAME "filename"
#include 

FILE *f=0;
...
if (file_is_open) {
#ifdef CAN_OPEN_IT
    f = fopen(FILENAME, "r");
#else
    printf("Unable to open file.\n");
#endif
}

Приведенный выше код должен быть разобран в некоторое представление в памяти, которое можно использовать для повторной генерации источника. Другими словами, он не должен обрабатываться как обычный C в два этапа, сначала обрабатывая директивы PP, а затем анализируя чистый C код. Скорее он должен представлять всю логику времени компиляции, включая переменные препроцессора.

Ответы на вопрос(4)

Ваш ответ на вопрос