Для всего, что связано с точным анализом C ++, требуется где-то целый интерфейс C ++ (иначе вы не получите ответов, или они будут ошибаться, и это плохо работает, когда у вас «большие» приложения). Здесь не так много практических ответов.
Уже упоминалось, что GCCXML является производным от GCC пакетом, поэтому он имеет необходимый внешний интерфейс C ++. Он генерирует XML, таким образом, он генерирует МНОГО выходных данных, которые вам придется прочитать обратно, чтобы сформировать «структуру данных в памяти», предложенную в другом ответе. К сожалению, GCCXML уже создает эту структуру данных в памяти, затем экспортирует ее как XML и вынуждает вас строить ее снова. Конечно, вы можете просто использовать GCC, который строит структуру данных в памяти, но тогда вам нужно взломать GCC, чтобы он был тем, что вы хотите, и он действительно, действительно хочет быть компилятором. Это означает, что у вас будет бой, чтобы подчинить его своей воле (и объясняет, почему существует GCCXML: большинство людей не хотят этого боя).
Не упоминается внешний интерфейс Edison Design Group C ++ (EDG), который напрямую встраивает его в структуру данных памяти. Это передний конец; вам придется выполнять весь анализ самостоятельно, но ваша задача может быть достаточно простой, чтобы это не было сложным.
Последнее известное мне решение: C ++ FrontEnd для DMS . DMS является основой для построения анализа программ, а его C ++ FrontEnd является полным интерфейсом для C ++ (например, выполняет все, что делают интерфейсы GCC и Edison: анализ, построение дерева, разрешение имени / типа). И вам придется кодировать свой специальный анализ так же, как и для GCCXML и EDG, просматривая структуры данных «в памяти», создаваемые DMS.
Что действительно отличается, так это то, что DMS может затем использоваться для фактического изменения вашего исходного кода путем обновления его в структурах данных памяти и регенерации компилируемого кода из этих структур памяти, включая исходные комментарии.