如何使用Clang在当前版本上获取AST?

如何使用Clang在当前版本上获取AST?,clang,abstract-syntax-tree,Clang,Abstract Syntax Tree,我一直在尝试从Clang获得AST,但到目前为止还没有成功。我在stack找到了一个一岁的孩子,他提到了使用Clang获得ast的另外两种方法: ./llvmc-cc1-ast dump file.c ./llvmc-cc1-ast打印文件.c 在本文中提到了doxygen,并给出了一个ast,但我主要是在一些文本形式(如XML)上寻找ast,以便可以执行进一步的分析 最后,这里还有一个关于XML导入的堆栈,但由于提到的几个原因,它被中断了 因此,我的问题是,哪个版本以及如何从控制台使用它来获取

我一直在尝试从Clang获得AST,但到目前为止还没有成功。我在stack找到了一个一岁的孩子,他提到了使用Clang获得ast的另外两种方法:

./llvmc-cc1-ast dump file.c

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

在本文中提到了doxygen,并给出了一个ast,但我主要是在一些文本形式(如XML)上寻找ast,以便可以执行进一步的分析

最后,这里还有一个关于XML导入的堆栈,但由于提到的几个原因,它被中断了

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

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

谢谢。

OP说“也接受其他建议”

他也许会考虑我们的。

虽然展示由此产生的C AST非常容易,但更容易展示DMS使用相同的C前端(ObjectiveC是C的方言)产生的ObjectiveC AST[已经如此]。 请看,DMS也可以生成与此类似的XML


我们不建议将树导出为文本,因为在我们的经验中,真实代码的真实树非常庞大,并且作为文本或XML对象处理得很差。人们通常需要解析之外的机器。参见我关于

Doxygen AFAIK的讨论,它不会产生任何类似AST的东西。您提到的另一个答案是XML导出格式已从Clang中删除。嗯,这是一件好事,因为对于任何大小的C程序来说,真正的XML树都是非常可怕的,而且XML很难操作;您希望使用工具中内置的工具来访问AST。。。。Clang是你唯一能考虑的工具吗?你能提供一些关于AST要做什么的细节吗?分析一些问题?使改变摘录对不起,我误解了你写的内容。我认为这意味着Doxygen工具本身产生AST;我想你的意思是Clang的Doxygen输出包含对ASTs.GCC、Clang、FramaC和CIL的描述,这些都是我所知道的自由/开源软件解决方案。其中每一个都在某种程度上解决了“解析后的生命”问题。我建立DMS是因为我认为这些解决方案是不够的;注意所有这些工具都是C或C++专用的,它们没有解决大型复杂软件系统的问题。这些是否足以解决您的问题需要您做出判断。