【问题标题】:When will a Clang AST node have multiple parents?Clang AST 节点何时会有多个父节点?
【发布时间】:2020-02-17 12:48:31
【问题描述】:

类 clang::ASTContext 有一个方法:

DynTypedNodeList getParents(const NodeT &Node)

返回给定 AST 节点的父节点列表。

通常作为树的 AST 将是一个树结构,但出于某些原因(可能是性能原因)Clang 允许一个节点有多个父节点。

在什么条件下(什么 C++ 源代码模式),getParents() 会返回多个父母?

【问题讨论】:

  • 现有答案仅提供1个示例,需要更多示例的更多答案。

标签: clang libtooling


【解决方案1】:

原答案(不正确)

AST 是一棵树,每个节点都有一个父节点。但是,getParents 不仅返回父级,还返回父级的父级,依此类推。所以,事实上,函数最好命名为getAncestors。

更新答案

原始答案确实不正确,getParents 为绝大多数 AST 节点返回了一个节点。这是来自clang-tidy 的评论,涵盖了该主题:

Stmt 有多个父节点的情况很少见,但实际上确实发生在我们感兴趣的 AST 部分。具体来说,InitListExpr 节点导致 ASTContext::getParent() 为其中的某些节点返回多个父节点子树,因为 RecursiveASTVisitor 访问 InitListExpr 的句法和语义形式,两种形式的父子关系不同。

也许还有其他节点,但我找不到这方面的信息。

【讨论】:

  • 很好,现在你得到 27 美元,我拿回我的 1 美元反对票和 2 美元选择钱,现在我又回到了从未被反对的状态。
猜你喜欢
  • 1970-01-01
  • 2015-08-28
  • 2017-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多