GCC XML может помочь в восстановлении интерфейса.
Я использую его для написания внешнего интерфейса Prolog для механизма рендеринга OpenGL и Horde3D.
ИнтерфейсыЯ заинтересован в том, чтобы ограничиваться C, но GCC XML также обрабатывает C ++.
Интерфейс исходного кода GCC для синтаксического анализа XML, а также XML и AST.Затем с помощью библиотеки XML довольно легко извлечь запрашиваемую информацию.Нюанс это потеря макро символов: AFAIK только значения выживают до разбора.Например, здесь (часть) кода Пролог, используемого для генерации FLI:
make_funcs(NameChange, Xml, FileName, Id) :-
index_id(Xml, Indexed),
findall(Name:Returns:ArgTypes,
(xpath(Xml, //'Function'(@file = Id, @name = Name, @returns = ReturnsId), Function),
typeid_indexed(Indexed, ReturnsId, Returns),
findall(Arg:Type, (xpath(Function, //'Argument'(@name = Arg, @type = TypeId), _),
typeid_indexed(Indexed, TypeId, Type)), ArgTypes)
),
AllFuncs),
length(AllFuncs, LAllFuncs),
writeln(FileName:LAllFuncs),
fat('prolog/h3dplfi/~s.cpp', [FileName], Cpp),
open(Cpp, write, Stream),
maplist(\X^((X = K-A -> true ; K = X, A = []), format(Stream, K, A), nl(Stream)),
['#include "swi-uty.h"',
'#include <~@>'-[call(NameChange, FileName)]
]),
forall(member(F, AllFuncs), make_func(Stream, F)),
close(Stream).
xpath (как вы догадываетесь), это библиотека SWI-Prolog, которая упрощает анализ...