2016-02-11 103 views
0

給定.c文件和標識文件中定義的函數的函數名稱,我們如何自動提取其參數的類型(以其逐字符串形式)?例如,C函數看起來像提取C函數的參數類型

int foo(double x, double* y){...} 

我需要輸出到一個文件,說types,兩行

double 
double* 

我想LLVM應該是矯枉過正。也許使用簡單的Unix命令,比如'awk'已經可以完成這項工作了?

+0

如果你想讓它工作,請使用一個真正的解析器,就像你從libclang獲得的解析器一樣。 –

+0

_automatically_?你在說通過命令行解析文件還是編程解析? 'awk'在unix環境中都非常棒。 – ryyker

回答

1

試試這個:

ctags -x xpd.c | sed -n '/function/{s/.*(//; s/).*//; /^$/d; 
s/\*\([^ ]\)/* \1/; s/ *[^ ]*, */\n/g; s/ *[^ ]*$//; p; }' 

這拉類型出我的C代碼,但我不能說,它將爲所有的C工作 - 因人而異。

在sed的一些注意事項:

  • 第一三個語句產生緩衝象這樣:double x, double *y
  • 下一語句分離*y* y
  • 下一匝的標識符跟一個逗號成換行符:x, -> \n
  • 最後一個替換丟棄尾隨標識符:y
+0

哇。這是不容置疑的! – zell