【问题标题】:Analog of Clang AST in GCC [duplicate]GCC中Clang AST的模拟[重复]
【发布时间】:2020-01-26 20:55:49
【问题描述】:

GCC 中是否有 Clang AST 的类似物?

有时以编译器的方式查看代码很有用。 Clang AST 选项 -ast-view-ast-tree-ast-print 在这里非常有用。

我很感兴趣是否有 GCC 的此类选项或一些工具来生成与 GCC 一起使用的 AST 树。

【问题讨论】:

  • 拥有-fsyntax-only 的类似物也很有帮助。

标签: gcc clang abstract-syntax-tree


【解决方案1】:

您可以通过-fdump-tree-all 转储(结果)树传递,并通过-fdump-ipa-all 传递过程间分析。对于编译单元module.c,这将分别写入转储文件module.c.<num>t.<name>module.c.<num>i.<name><num> 表示这些 pass 的运行顺序,<name> 表示 pass 名称。

还有 100 个选项仅用于控制特定通道的转储,请参阅 GCC Developer Options

这些转储的语法主要是 C-ish。在树传递之后,有与机器相关的 RTL 传递。您可以使用-fdump-rtl-all-da 转储这些内容。这些转储是 LISP-ish 并命名为 module.c.<num>r.<name>。 您也可以使用-fdump-final-insns 转储最终的 RTL。

要查看哪个 RTL 与哪个汇编指令相关联,您可以-save-temps -dP 然后检查汇编文件module.s

在您使用 LTO (-flto) 的情况下,程序集文件将仅包含 lto1 乱码。您可以通过-ffat-lto-objects 添加汇编代码。但是请注意,对于 LTO,这不是 lto 运行产生的最终代码。要查看该代码,请使用-save-temps -flto -o program.exe,LTO 运行的转储文件名为program.exe.ltrans<id>.<num>[tir].<name>

【讨论】:

  • 请注意,-fdump-tree-XXX(和-fdump-ipa-XXX)会打印对应于 LLVM IR(不是 AST IR)的树 SSA IR。
  • 我需要 AST 模拟。
  • -fdump-tree-original-raw 神奇
  • @trupanka 对,所以答案不准确。
猜你喜欢
  • 2020-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多