如何查看Clang AST?

56

我正试图了解Clang。因此,我想查看Clang解析给定程序后生成的AST。是否可以以.dot或.viz格式转储AST?是否有相关工具可用?

4个回答

68

4
啊,这是我经常忘记的开关。在Windows中打印带有漂亮颜色的AST ^^ - Cameron

59

Clang支持使用Graphviz的dotty显示AST-- 您可以获取生成的临时.dot文件(名称已打印)以获取图形源代码。

clang -cc1 -ast-view your_file.c

您还可以使用以下方式将内容输出到命令行:

clang -cc1 -ast-dump your_file.c
或者:
clang -cc1 -ast-print your_file.c

或在3.3中:

clang -cc1 -ast-dump-xml your_file.c

但是后来Lukas Kubanek在评论中指出,这被删除了


10
XML打印机不再受支持。请参见http://llvm.org/viewvc/llvm-project?view=revision&revision=127141。 - Lukáš Kubánek
6
-ast-view似乎需要编译时的支持,而在Ubuntu 14.04上默认不支持 :-( -ast-dump很好用。那么-ast-print的作用是什么?它只是打印代码本身,并在之后添加了一些空行。 - Ciro Santilli OurBigBook.com
根据修订意见,XML 打印机从未正常工作过。 - wheredidthatnamecomefrom
5
在最近的Clang中,你也可以使用-ast-dump=json,非常有用!如果您不介意的话,您可以将此添加到您的答案中。 - Arty

6

查看AST

clang-check -ast-dump filename.c

查看程序中特定函数

clang-check -ast-dump -ast-dump-filter=function_name filename.c


3

我正在使用以下内容:

clang my_file.h -I. -Xclang -ast-dump -fsyntax-only -fno-color-diagnostics -Wno-visibility

在我看来,这更适合机器解析。


1
当我从库中运行单个文件时,即使使用-fsyntax-only标志,我仍然会收到有关缺少头文件的错误。有任何想法吗? - Taylor Evanson
@TaylorEvanson 同样的问题 - Veno
@TaylorEvanson 同样的问题 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接