Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析C头文件以提取有关数据类型、函数和函数参数的信息_C_Parsing_Header Files - Fatal编程技术网

解析C头文件以提取有关数据类型、函数和函数参数的信息

解析C头文件以提取有关数据类型、函数和函数参数的信息,c,parsing,header-files,C,Parsing,Header Files,我有一个C头文件。我想解析它并提取有关数据类型、函数和函数参数的信息。谁能帮我?我需要一些C语言的例子 非常感谢。使用。已经为您编写了一个不错的程序,ANTLR将生成C代码(或者一些您喜欢的代码),然后您可以遍历这些代码以获得所需的内容。使用。已经为您编写了一个不错的程序,ANTLR将生成C代码(或者一些您喜欢的代码),然后您可以遍历这些代码以获得所需的内容。您可以尝试。特别的。你可以试试。特别是。使用its可以做到这一点 DMS提供通用解析、符号表构造、流分析以及由语言定义参数化的数据流。使用

我有一个C头文件。我想解析它并提取有关数据类型、函数和函数参数的信息。谁能帮我?我需要一些C语言的例子

非常感谢。

使用。已经为您编写了一个不错的程序,ANTLR将生成C代码(或者一些您喜欢的代码),然后您可以遍历这些代码以获得所需的内容。

使用。已经为您编写了一个不错的程序,ANTLR将生成C代码(或者一些您喜欢的代码),然后您可以遍历这些代码以获得所需的内容。

您可以尝试。特别的。

你可以试试。特别是。

使用its可以做到这一点

DMS提供通用解析、符号表构造、流分析以及由语言定义参数化的数据流。使用DMS的C前端,DMS将解析各种C方言,为代码元素构建AST,构建完整的符号表,完成所有符号的完整名称和类型解析(包括函数头中的参数列表);你可以停在那里把它们扔了。DMS还可以对C代码进行控制和数据流分析;您可以使用其他DMS工具进一步分析或转换代码。(C前端内置了一个完整的C预处理器)

也可用于解析和符号表,但不具有DMS的其他功能。

使用它可以做到这一点

DMS提供通用解析、符号表构造、流分析以及由语言定义参数化的数据流。使用DMS的C前端,DMS将解析各种C方言,为代码元素构建AST,构建完整的符号表,完成所有符号的完整名称和类型解析(包括函数头中的参数列表);你可以停在那里把它们扔了。DMS还可以对C代码进行控制和数据流分析;您可以使用其他DMS工具进一步分析或转换代码。(C前端内置了一个完整的C预处理器)


也可用于解析和符号表,但不具有DMS的其他功能。

另一个选项是使用“稀疏”中的c2xml工具。它的C解析器并非100%符合标准(例如,它不会解析K&R风格的声明),但对于相当现代的C代码来说,它工作得相当好。

另一个选择是使用“稀疏”中的c2xml工具。它的C解析器不是100%符合标准的(例如,它不会解析K&R风格的声明),但对于相当现代的C代码来说,它工作得相当好。

也有。 与c2xml类似,它直接使用源代码。 c2xml从预处理器输出开始。 假设良好的C编码规则(与任意使用预处理相反),这对我的重新设计任务来说是一个优势,因为它保留了#defines的名称,并且能够以特定的方式处理选定的宏。

。 与c2xml类似,它直接使用源代码。 c2xml从预处理器输出开始。
假设良好的C编码规则(与任意使用预处理相反),这对我的重新设计任务来说是一个优势,因为它保留了#定义的名称,并且能够以特定的方式处理选定的宏。

如果您需要可读的输出(例如html或PDF),那么您可以使用doxygene/doxywizard。在doxywizard中,必须选择“所有实体”。

如果需要可读的输出(例如html或PDF),则可以使用doxygene/doxywizard。在doxywizard中,必须选择“所有实体”。

Related:Related:+1对于解析器生成器,通常我从未使用过ANTLR,但Lex+Yacc(或等价的:Flex+Bison)对我很有用,因为我在生产中,在两三个项目中使用过ANTLR(v2,而不是v3)。很好,解析器不会提取类型信息。您需要为此实现符号表支持。实际上,您还必须运行预处理器。所以ANTLR语法本身对你没有帮助。可能有一个ANTLR语法来解析和构建符号表;我对其中一个并不特别熟悉。。。。这个答案中引用的特定C语法表示它只跟踪类型定义名称,也就是说,它不做符号表构造,更不用说类型分析了。@RadLexus:感谢您的提醒--我已经修复了链接。+1对于解析器生成器,通常我从未使用过ANTLR,而是使用过Lex+Yacc(或等价的:Flex+Bison)在生产中,在两三个项目中使用了ANTLR(尽管是v2,而不是v3),这对我很有用。很好,解析器不会提取类型信息。您需要为此实现符号表支持。实际上,您还必须运行预处理器。所以ANTLR语法本身对你没有帮助。可能有一个ANTLR语法来解析和构建符号表;我对其中一个并不特别熟悉。。。。这个答案中引用的特定C语法表示它只跟踪类型定义名称,也就是说,它不做符号表构造,更不用说类型分析了。@RadLexus:谢谢你的提醒——我已经修复了链接。最近,Clang最重要和有用的功能,即它的XML打印机,由于一些奇怪的原因被删除了。但是仍然可以使用和旧版本的Clang,或者将删除的补丁重新应用到当前版本。@SK logic为什么XML打印机是最重要和最有用的功能?删除它是因为使用它通常比直接API调用慢(您正在解析一个文件,生成一个AST,用一种解析速度慢的语言XML重新解析AST,然后对其进行操作)。@kirbyfan64sos,因为那时不存在可用的
libclang
。最近,Clang最重要和有用的功能,也就是它的XML打印机,由于一些奇怪的原因被删除了。但是仍然可以使用和旧版本的Clang,或者将删除的补丁重新应用到当前版本。@SK logic为什么要这样做