Я хотел бы начать проект, который включает в себя трансформирующий C код, но я хотел бы включать директивы препроцессора. Я не хочу изобретать велосипед, написав свой собственный парсер, так что кто-нибудь знает интерфейс, который может разобрать C препроцессор и C код и создать AST, который может быть использован для повторного -генерировать (или красиво-распечатать) исходный источник?Рекомендуют C передний конец, который сохраняет директивы препроцессора
например,:.
#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. Скорее, он должен представлять всю логику компиляции, включая препроцессорные переменные.
Спасибо, похоже, что это по правому краю. – Steve
Я не верю, что Кланг фиксирует директивы препроцессора в своих АСТ. –