1

Clang libTooling 開発は初めてです。

次の変数宣言を検討してください

int i, j, k = 10;
^              ^  

私のプロジェクト要件では、「i」、「j」、および「k」を含む宣言式全体をキャプチャしたいと考えています。

clang libTooling ですべての変数を含む完全な宣言式をキャプチャする方法は?

私が経験しているのは、完全な式のビジターを取得するのではなく、個々の変数宣言のビジターを取得することです。

これは clang libTooling で予期される動作ですか、それとも何か不足していますか?

単一行の複数の宣言または回避策をキャプチャする正しい方法を教えてください。どんな種類の助けも本当に感謝しています。

ありがとう、ヘマント

4

1 に答える 1

2

説明した問題を解決するには、たとえば、DeclStmtノード ( だけでなくVarDecl) を訪問する再帰的な AST ビジターを作成できます。このサイトをチェックして、そのようなビジターの書き方を確認してください: http://clang.llvm.org/docs/RAVFrontendAction.html

DeclStmtノードだけでなく、ノードにアクセスする必要がある理由VarDeclは、宣言ステートメントの AST 表現を見ることで説明できます。

    |-DeclStmt 0x35dbfc8 <line:3:1, col:17>
    | |-VarDecl 0x35dbe48 <col:1, col:5> col:5 i 'int'
    | |-VarDecl 0x35dbeb8 <col:1, col:8> col:8 j 'int'
    | `-VarDecl 0x35dbf28 <col:1, col:15> col:11 k 'int' cinit
    |   `-IntegerLiteral 0x35dbf88 <col:15> 'int' 10

ご覧のとおり、すべてのノード (および指定されている場合は初期化)DeclStmtが「キャプチャ」されます。VarDecl訪問者が にアクセスすると、宣言が単一の宣言を参照しているかどうかDeclStmtをメンバー関数で確認できます。isSingleDecl()そうでない場合(あなたの場合のように)、、 などを使用VarDeclして、さまざまなノードへのイテレータを取得できます。decl_begin()decl_end()

于 2016-12-27T16:17:18.747 に答える