2017-05-16 3 views
0

私は「X」という名前の変数を見つけたいので、私はまた、私はマッチャーでMatchFinderを設定し、私が一致するためにこれを使用MatchCallBackClang AST - サブツリーでのみ照合することはできますか?

matcher.addMatcher(decmatch, &callback); 

DeclarationMatcher decmatch = varDecl().bind("id"); 

DeclarationMatcher

を定義しますAST

matcher.matchAST(astcontext); 

与えられた私は、それだけで全体のASTのサブツリーではなく内側に一致させるためにこの正規表現を使用することが可能であるかどうかを知りたいのです。たとえば、与えられたFunctionDeclノードを持っているならば、私はマッチャーを使ってこのノードの下のノードに対してのみマッチさせたいと思う。私はドキュメンテーションを検索し、これで私を助ける何かを見つけることができませんでした。

答えて

2

CompoundStmtでMatchFinder::match(node, astContext)を使ってみました。私の想起は、特定のノードだけを調べて、子孫を処理するためにforEachDescendantを追加したことです。私はそれがサブツリー全体を通して再帰したかどうかは思い出さない。

これが機能しない場合は、ASTMatchFinder.cppのソースコードを参考にしてください。 matchAST()のソースはわずか約5行です。私はあなたが過負荷、matchAST(ASTContext &Context, Decl * myNode)を書いて、あなたがやりたいだろう

Visitor.TraverseDecl(myNode); 

Visitor.TraverseDecl(Context.getTranslationUnitDecl()); 

を交換した場合ことを期待します。

+0

ありがとうございます。 matchASTに似たMatchFinderに新しいメソッドを追加しました...チャームのように働きました! – joseCM

関連する問題