解析C文件

时间:2008-11-17 17:34:23

标签: c parsing

我正在寻找一个基于Windows的库,可用于解析一堆C文件以列出全局和局部变量。可以使用typedef声明全局变量和局部变量。然后可以使用输出(即全局变量和局部变量列表)进行后处理(例如,用新名称替换变量名称)。

这样的图书馆可用吗?

7 个答案:

答案 0 :(得分:11)

答案 1 :(得分:3)

可能有点矫枉过正,但是有一个用Boost.Spirit编写的完整的ANSI C解析器: http://spirit.sourceforge.net/repository/applications/c.zip

也许你能够根据自己的需要对其进行建模。

答案 2 :(得分:3)

当你考虑时,解析C比它看起来要困难得多 帐户不同的方言,预处理器指令, 解析时需要类型信息等。 告诉你“只使用lex和yacc”的人有 显然没有做过生产C解析器。

可以执行此操作的工具是我们的C front end

它解决了上述所有问题。

完成后,它有一个完整的可导航符号表 包含所有标识符和相应的类型信息。 列出全局和局部变量对此来说是微不足道的。

我是Semantic Designs背后的架构师。

答案 3 :(得分:1)

我不知道它是否提供了库,但请查看CTAGS

答案 4 :(得分:0)

如果它是普通的C,lexyacc是你的朋友,但你需要考虑C预处理器 - 具有未扩展宏的源文件通常不符合C语法所以解析器,用K& R语法写的,很可能会失败。

如果您决定解析预处理器的输出,请准备好您的解析器因特定编译器的“扩展”而失败,因为很可能标准库头使用它们。至少就是GCC的情况。

我和GCC有过这个,最后决定用不同的方法实现我的目标。如果你只需要更改变量的名称,正则表达式就可以了,并且不需要构建完整的解析器,恕我直言。如果您的目标只是收集数据,那么最终的数据源就是调试信息。有一些方法可以从二进制文件中获取调试信息 - 对于使用DWARF的ELF可执行文件,有libdwarf,对于Windows-land(COFF?)也应该是这样的。可能你可以使用一些现有的工具来获取有关二进制文件的调试信息 - 再次,我对Windows一无所知,你需要进行调查。

答案 5 :(得分:0)

我最近读到了一个基于win32的系统,该系统查看了COFF dll中的调试信息:  http://www.drizzle.com/~scottb/gdc/fubi-paper.htm

答案 6 :(得分:0)

也许gnu project cflow http://www.gnu.org/software/cflow/