2

我正在使用 token_get_all() 对 php 项目进行一些静态分析。

如何找到以下内容的范围级别:

  • 查找当前 T_FUNCTION 是否仍在被解析的 T_CLASS 中
  • 知道 T_VARIABLE 的范围是否已经结束

我应该计算'{'和'}'字符吗?这是一种安全的方法吗?

4

2 回答 2

2

token_get_all()正是包装所说的:它是一个标记器。

这意味着您必须自己跟踪范围,通过跟踪打开和关闭大括号;我能想到的最简单的方法是构建一个递归下降解析器

顺便说一句,这个函数已经处理了解析错误。

于 2012-10-03T09:02:46.190 回答
1

您最好使用解析器来构建语法树,否则边缘情况将变得非常复杂(PHP 是一种非常棘手的语言,可以嵌入其他语言)。

一个快速的谷歌想出了:PHP-Parser

使用语法树,您可以更轻松地识别函数或变量的范围,但仍需要进行一些分析。

于 2012-10-03T09:01:24.113 回答