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

Mas*_*rID 5 c++ gcc clang c++11

我正在尝试编写一个插件来clang或gcc来解释自定义[[cxx11 :: attributes]]并根据它生成一些代码.

从4.5版开始,gcc支持几乎每个编译步骤都可以挂钩的插件.但是,我认为gcc不太清楚如何修改它的AST并浏览它(至少我正在努力尝试......).

然后我记得clang被设计为扩展并用作库,我试了一下.在挖掘后我发现一些主题说clang不支持自定义属性.我哭了.

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

以下是问题:

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

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

Bas*_*tch 3

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

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

然而,您需要了解 GCC 的内部表示(Gimple、Trees、pass manager,...)。首先通过 MELT 示例阅读我关于 GCC 插件的幻灯片(Linux 协作峰会,2014 年 3 月)

您可以使用插件和 MELT轻松添加GCC 属性,也可能添加 C++11 属性。

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

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