PHP词法分析器和解析器生成器


PHP Lexer and Parser Generator?

我知道PHP中的Lex和Yacc在一年前就被问过了。

现在有新的成熟的PHP解析器生成器吗?我的搜索驱使我找到了以下几个,你觉得它们怎么样,还有其他的吗?

  • code.google.com/p/antlrphpruntime/: ANTLR PHP版本,但它似乎是非常beta的版本,我认为有很多工作要做。优点是我可以在ANTLR Works工具中编写语法。
  • pear.php.net/package/PHP_ParserGenerator/docs/0.1.7/:我尝试过,但它似乎很复杂,与PHP_LexerGenerator一起使用。
  • sourceforge.net/projects/lime-php/:我没有尝试
  • bitbucket.org/wez/lemon-php/downloads:我没有尝试
  • bitbucket.org/wez/jlexphp/downloads:我没有尝试

[答:]有人给了我一个关于老问题的链接:flex/bison是否有可用于8位嵌入式系统的替代方案?

这篇文章让我理解了大部分生成的ANTLR代码。所以我的选择一直是一样的:ANTLR,尽管这个项目似乎已经死了。我希望我不必修改代码,因为我想保持它的可维护性。

我会等一会儿,看看是否有其他答案,否则我会接受你的建议,继续使用ANTLR

我建议给ANTLR一个尝试。ANTLRWorks可能会有帮助。

我自己用纯PHP编写了一个LL(1)解析器生成器,因为我不知道还有其他基于PHP的解决方案。

我已经移植了Jison, javascript中的Bison克隆,到php。结果是一个杀手级解析器,能够处理非常简单和非常复杂的词法分析/解析。它现在是Jison的一部分,但在我的分支中有一些更新。

文件在这里。请参阅该页中的自述文件,您可以同时创建一个javascript和php解析器,它们能够做相同或不同的事情。

它是稳定,快速,简单,有趣的使用

php有PEG https://github.com/hafriedlander/php-peg

PHP 7.4的最新语法文件:https://github.com/php/php-src/blob/af12aa8124232b8fb6e96736e1232f6e0d2554e8/Zend/zend_language_parser.y

PHP使用re2c解析器生成器,但据我所知其语法与ANTLR兼容。