2013-10-15 18 views
0

函數參數這是以下問題perl的 - 需要在上下文中添加提取到模板

perl - extracting arguments from function definitions and putting it as comment above it

但不是隻是在功能上面添加評論,我需要添加它裏面的模板。

像@參數[中] pChainCtrl

/** 
******************************************************************************** 
* @fn ChainCtrlInitChains              
* @brief 
* @param[in ]  # need to add arguments here 
* @return 
******************************************************************************** 
*/ 
eErrorT ChainCtrlInitChains(ChainCtrlT* pChainCtrl, 
    char* name, 
    int instance, 
    void* pOwner, 
    ) 
    { 
     .... 
    } 
    ......... 

我從用戶@Joseph輸入代碼,增加了上述功能定義,但沒有模板

use File::Copy; 

open my $FILE,'<','a.c' or die "open failed: $!\n"; 
open my $FILE1,'>','b.c' or die "open failed: $!\n"; 

$file_slurp = do { local $/;<$FILE>}; 
$file_slurp =~ s{^(\w+ \s+ \w+ \s* \((.+?) \))}{&print_args($2,$1)}xmesg; 
print $FILE1 $file_slurp; 

close($FILE); 
close($FILE1); 

sub print_args { 
    ($args,$proto) = @_; 
    @arr = map /(\w+)$/, split /\W*?,\W*/, $args; 
    @comments = map ' * @param[in/out] '."$_", @arr; 
    return join "\n",(@comments,$proto) 
} 
+1

問題是?你在代碼中有什麼困難? – Qtax

+0

我寫在第3行..但不是添加註釋只是在函數頂部,我需要添加它在模板內。 –

回答

1

此代碼似乎給裏面的參數期望的輸出:(編輯爲每評語)

my $file_slurp = do { local $/;<DATA>}; 

#Note this '({(?:[^{}]++|(?3))*+})' extra bit in the pattern match is to match paired '{}' 
while ($file_slurp =~ /^ \S+ \s+ (\S+) \s* (\(.+? \))\s+ ({(?:[^{}]++|(?3))*+}) /xsmgp) { 
    my $func = $1; 
    my $match = ${^MATCH}; 
    my @args = $2 =~ /(\w+)[,)]/g; 
    print_args($func,$match,@args); 
} 

sub print_args { 
    my $func = shift; 
    my $match = shift; 
    my @args = @_; 
    my @fields = qw/@fn @brief @param[in] @return/; 
    $fields[0].=' '.$func; 
    $fields[2].=' '.join ' ', @args; 
    say '/**'; 
    say '*' x 20; 
    say '* '.$_ for @fields; 
    say '*' x 20; 
    say '*/'; 
    say $match; 
} 

__DATA__ 
eErrorT ChainCtrlInitChains(ChainCtrlT* pChainCtrl, 
char* name, 
int instance, 
void* pOwner, 
) 
{ 
    {....} 
} 
......... 

輸出:

/** 
******************** 
* @fn ChainCtrlInitChains 
* @brief 
* @param[in] pChainCtrl name instance pOwner 
* @return 
******************** 
*/ 
eErrorT ChainCtrlInitChains(ChainCtrlT* pChainCtrl, 
char* name, 
int instance, 
void* pOwner, 
) 
{ 
    {....} 
} 
+0

但我需要輸出作爲整個.c函數定義與模板。在這種情況下,我只能得到模板 –

+0

根據需要進行編輯。 –

+0

效果很好。謝謝 !! –

相關問題