【问题标题】:Library for parsing C Type Declarations? [closed]用于解析 C 类型声明的库? [关闭]
【发布时间】:2013-02-01 17:10:21
【问题描述】:

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

谁能推荐一个开源的C/C++类型声明解析库?

注意:我不能使用 GPL 许可代码(例如 cdecl 工具),因为这是针对闭源应用程序的,我希望有一个更强大的解决方案来解决我自己编写的问题。

【问题讨论】:

标签: c++ c parsing cdecl


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2015-09-04
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    相关资源
    最近更新 更多