- 更新 -
我想在文件中找到C函数并打印他们的definitios
例如:
对于此输入:
#include <stdlib>
int function(int a)
{
return a;
}
void func2()
{
int b = 1;
}
int func3(int a,int b)
{
a = a +b;
while(x) {
x--;
}
return a;
}
int main(int argc, char* argv[])
{
int x=(a+1);
return 0;
}
输出应为:
int function(int a);
void func2();
int func3(int a,int b);
这是我的代码:
#!/usr/bin/perl -w
open(FILE, "<", $ARGV[0]) or die "file open error";
if ( @ARGV ) #if there are args
{
if ( -f $ARGV[0] ) #if its regular file
{
while(<FILE>)
{
if ($_ =~ /(.+)\s(.+)\(/){
print $1; # type in arg $1
print "\n";
print $2; # name in arg $2
print "\n";
}
}
}
else{
print "Arg is not a file\n";}
}
else{
print "no args\n";}
我以arg $ 1中的函数类型和$ 2中的函数名结束。我想在$(2)中的'()'括号中获取全名和args。如何避免'主'字? '^ [(主要)]不起作用。最后我想用';'打印所有内容最后。
它需要检查{}括号不打印例如:int x =(a + 1);
答案 0 :(得分:1)
尝试/(\S+)\s+(\S+\([^)]*\))/
,然后print $1+$2+";\n"
。
要防止main
出现负面预测:
/(\S+)\s+((?!main)\S+\([^)]*\))/
如果不支持预测:
/(\S+)\s+((m|ma|mai|[^m].*|m[^a].*|ma[^i].*|mai[^n].*)\([^)]*\))/
负责避免main
的部分:
(m|ma|mai|[^m].*|m[^a].*|ma[^i].*|mai[^n].*)