5

すべての関数とメソッドを署名付きで抽出できる C++ パーサーを探しています。このようなものはありますか?

そこでgccxmlを見てみましたが、名前空間を使用できず、ヘッダーファイルのみが存在する場合はうまくいかないという問題があります。

4

4 に答える 4

4

最も明白なオプション:

  1. ctags
  2. cscope

GCC man ページのサンプル:

-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 バックエンドもあります

于 2011-05-13T13:44:08.830 に答える
1

Clangコンパイラには明らかにこれを行う機能があります。正しく覚えていれば、パーサーによって生成されたコードツリーにアクセスするためのAPIもあります。

于 2011-05-13T14:10:44.927 に答える
1

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>

このツールは次のように機能します。

  1. 入力 XML 記述子で指定されたヘッダーで自動生成された一連のオプションを使用GCCして呼び出します。-fdump-translation-unit-I...
  2. によって生成された AST ダンプを解析しGCCます。
  3. 関数シグネチャと型定義をData::Dumperまたは XML 形式で生成します (追加の-xmlオプションが提供されている場合)。

ヘッダーint BZ2_bzRead ( int *bzerror, BZFILE *b, void *buf, int len )からの関数のサンプル シグネチャは次のようになります。bzlib.h

'228' => {
   'ヘッダー' => 'bzlib.h',
   'ライン' => '160',
   「パラメータ」=> {
                '0' => {
                         'algn' => '4',
                         'name' => 'bzerror',
                         'タイプ' => '30'
                       }、
                '1' => {
                         'algn' => '4',
                         '名前' => 'b',
                         'タイプ' => '16'
                       }、
                '2' => {
                         'algn' => '4',
                         'name' => 'buf',
                         'タイプ' => '68'
                       }、
                '3' => {
                         'algn' => '4',
                         'name' => 'len',
                         'タイプ' => '41'
                       }
              }、
   'リターン' => '41',
   'ShortName' => 'BZ2_bzRead'
 }、
于 2012-01-08T13:50:15.837 に答える
0

gcc でフラグを設定してコードをコンパイルしてみてくださいsave-temps。これにより、gcc はマクロの展開と完全な署名を含むファイルを出力します。これらは .ii ファイルです。

于 2011-05-13T13:37:43.473 に答える