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

问题描述 投票:23回答:3

我设法使用cmake和Visual Studio 10成功地为Windows编译了clang。我想获得一个XML文件作为源代码的AST表示。有一个选项可以在Linux(ubuntu)下为带有gcc的clang提供结果,但在Windows框上不起作用:

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

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

clang -emit-ast source.c

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

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

[如果我可能会遗漏一些东西,如果由铛前端生成的AST与在编译阶段生成的AST不相等。

我设法使用cmake和Visual Studio 10成功地为Windows编译了clang。我想获得一个XML文件作为源代码的AST表示。有一个选项提供...

xml clang code-generation abstract-syntax-tree
3个回答
20
投票

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


3
投票

我一直在开发自己的从Clang的AST中提取XML的版本。我的代码使用libclang的Python绑定来遍历AST。


1
投票

使用自定义的ASTDumper可以完成此工作,而无需off编译任何源文件。 (在前端停止叮当声)。但是您必须处理llvm的所有C和C ++代码源才能实现。

© www.soinside.com 2019 - 2024. All rights reserved.