マッチしたASTノードのすべての祖先または子孫を通過して、後でその情報を使用して入力ソースコードの一部を修正する必要があります。 私はそれを行う方法を模索しようとしました。 ASTContext
クラスのメンバー関数getParents
を見ました。私はそれを使用して、AST階層を上って、現在一致しているノードのすべての祖先ノードを訪問することができます。その問題は、親ノードを取得したときに、そのノードがその親を取得しようとするコンテキストがなくなったことです。私は新しいノードのためにASTContext
を再構築しようとする可能性がありますが、それは可能ならばそれ自体別の大きな仕事のようです。 私が探している最も低いNodeKind(C階層で最も低い)はcallExpr
で、私が探している最高のものはfunctionDecl
です。 run
に一致するコントロールが返された後、一致するASTノードのすべての祖先または子孫を取得するには、MatchCallback
?マッチしたノードのすべての祖先または子孫を取得する
0
A
答えて
0
TranslationUnitDeclに達するまで、親宣言が再帰的に到達する可能性がありますが、代わりにTranslationUnitDeclの宣言を実際に反復し、代わりにFunctionDeclに向かうことを提案します。
翻訳単位内のすべてのTagDeclを検索し、指定したFunctionDeclについてそのクラスのすべてのメソッドを検索し、消費することがなくなるまで再帰的にそのTagDecl内のTagDeclを消費する再帰関数を作成できます。
これにより、必要な特定のASTノードの完全な記録をより簡単に保持でき、おそらく書きにくくなります。子孫(子供)のため
あなたが後方にあなたのように動作することを選択した場合は、あなたが(未テスト)このような何かを試すことができ
FunctionDecl *FD;
DeclContext *PC = FD->getParent();
while (!isa<TranslationUnitDecl>(Decl::castFromDeclContext(PC))) {
//consume
PC = PC->getParent();
}
あなただけの子供や反復で型にキャストする必要があります。
関連する問題
- 1. mysqlまたはphpの親の子孫をすべて取得しますか?
- 2. カメを祖先/子孫に分ける方法は?または '左に'/'右に'
- 3. Java:子孫のツリートップの2番目に高い祖先を取得
- 4. sql特定の祖先(ルートカテゴリ)からすべての子と孫を選択します。
- 5. jsonリクエストのすべての子孫を取得する
- 6. 私はテキストに一致するすべての祖先divタグを取得したいのpython
- 7. MongoDB:メイン文書とすべての祖先を取得するには
- 8. Xpath:祖先に関係なく子孫を選択する方法は?
- 9. 親ノードのすべての子ノードを取得するneo4j
- 10. Linqのすべての子リスト、孫リスト、孫孫リストなどのカウントを取得する方法
- 11. SQL階層 - 与えられたノードのすべての祖先の完全なパスを解決します。
- 12. Regexは1つのマッチですべてのマッチを取得します
- 13. java内のツリー内の特定のノードのすべての祖先ノード名を出力しますか?
- 14. DOMDocumentからすべての子ノードを取得するには?
- 15. 指定された親IDからすべての子ノードと孫ノードを検索するPHP
- 16. XDocumentは、選択したものの子孫を取得しません。
- 17. C#のLINQ:tag.descendantsは、すべての子孫
- 18. D3.jsツリーレイアウト - 子孫の数を取得したい
- 19. jQueryのは、子供や孫を取得
- 20. xslt2.0を使用して現在のノードの(祖先:: w:p)の先行兄弟を取り出す方法は?
- 21. ピーウィーは、すべての子孫
- 22. ExtJS 4 - 指定された要素の子孫であるすべてのコンポーネントを取得する
- 23. cheerioを使ってdivのすべての子ノードを取得しますか?
- 24. すべての子孫を取得フレックス内のVBox(コンテナ)の要素(コントロール)?
- 25. FitNesseサブウィキにすべての祖先セットアップページを含めるには?
- 26. Unity3dの子どもの子どもたちをすべて取得します
- 27. Python networkx:すべてのノードの可能なすべての宛先を取得します。
- 28. Umbracoの子ノードからすべてのルートノードのリストを取得
- 29. 特定のノードからツリー祖先のリストを取得するにはどうすればよいですか?
- 30. plistのすべての(または選択した子孫の)ノードを一度に展開するにはどうすればよいですか?