【问题标题】:How to use clang::TreeTransform?如何使用 clang::TreeTransform?
【发布时间】:2016-11-03 22:21:46
【问题描述】:

我正在尝试找出 clang::TreeTransform 的集成点。

目标是在代码生成之前转换 AST。

提前致谢。

【问题讨论】:

  • 您阅读文档了吗?
  • @Nawaz 哪个文档? - 我没有找到任何关于 TreeTransform 的页面
  • LLVM 的 doxygen 文档,例如 this ... 是的,您必须花一点时间来弄清楚如何使用它。
  • @Nawaz 感谢您的链接,这就是我首先了解 TreeTransform 的地方。但是它没有提到在哪里注入或运行 TreeTransformer。

标签: c++ clang llvm transformation abstract-syntax-tree


【解决方案1】:

一种方法是使用ASTFrontEndAction,然后重新定义方法 CreateASTConsumer 以创建 SemaConsumer(而不是 ASTConsumer)。

然后在handleTopLevelDecl 方法中通过将Sema 交给它来创建一个RecursiveASTVisitor,这对于TreeTransform 来说是必需的。

然后RecursiveASTVisitor的Visit方法可以创建一个你的TreeTransform的实例,然后调用相应的transforming方法。

PS:有时在转换复合语句时,函数范围可能为空。你可以这样做

SemaRef.PushFunctionScope();
SemaRef.PushCompoundScope();

在调用转换函数之前。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多