搜索c++;代码分析器以查看所有签名 我正在寻找一个C++解析器,它能够用它的签名提取所有的函数和方法。有这样的东西吗
我看了一下gccxml,发现了一个问题,即它不能使用名称空间,并且在只有头文件的情况下也不好。您可以尝试使用gcc上设置的搜索c++;代码分析器以查看所有签名 我正在寻找一个C++解析器,它能够用它的签名提取所有的函数和方法。有这样的东西吗,c++,parsing,header-files,method-signature,C++,Parsing,Header Files,Method Signature,我看了一下gccxml,发现了一个问题,即它不能使用名称空间,并且在只有头文件的情况下也不好。您可以尝试使用gcc上设置的save temps标志编译代码,这使gcc输出带有宏展开和完整签名的文件。以下是.ii文件。最明显的选项: ctags cscope 只是GCC手册页的一个示例: -fdump-noaddr -fdump-unnumbered -fdump-translation-unit[-n] -fdump-class-hierarchy[-n] -fdump-ipa-all -fdu
save temps
标志编译代码,这使gcc输出带有宏展开和完整签名的文件。以下是.ii文件。最明显的选项:
-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
还有一个如果我没记错的话,Clang编译器显然有这样做的功能,甚至还有一个API可以访问解析器生成的代码树。您可以使用工具的
-dump
选项来解析头文件中函数和方法的签名:
XML描述符(DESC.XML
)如下所示:
<version>
VERSION
</version>
<headers>
/path(s)/to/headers/
</headers>
+1、顺便说一句,在过去的2年里,作为我的兼职项目的一部分,我编写了一个解析器,它从
类、名称空间、内部类
等中提取方法/函数签名。我想让它在某个时候商业化。@iammilind:我专注于赚钱。没有明确的结果yet@sehe方法你也写过类似的东西?我说的不仅仅是解析器。这是一个自动垃圾收集器项目,包括提取指针、类、命名空间、函数/方法等的签名。你在说什么?当然,gccxml确实能够处理和理解名称空间,您认为“只有头文件时不好”是什么意思?这使得输出几乎与头文件中的输出相同,但我需要一个易于为其他程序提取的解析输出。CLang生成代码的AST(抽象语法树),并提供访问它的ConsumerAST
基类。我更倾向于使用libclang(),但这应该适用于C-API工具ibclang。如果您可以访问C++,那么由于某些功能需要时间来移植到C-API,您将有更完整的信息直接接口。对于像声明这样的简单事情,它应该是完全合适的,尽管可能不太合适,因为C代码确实需要一些努力。
<version>
VERSION
</version>
<headers>
/path(s)/to/headers/
</headers>
'228' => {
'Header' => 'bzlib.h',
'Line' => '160',
'Param' => {
'0' => {
'algn' => '4',
'name' => 'bzerror',
'type' => '30'
},
'1' => {
'algn' => '4',
'name' => 'b',
'type' => '16'
},
'2' => {
'algn' => '4',
'name' => 'buf',
'type' => '68'
},
'3' => {
'algn' => '4',
'name' => 'len',
'type' => '41'
}
},
'Return' => '41',
'ShortName' => 'BZ2_bzRead'
},