【发布时间】:2012-06-08 18:51:36
【问题描述】:
我一直在尝试从 Clang 获取 AST,但到目前为止还没有成功。我在堆栈中发现了一个一岁的 question 这里提到了使用 Clang 获取 ast 的另外两种方法,它们是:
./llvmc -cc1 -ast-dump file.c
./llvmc -cc1 -ast-print file.c
在这个 question 上提到了 doxygen 和一个 representation,其中给出了一个 ast,但我主要是在寻找一些文本形式的,例如 XML,以便可以进行进一步的分析。
最后,堆栈上还有另一个 question 关于确切的 XML 导入,但由于还提到的几个原因而停止了。
因此我的问题是,哪个版本以及如何从控制台使用它来获取 C 中给定代码的 ast 相关信息?我相信这是一个非常轻松的单行命令代码像上面的那些,但文档索引并没有像我读过的那样引用任何关于 ast 的内容,而且我在 llvmc 发现的唯一一个是关于手动编写 AST,这并不是我真正想要的。
我尝试了上面的所有命令,但它们在 2.9 版上都已经失败了,而且我已经发现 llvm 在每个版本之间都发生了很大变化。
谢谢。
【问题讨论】:
-
Doxygen AFAIK 不会产生任何类似于 AST 的东西。
-
您提到的其他答案说 XML 导出格式已从 Clang 中删除。恕我直言,这是一件好事,因为对于任何大小的 C 程序来说,真正的 XML 树都将是巨大的,而且 XML 操作起来也很尴尬;您想使用工具内置的工具来访问 AST。
-
... Clang 是您唯一会考虑的工具吗?
-
你能提供一些关于你想用 AST 做什么的细节吗?分析一些问题?转换?提炼? ...?
-
我误解了你写的东西,对不起。我认为它的意思是 Doxygen-the-tool-itself 产生 AST。我认为您的意思是 Doxygen-output-from-Clang 包含对 AST 的描述。
标签: clang abstract-syntax-tree