C ++文件解析参数个数

时间:2009-07-13 00:20:58

标签: c++ parsing numbers param

我得到了一包带有静态源代码的c ++文件(已经开发,不需要对它们做任何事情)。

有一个程序/ lib /方法来获取每个函数的params数量列表以及其中一个文件吗?

我的意思是,得到一个结果:

#File a.cpp
##a() -> 3 paramss
##foo() -> 0 params (void)

#File b.cpp
##test() -> 1 param

....

还有一个更好的问题。

还有办法处理它拥有的退货数量吗?

#File a.cpp
##a() -> 3 params, 1 return
##foo() -> 0 params (void), 2 returns

例如,如果条件为真,则“foo”返回,如果为假,则返回另一个

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以尝试在源文件上运行Doxygen

由于内容(大概)没有记录,您需要configure doxygen从未记录的文件中提取内容。

如果您只想浏览可用功能列表,可以使用HTML输出。

您还可以将Doxygen输出配置为XML,然后编写解析器以提取您在每个函数上查找的统计信息。

答案 1 :(得分:0)

我会计算“,”的数量,从1开始。这应该可以准确计算函数的参数个数。然后我会检查函数名称之前是否存在“void”,如果没有,那么你可以打赌它有一个返回值。

ifstream infile;
infile.open(...);
int i, ret, args;
String s;

ret = args = 0;
s = infile.getline();
for( i=0; s[i] != '('; i++ ) {
 if( s[i] == 'v' && s[i+1] == 'o' && s[i+2] == 'i' && s[i+3] == 'd' ) {
  ret = 1;
  break;
 }
}

for( i=0; s[i] != '('; i++ ) {}

for( i; s[i] != ')'; i++ ) {
 if( args == 0 && s[i] != ' ' ) {
  args++;
 }
 if( s[i] == ',' ) {
  args++;
 }
}

答案 2 :(得分:0)

这一切都超越了顶部,但也许这可能是你的一杯茶,Elsa可以解析c ++并为你提供解析文件的抽象语法树。可能还有其他一些可以做同样的免费工具