准确计算c文件中关键字“if”,“while”的数量

时间:2013-05-10 18:52:53

标签: c compiler-construction code-coverage static-analysis

那里有没有我可以通过我的.c文件的库,并会计算可见数量的例如“if”语句吗?

我们不必担心当前文件调用的其他文件中的“if”语句,只是当前文件的计数。

我可以做一个简单的grep或正则表达式,但想检查是否有更好的东西(但仍然很简单)

3 个答案:

答案 0 :(得分:2)

如果你想确定它做得对,我可能会利用铿锵声并走极了。帮助您入门的网址:

http://clang.llvm.org/docs/IntroductionToTheClangAST.html

答案 1 :(得分:0)

首先,没有办法使用正则表达式或grep来为您提供正确的答案。您可以通过多种方式找到这些字符串,但它们可以隐藏在任意数量的转义字符,引号,注释等中。

正如一些评论者所说,你需要使用一个理解C语言的解析器/词法分析器。你说,你想要一些简单的东西,所以你不会自己写这个:)

这似乎可能对您有用:

http://wiki.tcl.tk/3891

从页面:

  

将包含C源的字符串放入标记列表

这可能会让你得到你想要的东西,但即便如此,它也不会是微不足道的。

答案 2 :(得分:-1)

到目前为止,每个人所说的都是正确的;从你的文件中掏出狗屎似乎要容易得多。与获取gcc源代码(或者您正在使用的任何编译器)的替代方案相比,这可以忽略不计,然后通过解析代码并在解析语法时挂钩您想要做的事情树。这似乎是屁股的痛苦,特别是当你所担心的是条件陈述时。如果你真的关心分支,你实际上只需要查看目标代码并计算程序集中if语句的数量,这将正确地告诉你分支的数量(而不仅仅是依赖你输入的次数)有条件的,不会完全转换为程序的分支)。