从源代码中提取完整的函数定义


Extract complete function definition from source code

我想根据其名称和起始行号提取整个函数。

输出应类似于

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 软件再造工具包有一个完整的 PHP5 前端,可以完全理解 PHP 语法。 它可以解析PHP源文件,然后配置为分析/提取您想要的任何代码。 解析器在其内部 AST 上准确捕获行号,因此很容易在文件中的特定行号处找到代码;给定代码/AST,很容易打印AST表示该行号处的代码。 如果您在特定行上找到函数标识符并打印出相关的 AST,您将准确地获得函数源代码。