用于解析C类型声明的库?

时间:2013-02-01 17:10:21

标签: c++ c parsing cdecl

我试图找到一个开源库(用CC++编写)来帮助我解析任意C/C++类型声明(例如void *(*(*foo[])( int, void * [] ))[123]之类的声明)然后我会去元模型。

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

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

1 个答案:

答案 0 :(得分:1)

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

你的现实选择是开源软件包,例如GCC(难以扭转你的任务),GCCXML(想要从格式良好的程序产生声明)或Clang(类似); Eclipse CDT有一个C解析器(类似)。我不能说这些是否有API或许可证满足您。封闭源包可能更符合您的需求; EDG提供C和C ++前端(仍然只想处理完全格式良好的程序),我的公司(Semantic Designs)通过我们的DMS软件再造工具包也是如此。

在这个集合中,只有DMS很可能能够轻松地解析类型声明;它可以解析其语法的任何非终结符(甚至including ambiguous ones)。更重要的是,如果你真的想“转到元模型”,你可能想要解析声明,并确定子类型/引用类型(例如,如果它使用typedef),所以你想要结合完整的解析使用名称/类型解析来提供后台定义,然后解析您关心的特定声明,然后使用后台定义提供的符号表上下文对特定声明进行名称和类型解析。 DMS机器提供所有这些功能。