C语法解析器

3

是否有任何库可以解析C语法?

例如,我想编写自己的代码/脚本,以分析给定C语法的c文件。函数/文件中的“if”语句数量,每个函数中的代码行注释数等等……

如果已经有一些可用于启动解析器而不是从头开始的库,我就可以更轻松地完成工作,但我没有问题编写所有这些自定义代码。

谢谢!


6
我认为使用clang作为库可能会起作用。 - Alexey Frunze
嗯,我不知道如何使用clang实现这个。例如,在一个函数中计算“if”语句的数量。 - jox
1
@jox,clang 绝对可以满足你的需求。毕竟它包含了完整的 C 解析器。 - Carl Norum
较旧版本的clang具有XML AST打印机后端(不幸的是,出于无法解释的原因,它被删除了)。将该XML后端重新应用于较新的clang相对容易。 - SK-logic
4个回答

2

Brian,pycparser正是我需要的。非常简单易用。是否有类似于C/C++的简单工具?如果没有,我将使用Python自己编写一个。 - jox
1
你可能会发现,对于C++来说,“随便搞一下”是非常困难和容易出错的。 - Brian Cain

2
虽然它们更加针对语义分析而不是句法分析,但你可能会对CIL和基于它的Frama-C感兴趣(两者都使用OCaml)。另一个有趣的工具(带有OCaml和Python绑定)是Coccinelle

0

个人而言,我会首先寻找现有的工具来完成你想要做的事情。这听起来需要大量的工作,而且有很多好的免费工具可以用于代码度量(你在SourceForge上看过了吗?)。

如果你坚持要继续你的项目,你可以在谷歌上搜索C语言的Lex/Yacc语法。

然而,几年前我从Lex/Yacc转到了Antlr。我特别喜欢它允许你可视化地逐步解析的方式。

这是一个非常棒的工具,而且是免费的。还有一个完整的C语言语法可供使用,所以你可以根据自己的需求进行修改。

希望这能帮到你。祝你好运!


-1

你可能还考虑尝试一款代码覆盖率工具。虽然代码覆盖率旨在显示源代码执行了多少百分比,但其中一些工具也会显示在进行代码覆盖时遇到了多少条件语句或循环。根据我的经验,我可以分享一个例子,即WindRiver Workbench代码覆盖率工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接