2

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

输出应该类似于

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

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

4

1 回答 1

1

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

否则你会因为各种疯狂的原因而失败,其中一些与混淆提取机制的字符串和注释有关(尝试跳过字符串文字是 PHP 的噩梦),还有一些必须做有趣的语言规则,直到你绊倒它才发现(如果你的 PHP 文件包含包含看起来像 PHP 源代码的东西的 HTML 会发生什么?)。

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

于 2012-05-14T23:43:54.190 回答