Рекомендовать интерфейс C, который сохраняет директивы препроцессора
Я хотел бы начать проект, который включает в себя преобразованиеC код, но я бы хотелвключают директивы препроцессора. Я не хочу изобретать велосипед, написав свой собственныйC парсер, так кто-нибудь знает интерфейс, который может разобратьC препроцессор иC код, и производить AST, который может быть использован для повторной генерации (или симпатичной печати) исходного кода?
например.,:
#define FILENAME "filename"
#include <stdio.h>
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 код. Скорее он должен представлять всю логику времени компиляции, включая переменные препроцессора.