3

我正在尝试找到一个开源库(用C或编写C++)来帮助我解析任意C/C++类型声明(例如声明,如void *(*(*foo[])( int, void * [] ))[123]),然后我将使用元模型。

有人可以推荐一个开源C/C++类型声明解析库吗?

注意:我不能使用 GPL 许可代码(如该cdecl工具),因为这是用于封闭源代码的应用程序,我希望为我自己编写的内容提供更强大的解决方案。

4

1 回答 1

1

解析 C 是出了名的困难,并且为了做你想做的事,你可能需要名称和类型解析。需要有一个完整的编译器前端才能做到这一点;实际上,您甚至需要预处理器,因为您将阅读的代码将包含预处理器指令。这些设备需要大量的工作。你是对的,除非你有很多空闲时间,否则你真的不想自己写一个。

您现实的选择是开源包,例如 GCC(很难为您的任务扭曲)、GCCXML(希望从格式良好的程序中生成声明)或 Clang(类似地);Eclipse CDT 有一个 C 解析器(类似地)。我不能说这些是否有让你满意的 API 或许可证。闭源包可能更符合你的需求;EDG 提供 C 和 C++ 前端(仍然希望只处理完全格式良好的程序),我的公司(语义设计)也通过我们的 DMS 软件再工程工具包提供。

在这组中,只有 DMS 可能使单独解析类型声明的能力变得容易;它可以解析其语法的任何非终结符(甚至包括模棱两可的)。更重要的是,如果你真的想“去一个元模型”,你可能想要解析一个声明,并确定子类型/引用类型(例如,如果它使用 typedef),所以你想要结合完整的解析使用名称/类型解析来提供背景定义,然后解析您关心的特定声明,然后使用背景定义提供的符号表上下文对特定声明进行名称和类型解析。DMS 机器提供了所有这些功能。

于 2013-02-01T17:59:27.637 回答