如何将clang AST表示为JSON格式?

9

clang-check -ast-dump -ast-dump-filter=<function_name> main.c会生成特定代码的AST(仅包括函数声明)。

我们如何以JSON格式表示生成的AST呢?

PS:我只需要函数声明的AST。

1个回答

9

使用-ast-dump=json参数调用clang

这个功能是最近才实现的(2019年5月),因此您需要更新版本的Clang。

有关详细信息,请参见https://reviews.llvm.org/D60910

还有一个库可以通过libTooling导出更低级别的信息,在https://github.com/facebook/facebook-clang-plugins上可用。

2022年更新:完整的命令行现在是clang -Xclang -ast-dump=json -fsyntax-only <file>,因为clang命令现在是编译驱动程序,而不仅仅是编译器本身。


这个 -ast-dump=jsonclang 中是支持的,但在 clang-check 中不支持。而且这对于 C 程序是有效的,但对于 C++ 则不行。 - achala
使用2021年的clang,但它对我来说不起作用:clang.exe: warning: argument unused during compilation: '-ast-dump=json' [-Wunused-command-line-argument] - kungfooman
@kungfooman 答案已更新为最新版本的clang。 - Jaen
@Jaen 更新后的答案完美地运行了,谢谢!有趣的是,它从一个三行函数生成了大约400行。 - kungfooman
1
使用筛选器:clang -fsyntax-only -Xclang -ast-dump=json -Xclang -ast-dump-filter=some_function some_source.cc - milahu

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