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

时间:2012-05-14 18:22:43

标签: php function parsing refactoring

我想提取给定名称和起始行号的整个函数。

输出应该类似

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

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

1 个答案:

答案 0 :(得分:1)

要从计算机程序源文件中精确提取函数(变量/类/ ....),尤其是对于PHP,您需要一个真正的语言解析器。

否则你会遇到各种各样的疯狂原因导致的某种黑客攻击,其中一些原因与字符串和评论混淆了提取机制(并尝试跳过字符串文字是PHP是噩梦),还有一些你有没有发现有趣的语言规则,直到你绊倒它(如果你的PHP文件包含的HTML包含看起来像PHP源代码的东西会怎么样?)。

我们的DMS Software Reengineering Toolkit有一个完整的PHP5 front end,可以完全理解PHP语法。它可以解析PHP源文件,然后配置为分析/提取您想要的任何代码。解析器准确地捕获其内部AST上的行号,因此很容易在特定行号的文件中找到代码;给定代码/ AST,很容易打印AST代表该行号的代码。如果在特定行上找到函数标识符并打印出相关的AST,那么您将完全使用函数源代码。