【发布时间】:2011-10-04 03:04:23
【问题描述】:
我有一个 C 头文件。我想解析它并提取有关数据类型、函数和函数参数的信息。谁能帮我?我需要一些 C 语言的例子。
非常感谢。
【问题讨论】:
标签: c parsing header-files
我有一个 C 头文件。我想解析它并提取有关数据类型、函数和函数参数的信息。谁能帮我?我需要一些 C 语言的例子。
非常感谢。
【问题讨论】:
标签: c parsing header-files
如果您需要人类可读的输出(例如 html 或 PDF),那么您可以使用 doxygene/doxywizard。在 doxywizard 中必须选择“所有实体”。
【讨论】:
还有srcml。 与 c2xml 类似,它直接使用源代码。 c2xml 从预处理器输出开始。 假设良好的 C 编码规则(与任意使用预处理相反)这对我的重新设计任务来说是一个优势,因为它保留了 #defines 的名称并能够以特定方式处理选定的宏。
【讨论】:
使用ANTLR。已经为您编写了一个不错的grammar for C,ANTLR 将生成 C 代码(或者如果您愿意,也可以生成一些 other languages),然后您可以遍历这些代码以获得您想要的。
【讨论】:
还有一个选择是使用“sparse”中的 c2xml 工具。它的 C 解析器不是 100% 符合标准的(例如,它不会解析 K&R 风格的声明),但对于相当现代的 C 代码,它工作得很好。
【讨论】:
DMS Software Reengineering Toolkit 及其C Front End 可以做到这一点。
DMS 提供通用解析、符号表构建、流分析和program transformations,由语言定义参数化。使用 DMS 的 C 前端,DMS 将解析各种 C 方言中的任何一种,为代码元素构建 AST,构建完整的符号表,对所有符号进行完整的名称和类型解析(包括函数头中的参数列表);你可以停下来把它们扔掉。 DMS还可以对C代码进行控制和数据流分析;您可以使用其他 DMS 工具来进一步分析或转换代码。 (C 前端内置了完整的 C 预处理器)。
EDG front end 也可用于解析和符号表,但不具备 DMS 的其他功能。
【讨论】:
你可以试试Clang。在特别The Lexer and Preprocessor Library.
【讨论】:
libclang。