2012-05-14 68 views
2

我想提取給定其名稱和起始行號的整個函數。從源代碼中提取完整的函數定義

輸出應該是這樣的

function function_name($a = null, $b = true) { 
    $i_am_test = 'foo'; 
    return $i_am_test; 
} 

或任何功能定義。大多數工具(包括grep等)只返回第一行function function_name($a = null, $b = true) {,但我需要整個函數定義。

回答

1

要準確地從計算機程序源文件(尤其是PHP)中提取函數(變量/類/ ....),您需要一個真正的語言解析器。

否則,你會有某種破解出現各種各樣的瘋狂原因,其中一些與字符串和註釋混淆提取機制(並嘗試跳過字符串文字是PHP是噩夢)有關,有些必須處理有趣的語言規則,直到你跳過它纔會發現(如果你的PHP文件包含HTML,其中包含的東西看起來像PHP源代碼那麼會發生什麼?)。

我們的DMS Software Reengineering Toolkit有一個完整的理解PHP語法的PHP5 front end。它可以解析PHP源文件,然後配置爲分析/提取任何你想要的代碼。解析器可以準確捕獲其內部AST上的行號,因此很容易在特定的行號處找到文件中的代碼;給定代碼/ AST,打印AST代表該行號的代碼非常簡單。如果您在特定行上找到函數標識符並打印出相關的AST,那麼您將完全是函數源代碼。

相關問題