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

标签 xml clang code-generation abstract-syntax-tree

我成功地使用 cmake 和 visual studio 10 为 windows 编译了 clang。我想要一个 XML 文件作为源代码的 AST 表示。有一个选项可以在 linux (ubuntu) 下使用 gcc clang 提供结果,但在 Windows box 上不起作用:

clang -cc1 -ast-print-xml source.c

但是,这是调用编译阶段(我想避免)。就我对 clang 的陌生程度而言,挖掘源代码对我没有帮助。我可以使用以下方法生成 AST 的二进制版本:

clang -emit-ast source.c

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

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

是否有可能我遗漏了一些东西,比如 clang 前端生成的 AST 与编译阶段生成的 AST 不等同。

最佳答案

供您引用,Douglas Gregor(负责 CLang FrontEnd)从 2.9 版本中删除了 XML 打印机。

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

Douglas 提出的另一点是,输出不应该适合调试 CLang 本身(这就是 -emit-ast 的意义所在),而是适合外部工具使用。这要求输出从一个版本到另一个版本是稳定的。值得注意的是,它不应该是 CLang 内部的一对一映射,而是将源代码翻译成标准化语言。

除非打印机上有重要的工作(需要志愿者),否则它不会被整合回来......

关于xml - 我可以在不使用编译器的情况下使用 clang 获取 C/C++ 代码的 XML AST 转储吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5309405/

相关文章:

sql-server - SQL 服务器 : Selective XML Index not being efficiently used

c++ - 如何在openCV 2.3.1中加载xml级联文件

javascript - 如何在wcf服务中获取Xml作为字符串并使用javascript发送?

xml - xsd 中的可为空 bool 字段

找不到 clang c11 threads.h

c - 让 dyld 链接到可执行文件本身的函数?

c++ - 在 OS X 上与 clang++ 链接会产生大量未找到符号的错误

c++ - 编译器代码生成错误或内存损坏?

code-generation - 您是否创建自己的代码生成器?

c# - 从存储过程输入创建 ADO.NET Sql 参数数组的代码生成器?