如何使用token_get_all()查找范围级别?

时间:2012-10-03 08:57:10

标签: php parsing tokenize

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

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

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

我应该保留“{”和“}”字符的数量吗?这是一种安全的方法吗?

2 个答案:

答案 0 :(得分:2)

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

这意味着您必须通过跟踪开合括号来自己跟踪范围;我能想到的最简单的方法是建立一个recursive descent parser

顺便说一句,解析错误已经由此函数处理。

答案 1 :(得分:1)

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

快速谷歌提出:PHP-Parser

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