次の単純なヘッダー、demo.hについて考えてみます。
#define PERSIST
struct Serialised
{
int someTransientValue ;
PERSIST int aNumberToPersist ;
};
次のコードとClangのPythonAPIを使用して、ヘッダーを反復処理します。
import sys, clang.cindex
def callexpr_visitor(node, parent, userdata):
if node.location.file: print node.location.file, node.displayname, node.kind
return 2
tu = clang.cindex.Index.create().parse(sys.argv[1], args=['-x', 'c++'])
clang.cindex.Cursor_visit(tu.cursor, clang.cindex.Cursor_visit_callback(callexpr_visitor), None)
これにより、ClangのASTの要素が出力され、次の出力が生成されます。
demo.hシリアル化されたCursorKind.STRUCT_DECLdemo.hsomeTransientValue
CursorKind.FIELD_DECL demo.h
aNumberToPersist CursorKind.FIELD_DECL
'aNumberToPersist'というメンバー変数に関連付けられたプリプロセッサ宣言を抽出する方法を知っている人はいますか?解析ツリーに明確に現れる方法で変数に'タグを付ける'より良い方法はありますか?
Xubuntu 12.04、clangバージョン3.1(tags / RELEASE_31 / final)、ターゲット:x86_64-unknown-linux-gnuスレッドモデル:posix。