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



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

自4.5版本以来,gcc支持几乎每个编译步骤都可以挂接的插件。然而,我认为gcc不太清楚如何修改其AST并在其中导航(至少我在尝试时遇到了困难…)

然后我想起clang是为了扩展和用作库而设计的,我尝试了一下。在四处挖掘后,我发现一些话题说clang不支持自定义属性。我哭了。

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

以下是问题:

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

谢谢!如有任何信息/提示,我们将不胜感激!

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

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

然而,你需要了解GCC的内部表示(Gimple,Trees,通行证管理器,…)。首先通过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)的最新版本

最新更新