3

我一直在尝试从 Clang 获取 AST,但到目前为止我还没有成功。我在堆栈中发现了一个一年前的问题,其中提到了使用 Clang 获取 ast 的另外两种方法,它们是:

./llvmc -cc1 -ast-dump 文件.c

./llvmc -cc1 -ast-打印文件.c

在这个问题上,提到了 doxygen 并给出了一个 ast 的表示,但我主要是在寻找一些文本形式的表示,例如 XML,以便可以执行进一步的分析。

最后,堆栈上还有另一个关于XML 导入的问题,但由于还提到了几个原因,它被停止了。

因此,我的问题是,哪个版本以及如何从控制台使用它来获取 C 中给定代码的 ast 相关信息?我相信这是一个非常轻松的单行命令代码,就像上面那样,但是文档索引并没有像我读过的那样引用任何关于 ast 的内容,而且我在 llvmc 发现的唯一一个是关于手动编写 AST 不是真的是我要找的。

我尝试了上面的所有命令,但它们在 2.9 版上都已经失败了,而且我已经发现 llvm 在每个版本之间都发生了很大变化。

谢谢你。

4

1 回答 1

3

OP 说“也接受其他建议”。

他可能会考虑我们的DMS Software Reengineering Toolkit及其C 前端

虽然展示由此产生的 C AST 很容易,但展示由 DMS 使用相同的 C 前端(ObjectiveC 是 C 的方言)产生的 ObjectiveC AST [已经在 SO] 更容易。请参阅https://stackoverflow.com/a/10749970/120163 DMS 也可以生成与此等效的 XML。

我们不建议将树导出为文本,因为真实代码的真实树非常庞大,并且根据我们的经验,很难将其作为文本或 XML 对象进行操作。通常需要解析之外的机器。请参阅我关于解析后的生活的讨论

于 2012-06-08T22:34:34.590 回答