【问题标题】:Which variable stores the root node of a C GENERIC AST in gcc?哪个变量在 gcc 中存储 C GENERIC AST 的根节点?
【发布时间】:2011-07-19 14:29:28
【问题描述】:

我正在尝试为 gcc 4.5 编写一个插件,它将在解析完成后对 AST(GENERIC 表示)执行一些分析。我的源语言是 C,插件也将用 C 编写。有一些帖子here 解释了如何为 C++ 做这样的事情。 GENERIC 文档和之前的链接都指出变量 global_namespace 存储 C++ GENERIC AST 的根节点。哪个变量存储 C GENERIC AST 的根节点?

提前致谢!

【问题讨论】:

    标签: c gcc abstract-syntax-tree


    【解决方案1】:

    C 显然没有命名空间之类的东西,但是 范围 的概念确实存在。您可以通过c-tree.h 中定义的函数pop_scope() 访问您所在位置的englobing 范围(这取决于您的插件被GCC 调用的事件)。这将返回一个tree,它由一个block 组成。您可以通过宏 BLOCK_VARS 访问此块的所有声明,即在此范围内声明的符号(变量、函数等),它为您提供了 decl-nodes 的 tree

    如果您需要访问函数体,请记住,您始终可以通过宏 DECL_SAVED_TREE(node)node 作为您的 FUNCTION_DECL 节点从函数定义中访问它。仅当定义在同一个文件中并且已经构建时才有效,同样,这取决于您挂钩插件的位置。

    免责声明:这对 GCC 4.8 有效,并且界面会经常更改。从 GCC 4.9 开始,插件接口部分用 C++ 编写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2013-10-25
      • 2018-02-01
      • 2015-08-25
      • 1970-01-01
      相关资源
      最近更新 更多