すべての関数とメソッドを署名付きで抽出できる C++ パーサーを探しています。このようなものはありますか?
そこでgccxmlを見てみましたが、名前空間を使用できず、ヘッダーファイルのみが存在する場合はうまくいかないという問題があります。
すべての関数とメソッドを署名付きで抽出できる C++ パーサーを探しています。このようなものはありますか?
そこでgccxmlを見てみましたが、名前空間を使用できず、ヘッダーファイルのみが存在する場合はうまくいかないという問題があります。
最も明白なオプション:
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 バックエンドもあります
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
して呼び出します。-fdump-translation-unit
-I...
GCC
ます。-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' }、
gcc でフラグを設定してコードをコンパイルしてみてくださいsave-temps
。これにより、gcc はマクロの展開と完全な署名を含むファイルを出力します。これらは .ii ファイルです。