gpt4 book ai didi

c++ - 用于解释自定义 c++11 属性的 Clang/GCC 插件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:14 30 4
gpt4 key购买 nike

我正在尝试为 clang 或 gcc 编写一个插件来解释自定义 [[cxx11::attributes]] 并基于此生成一些代码。

从 4.5 版本开始,gcc 支持几乎在每个编译步骤都可以 Hook 的插件。但是,我认为 gcc 不太清楚如何修改它的 AST 并在其中导航(至少我在尝试时遇到了麻烦......)。

然后我想起 clang 被设计成可以扩展并用作库,于是我试了一下。在四处挖掘之后,我发现一些主题说 clang 不支持自定义属性。我哭了。

我的主要目标是根据用户可以在代码中使用的任何类型的注释生成代码。我想使用 c++11 属性,因为它们非常清晰。 Pragma 也是一种选择,但它们有一些限制。

问题如下:

1) 是否真的(目前)不可能在 clang 中拥有自定义属性?2) 学习 gcc 内部原理的最佳方法是什么? (我读了很多页的文档,但他们仍然没有说出我想要的)3) gcc 是否像 clang 一样有一些转储函数来打印它的 AST?探索它的树会有很大帮助。

谢谢!任何信息/提示将不胜感激!

最佳答案

GCC 插件特定于 GCC,甚至(原则上)特定版本的 GCC(不保证为 GCC 4.8 编码的插件可以在 GCC 4.9 上运行)。

您可以考虑使用 MELT 扩展 GCC ,这是一种用于扩展 GCC 的 lispy 域特定语言,作为 GCC(元)插件实现。

但是,您需要了解 GCC 的内部表示(Gimple、Trees、传递管理器……)。首先阅读我在 GCC plugins thru the MELT example 上的幻灯片(Linux 协作峰会,2014 年 3 月)

您可以轻松添加 GCC attributes带有插件和 MELT,可能还有 C++11 属性。

是的,GCC 有很多可能的转储(尝试使用 -fdump-tree-all)。

你最好使用最新版本的 GCC(例如 4.9.1)和 MELT(例如 1.1.2 或更高版本;我可能会在一两周内发布 MELT 1.1.3)

关于c++ - 用于解释自定义 c++11 属性的 Clang/GCC 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26326865/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com