【发布时间】:2014-07-31 06:18:25
【问题描述】:
我有一个包含许多函数的文件,如下所示,其中包含参数。我想打印该函数的开始'{'到结束'}'的行号。对于所有其他功能,依此类推。
我尝试了什么:
#!/usr/bin/perl
format EMPLOYEE =
@<<<<<<<<<<<<<<<<<<<<<<<<<<<< @#### @####
$func $start $end
=======================================================
.
format EMPLOYEE_TOP =
=======================================================
Function Start End
=======================================================
.
select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;
open(FILE, "<input.txt" );
while(<FILE>){
if(/^static/){
chomp;
$cols = (split(/ /))[2];
$func=$cols;
}
}
close FILE;
open(FILE, "<input.txt" );
$line;
$count = 0;
@key1=qw(static);
@key2=qw(return\sfailed);
while($line = <FILE> )
{
$count++;
foreach $k (@key1)
{
if ( $line =~ m/$k/ )
{
$start=$count;
last;
}
}
foreach $k (@key2)
{
$r=0;
if ( $line =~ m/$k/ )
{
last;
}
$end=$r+$count;
}
}
close FILE;
write;
文件中的示例代码:
1.static int function1 (...,...,...,some arguments,..,..)
{
statements//
also has loops//
statements//
234. }
235.static int function2 (...,...,...,some arguments,..,..)
{
statements//
also has loops//
statements//
339.
}
输出应该是:
1 and 234 for function1.
235 and 339 for funciton2.
【问题讨论】:
-
你看过MarpaX::Languages::C::AST吗?这是一个完整的 C 编程语言解析器,它从 C 源代码构建抽象语法树。完成此操作后,我想在 AST 中查询每个函数声明的行号非常容易。