C++ Clang AST-是否只能在子树上匹配?

C++ Clang AST-是否只能在子树上匹配?,c++,clang,abstract-syntax-tree,C++,Clang,Abstract Syntax Tree,我想找到一个名为“x”的变量,所以我定义了一个DeclarationMatcher DeclarationMatcher decmatch = varDecl().bind("id"); 此外,我还使用matcher和MatchCallBack设置了MatchFinder matcher.addMatcher(decmatch, &callback); 我用它来匹配给定的AST matcher.matchAST(astcontext); 我想知道是否可以使用此匹配器仅在子树内部

我想找到一个名为“x”的变量,所以我定义了一个DeclarationMatcher

DeclarationMatcher decmatch = varDecl().bind("id");
此外,我还使用matcher和MatchCallBack设置了MatchFinder

 matcher.addMatcher(decmatch, &callback);
我用它来匹配给定的AST

 matcher.matchAST(astcontext);

我想知道是否可以使用此匹配器仅在子树内部而不是在整个AST上进行匹配。例如,如果一个函数有一个给定的FunctionDecl节点,我想使用matcher只匹配这个节点下面的节点。我已经搜索了文档,但找不到任何帮助。

我在compoundsmt上使用了
MatchFinder::match(node,astContext)
尝试了类似的方法。我记得我只检查了特定的节点,并且我添加了
foreachgender
来处理后代。我不记得它是否在整个子树中递归

如果这对您不起作用,那么ASTMatchFinder.cpp中的源代码应该会有所帮助。
matchAST()
的源代码大约只有五行。如果您编写了一个重载,
matchAST(ASTContext&Context,Decl*myNode)
,并替换了

Visitor.TraverseDecl(Context.getTranslationUnitDecl());


这可以满足您的需要。

我在CompoundStmt上使用
MatchFinder::match(node,astContext)
尝试了类似的方法。我记得我只检查了特定的节点,并且我添加了
foreachgender
来处理后代。我不记得它是否在整个子树中递归

如果这对您不起作用,那么ASTMatchFinder.cpp中的源代码应该会有所帮助。
matchAST()
的源代码大约只有五行。如果您编写了一个重载,
matchAST(ASTContext&Context,Decl*myNode)
,并替换了

Visitor.TraverseDecl(Context.getTranslationUnitDecl());


那可以满足您的要求。

谢谢您的想法!在MatchFinder中添加了一个类似于matchAST的新方法。。。工作得很有魅力!谢谢你的想法!在MatchFinder中添加了一个类似于matchAST的新方法。。。工作得很有魅力!