我想提取給定其名稱和起始行號的整個函數。從源代碼中提取完整的函數定義
輸出應該是這樣的
function function_name($a = null, $b = true) {
$i_am_test = 'foo';
return $i_am_test;
}
或任何功能定義。大多數工具(包括grep等)只返回第一行function function_name($a = null, $b = true) {
,但我需要整個函數定義。
我想提取給定其名稱和起始行號的整個函數。從源代碼中提取完整的函數定義
輸出應該是這樣的
function function_name($a = null, $b = true) {
$i_am_test = 'foo';
return $i_am_test;
}
或任何功能定義。大多數工具(包括grep等)只返回第一行function function_name($a = null, $b = true) {
,但我需要整個函數定義。
要準確地從計算機程序源文件(尤其是PHP)中提取函數(變量/類/ ....),您需要一個真正的語言解析器。
否則,你會有某種破解出現各種各樣的瘋狂原因,其中一些與字符串和註釋混淆提取機制(並嘗試跳過字符串文字是PHP是噩夢)有關,有些必須處理有趣的語言規則,直到你跳過它纔會發現(如果你的PHP文件包含HTML,其中包含的東西看起來像PHP源代碼那麼會發生什麼?)。
我們的DMS Software Reengineering Toolkit有一個完整的理解PHP語法的PHP5 front end。它可以解析PHP源文件,然後配置爲分析/提取任何你想要的代碼。解析器可以準確捕獲其內部AST上的行號,因此很容易在特定的行號處找到文件中的代碼;給定代碼/ AST,打印AST代表該行號的代碼非常簡單。如果您在特定行上找到函數標識符並打印出相關的AST,那麼您將完全是函數源代碼。