GCC XML可能有助于恢复界面。
我正在使用它为OpenGL和Horde3D渲染引擎编写Prolog外部接口。
我感兴趣的接口仅限于C,但GCC XML也处理C++。
GCC XML解析源代码接口并发出和XML AST。然后用XML库很容易提取请求的信息。一个细微差别就是宏观符号的丧失:AFAIK只是值得生存下来的分析。作为一个例子,在这里(的一部分),用于生成FLI Prolog的代码:
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 <[email protected]>'-[call(NameChange, FileName)]
]),
forall(member(F, AllFuncs), make_func(Stream, F)),
close(Stream).
的XPath(你猜),它是SWI-Prolog的图书馆,使分析更简单...
“生成的C++代码”是什么意思? – m0skit0 2012-02-10 16:21:08
由第三方CORBA供应商从IDL生成。所以代码是标准的风格。 – 2012-02-10 16:29:45