用PHP编写的任何体面的PHP解析器?

Nik*_*kiC 79 php parsing

我做了很多工作来操纵和分析PHP代码.通常我只是使用Tokenizer来做到这一点.对于大多数应用来说这已足够.但有时使用词法分析器解析不够可靠(显然).

因此,我正在寻找一些用PHP编写的PHP解析器.我找到了hnw/PhpParserkumatch/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版本编写的代码.

除了解析器本身之外,库还提供了一些相关的组件:

  • 将AST编译回PHP("漂亮打印")
  • 遍历和更改AST的基础结构
  • 与XML串行化(以及以人类可读形式转储)
  • 解析命名空间名称(别名等)

有关用法概述,请参阅文档"基本组件的用法"部分.

  • 这太棒了!你有计划维护它吗? (2认同)
  • 哇,PHP 7.1 将于 2011 年 12 月初支持! (2认同)

Cha*_*les 9

这对你来说不是一个很好的选择,因为它违反了纯PHP约束,但是:

不久之前,php-internals人们决定将他们转换为Lemon作为他们的解析技术.PHP svn repo中有一个包含所需更改的分支.

他们决定不继续这样做,因为他们发现他们的柠檬溶液慢了大约10-15%.但是,分支仍在那里.

有一个较旧的Lemon解析器被编写为PHP扩展.你也许可以使用它.还有这个PEAR包.还有这个其他的柠檬包(通过这篇关于PGN的博客文章).

当然,即使你让它工作,我也不确定你对数据做了什么,或者数据甚至看起来是什么样的.

另一个古怪的选择是偷看Quercus,这是Java中的PHP实现.他们必须写一个解析器,也许值得调查.


nad*_*man 7

PHP Depend的度量工具包含从完全用PHP编写的PHP源生成AST的代码.但它确实利用PHP自己的token_get_all进行标记化.

源代码可在github上找到:https://github.com/manuelpichler/pdepend/tree/master/src/main/php/PHP/Depend

最后我检查了一些部分如数学表达式的AST的实现还没有完成,但根据其作者的说法,这是目标.

  • 你得到了赏金,因为这是问题的最接近的答案.但显然它并不真正可用,因为它缺少PHP语法的一半...... (2认同)