编写 Clang AST 匹配器

Writing Clang AST Matchers

是否可以像下面的代码一样在一个表达式中使用绑定字符串:

expr(declRefExpr().bind("id"), hasDesendent(declRefExpr(has("id")));

基本上是使用一个节点的绑定 ID 字符串来查找另一个节点。

比较2个节点最好的方法是在不同的id string中绑定,然后在回调方法中进行比较。

这在tutorial中有解释。

在上面的link中可以找到如下代码:

const VarDecl *IncVar = Result.Nodes.getNodeAs<VarDecl>("incVarName");
const VarDecl *CondVar = Result.Nodes.getNodeAs<VarDecl>("condVarName");
if (!areSameVariable(IncVar, CondVar))
    return;

此代码旨在比较回调函数中绑定在变量incVarNamecondVarName中的节点。

是的,可以使用 equalsBoundNode

用法:

expr(declRefExpr().bind("id"), hasDesendent(declRefExpr(equalsBoundNode("id")));