我正在寻找一个能够提取所有函数和方法及其签名的 c++ 解析器。有这样的事情吗?
我在那里查看了 gccxml 我有一个问题,它不能使用命名空间,并且当只存在一个头文件时它不好。
我正在寻找一个能够提取所有函数和方法及其签名的 c++ 解析器。有这样的事情吗?
我在那里查看了 gccxml 我有一个问题,它不能使用命名空间,并且当只存在一个头文件时它不好。
最明显的选择:
只是 GCC 手册页的一个示例:
-fdump-noaddr -fdump-unnumbered -fdump-translation-unit[-n] -fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline
-fdump-statistics -fdump-tree-all -fdump-tree-original[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-alias -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n] -fdump-tree-dce[-n]
-fdump-tree-gimple[-raw] -fdump-tree-mudflap[-n] -fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiopt[-n] -fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect -fdump-tree-sink -fdump-tree-sra[-n]
-fdump-tree-fre[-n] -fdump-tree-vrp
还有一个gccxml 后端
Clang 编译器显然具有执行此操作的功能,如果我没记错的话,甚至还有一个 API 可以访问解析器生成的代码树。
您可以使用abi-compliance-checker-dump
工具的选项来解析头文件中的函数和方法的签名:
abi-compliance-checker -lib NAME -dump DESC.xml -headers-only -stdout > api.dump
XML 描述符 ( DESC.xml
) 如下:
<version>
VERSION
</version>
<headers>
/path(s)/to/headers/
</headers>
该工具的工作原理如下:
GCC
使用输入 XML 描述符中指定的标头上-fdump-translation-unit
的一组自动生成的选项进行调用;-I...
GCC
解析由;生成的 AST 转储-xml
提供了附加选项)。int BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len )
标头中函数的示例签名bzlib.h
如下所示:
'228' => { '标题' => 'bzlib.h', '线' => '160', '参数' => { '0' => { 'algn' => '4', '名称' => 'bzerror', '类型' => '30' }, '1' => { 'algn' => '4', '名称' => 'b', '类型' => '16' }, '2' => { 'algn' => '4', '名称' => 'buf', '类型' => '68' }, '3' => { 'algn' => '4', '名称' => 'len', '类型' => '41' } }, '返回' => '41', 'ShortName' => 'BZ2_bzRead' },
您可以尝试使用save-temps
gcc 上设置的标志编译代码,这会使 gcc 输出具有宏展开和完整签名的文件。这些是 .ii 文件。