我可以在不使用编译器的情况下使用clang获得C/C++代码的XML AST转储吗?

jde*_*aan 23 xml code-generation clang abstract-syntax-tree

我设法使用cmake和visual studio 10成功编译了用于Windows的窗口.我想获得一个XML文件作为源代码的AST表示.有一个选项可以在linux(ubuntu)下使用gcc提供结果,但是在windows框中不起作用:

clang -cc1 -ast-print-xml source.c
Run Code Online (Sandbox Code Playgroud)

但是,这是调用编译阶段(我想避免).挖掘源代码并没有帮助我,因为我很吵.我可以通过使用以下方法设法生成AST的二进制版本:

clang -emit-ast source.c
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种格式不能直接用于解析.是否有一些现有方法直接生成XML树而不是clang中的二进制树?

目标是在.NET环境中的其他工具中使用XML表示,因此我需要围绕本机clang lib进行一些包装以访问二进制AST.如果有人已经为.NET编写了一些二进制clang AST解析器,可能还有第三种选择吗?

如果clang前端生成的AST与编译阶段生成的AST不相等,我是否可能会遗漏这些内容.

Mat*_* M. 20

对于您的信息,Douglas Gregor(负责CLang FrontEnd)已从2.9版本中删除了XML打印机.

问题是缺乏XML打印机.许多AST节点从未在打印机中实现,以及某些节点的许多属性,这导致源代码的不准确表示.

道格拉斯提出的另一个观点是,输出应该不适合调试CLang本身(这-emit-ast是关于什么),而是适用于外部工具的消耗.这要求输出在一个版本之间保持稳定.值得注意的是,它不应该是CLang内部的一对一映射,而是将源代码翻译成标准语言.

除非打印机上有大量工作(需要志愿者),否则它不会被集成回来......

  • 有趣的是,"-emit-ast"漂亮地印刷了类型,而不是代表它们的结构,因此这绝对是无用的.只有xml打印机才能调试并自动验证声明中的类型. (3认同)