我做了很多工作来操纵和分析PHP代码.通常我只是使用Tokenizer来做到这一点.对于大多数应用来说这已足够.但有时使用词法分析器解析不够可靠(显然).
因此,我正在寻找一些用PHP编写的PHP解析器.我找到了hnw/PhpParser和kumatch/stagehand-php-parser.两者都是通过使用PHP而不是C(然后编译为LALR(1)解析器)将zend_language_parser.y自动转换为.y文件来创建的.但这种自动转换无法实现.
那么,有没有用PHP编写的不错的PHP解析器?(我需要一个用于PHP 5.2,一个用于5.3.但是其中一个也是一个很好的起点.)
Nik*_*kiC 127
在这里找不到完整稳定的解析器后,我决定自己写一个.结果如下:
PHP-Parser:用PHP编写的PHP解析器
该项目支持解析为PHP 5.2和PHP 7.1之间的任何PHP版本编写的代码.
除了解析器本身之外,库还提供了一些相关的组件:
这对你来说不是一个很好的选择,因为它违反了纯PHP约束,但是:
不久之前,php-internals人们决定将他们转换为Lemon作为他们的解析技术.PHP svn repo中有一个包含所需更改的分支.
他们决定不继续这样做,因为他们发现他们的柠檬溶液慢了大约10-15%.但是,分支仍在那里.
有一个较旧的Lemon解析器被编写为PHP扩展.你也许可以使用它.还有这个PEAR包.还有这个其他的柠檬包(通过这篇关于PGN的博客文章).
当然,即使你让它工作,我也不确定你对数据做了什么,或者数据甚至看起来是什么样的.
另一个古怪的选择是偷看Quercus,这是Java中的PHP实现.他们必须写一个解析器,也许值得调查.
PHP Depend的度量工具包含从完全用PHP编写的PHP源生成AST的代码.但它确实利用PHP自己的token_get_all进行标记化.
源代码可在github上找到:https://github.com/manuelpichler/pdepend/tree/master/src/main/php/PHP/Depend
最后我检查了一些部分如数学表达式的AST的实现还没有完成,但根据其作者的说法,这是目标.