【问题标题】:Can I get an XML AST of C/C++/Java code without compiling it?我可以在不编译的情况下获得 C/C++/Java 代码的 XML AST 吗?
【发布时间】:2014-08-26 09:59:30
【问题描述】:

我想用源代码的 AST 表示创建一个 XML 文件,但不编译它。到目前为止,我还没有找到任何足够的解决方案。这是我尝试过的:

  • 在 clang 中使用 XML 打印机 - clang -cc1 -ast-print-xml - 很好,但它是 removed from clang
  • srcML 工具包,理论上运行良好,但解析器很差(对于 Java,它甚至不完全兼容 1.5)

还有其他选择吗?

【问题讨论】:

  • Clang 无法处理 Java,AFAIK。
  • FWIW, 由 Clang 打印的“XML”,并不是真正的 XML。

标签: java c++ c xml abstract-syntax-tree


【解决方案1】:

对于 Java,请参阅 What would an AST (abstract syntax tree) for an object-oriented programming language look like?

对于 C,请参阅get human readable AST from c++ code

这两者都由一个引擎生成:我们的 DMS 软件再造工具包。 DMS 还有一个完整的 C++11 解析器,可以生成类似的 XML。 (2016 年 1 月编辑:现在为 GCC 和 Visual C++ 提供完整的 C++ 14)。

我不认为 XML 真的是一个好主意:它庞大而笨拙,您可以使用的分析工具是……什么? XSLT:这对于分析程序不是很有用。将 XML 读入 DOM 并翻越它?您会发现缺少很多有用的支持(符号表等); AST 是不够的。查看我关于解析后的生活的文章(查看我的简历或谷歌)。

您最好使用一组集成机器,为分析(多种)编程语言(使用 AST 作为基础)提供各种一致支持。这就是 DMS 的设计目的。

【讨论】:

  • 呵呵,感觉你会写一个答案。我已经在相关问题中看到了您的答案。无论如何,谢谢:)
  • 您询问是否有其他选择。我很乐意让其他人指出 DMS,但他们没有。
猜你喜欢
  • 2011-07-15
  • 1970-01-01
  • 2011-03-21
  • 2013-07-16
  • 2014-01-16
  • 2020-07-16
  • 2020-04-22
  • 1970-01-01
  • 2016-06-01
相关资源
最近更新 更多