如何查看clang AST?

use*_*567 37 llvm clang abstract-syntax-tree

我想抓住Clang.所以,我想在解析给定程序后查看Clang生成的AST.是否可以以.dot或.viz格式转储AST?那里有工具吗?

cpt*_*azz 47

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

clang -cc1 -ast-view your_file.c
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下命令打印到命令行:

clang -cc1 -ast-dump your_file.c
Run Code Online (Sandbox Code Playgroud)

要么:

clang -cc1 -ast-print your_file.c
Run Code Online (Sandbox Code Playgroud)

或在3.3中:

clang -cc1 -ast-dump-xml your_file.c
Run Code Online (Sandbox Code Playgroud)

但这种移除作为评论指出由卢卡斯Kubanek以后.

  • 不再支持XML打印机.见http://llvm.org/viewvc/llvm-project?view=revision&revision=127141 (9认同)
  • 最近clang还可以使用`-ast-dump=json`,非常有用!如果您不介意的话,可以将其添加到您的答案中。 (5认同)
  • `-ast-view`似乎也需要编译时支持,默认情况下在Ubuntu 14.04上没有打开:-(`-ast-dump`工作得很漂亮.什么是'-ast-print`应该做什么?它只是打印代码本身后面有一些空行. (4认同)

Kor*_*nel 36

-cc1调用方法会产生包含和识别C++的问题.

要进行全功能解析,请使用:

clang -Xclang -ast-dump file.cpp
Run Code Online (Sandbox Code Playgroud)

  • 啊,这是我一直忘记的开关。这会在Windows中以漂亮的颜色打印AST ^^ (2认同)

Jon*_*rsh 5

用于查看 AST

clang-check -ast-dump filename.c

用于查看程序中的特定功能

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