2012-04-18 66 views
3

可以说我有一个文件system.h中,我有以下结构需要一个C结构解析器

typedef struct Foo { 
    int count; 
    uint32 world; 
    Temp id; 
} Foo; 

typedef struct Temp { 
    uint64 id; 
} Temp; 

Foo bar; 

现在我需要一个宏,像DUMP_STRUCT(bar),即打印栏的所有成员(Foo类型)递归地。

是否有任何解析器/脚本(最好在php/python中)可以解析C文件或从可执行文件中从矮人获取信息并创建一个类似于DUMP_STRUCT的函数?

回答

1

如果您的C头文件包含C头文件包含的典型东西(宏,预处理器条件,包含位字段),则需要完整的C语言分析器来处理头文件。

从某种意义上说,GCC-XML可以生成你所需要的东西(它不是完全做“C”,而是C++),将各种结构插槽及其类型转储为XML文本;你将不得不在代码中使用这些数据结构。为此,您可能必须匹配类型声明的子结构(作为有趣形状/内容的XML子树)。

我们的DMS Software Rengineering Toolkit及其C Front End会执行完整的预处理/解析/构建符号表。你可以从那里生成GCC-XML的输出,但是简单地定制DMS来遍历各种符号表和AST来提取你想要的东西比较容易。匹配过程比较容易,因为符号表是为方便访问名称空间结构,符号条目以及它们的类型信息(已经设置为数据结构)而设计的。 DMS还提供表面语法模式匹配,既可以用来识别感兴趣的AST,也可以用作代码生成器来生成不能在语法上错误的代码。

1

您可以使用GCCXML,它可以解析C(带有一些限制)和C++头文件,输出为XML。

1

您可以通过检查pstruct如何工作来获得一些里程数。 (它在Perl中我认为,但使用编译器刺死调试信息输出关于结构布局的信息)。