搜索c++;代码分析器以查看所有签名 我正在寻找一个C++解析器,它能够用它的签名提取所有的函数和方法。有这样的东西吗

搜索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

我看了一下gccxml,发现了一个问题,即它不能使用名称空间,并且在只有头文件的情况下也不好。

您可以尝试使用gcc上设置的
save temps
标志编译代码,这使gcc输出带有宏展开和完整签名的文件。以下是.ii文件。

最明显的选项:

  • ctags
  • cscope
  • 只是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
    

    还有一个

    如果我没记错的话,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' },