【发布时间】:2011-07-15 15:06:13
【问题描述】:
我成功地使用 cmake 和 Visual Studio 10 为 windows 编译了 clang。我想获得一个 XML 文件作为源代码的 AST 表示。有一个选项可以在 linux (ubuntu) 下使用 gcc 提供结果,但在 windows 框上不起作用:
clang -cc1 -ast-print-xml source.c
但是,这是调用编译阶段(我想避免)。就我对clang很陌生,挖掘源代码对我没有帮助。我可以使用以下方法生成 AST 的二进制版本:
clang -emit-ast source.c
不幸的是,这种格式不能直接用于解析。是否有一些现有的方法可以直接生成 XML 树而不是 clang 中的二进制树?
目标是在 .NET 环境中的其他工具中使用 XML 表示,因此我需要围绕本机 clang 库进行一些包装以访问二进制 AST。如果有人已经为 .NET 编写了一些二进制 clang AST 解析器,也许还有第三种选择?
如果clang前端生成的AST不等同于编译阶段生成的AST,我是否可能遗漏了一些东西。
【问题讨论】:
-
我的公司构建 C++ 前端,我们可以发出 AST 的完整 XML 转储。我们将此作为复选框项目,因为人们要求它。没有人真正使用它,因为真正的 C++ 程序(包括所有头文件)的输出量简直是巨大,这使得处理起来既慢又笨拙。真正的问题是,你为什么要这样做? Clang 可能已经提供了大量的机制来直接处理 C++ AST(就像我们相应的工具一样);你为什么要尝试复制所有这些工作?为什么不将 Clang 用于您的目的?
-
... 在stackoverflow.com/a/17393852/120163 上查看 C++ 树转储。这不是 XML,但该工具也可以生成具有完全相同内容的 XML。
标签: xml clang code-generation abstract-syntax-tree