我正在使用 token_get_all() 对 php 项目进行一些静态分析。
如何找到以下内容的范围级别:
- 查找当前 T_FUNCTION 是否仍在被解析的 T_CLASS 中
- 知道 T_VARIABLE 的范围是否已经结束
我应该计算'{'和'}'字符吗?这是一种安全的方法吗?
这token_get_all()
正是包装所说的:它是一个标记器。
这意味着您必须自己跟踪范围,通过跟踪打开和关闭大括号;我能想到的最简单的方法是构建一个递归下降解析器。
顺便说一句,这个函数已经处理了解析错误。
您最好使用解析器来构建语法树,否则边缘情况将变得非常复杂(PHP 是一种非常棘手的语言,可以嵌入其他语言)。
一个快速的谷歌想出了:PHP-Parser
使用语法树,您可以更轻松地识别函数或变量的范围,但仍需要进行一些分析。