2011-11-03 88 views
13

我知道的问题Lex and Yacc in PHP之前问过,但1年前。PHP Lexer和Parser Generator?

现在有没有新的成熟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/下载:我没有尝试

[答:] 有人给了我这个美妙的链接到一个老问题: Is there an alternative for flex/bison that is usable on 8-bit embedded systems?

这个帖子让我明白最生成的ANTLR代码。所以我的选择一直保持不变:ANTLR虽然项目似乎已经死了。我希望我不必改变代码,因为我想保持它的可维护性。

我会稍等一会,看看是否有另一种答案,否则我会接受你的建议使用ANTLR

+0

如果您拥有PHP的属性语法,请尝试CoCo/R(ssw.jku.at/coco/)。我现在在工作中使用它,它工作得很好。 – xbonez

+0

我不会使用code.google.com/p/antlrphpruntime:它的(AFAIK)没有被积极开发,它只支持大多数其他ANTLR目标支持的最低限度。这就是为什么ANTLR工具默认不包含它。对PHP_ParserGenerator也是一样:我不会去找它(没有太多的文档,而且这是一个被遗弃的项目)。其他3种工具对我来说也不熟悉:我建议你试试看。 –

+0

@xbonez:我不是100%确定,但我不认为你了解我的需求。我需要生成一个用PHP编写的解析器来解析特定的语法(而不是解析php语言)。 CoCo/R看起来不错,但我找不到一个PHP生成器。 –

回答

6

我建议给予ANTLR一个尽量保持。 ANTLRWorks可能会有所帮助。

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

+0

我现在正在尝试ANTLR,但生成的代码中有很多错误。例如,缺少一些例外,解析器会引发意想不到的异常。你使用过这个组件吗? http://code.google.com/p/antlrphpruntime/ –

+0

嗯,其实不是。我最近尝试了ActionScript运行时 - 目前已破解。但我记得,我检查了ANTLR和PHP运行时间。那时候,事情似乎奏效了。 – SteAp

+0

网址被破坏 –

2
+0

谢谢。虽然我现在对ANTLR生成的Parser很满意,但我仍然对其他人感兴趣,因为antlr看起来非常慢。你试过PEG吗,它有不错的表现。 –

+0

顺便说一下,我认为这个项目PEG几乎是DEAD ....最后提交03/2011,10个bug在2011年8月宣布。 –

+0

我不知道性能,但我喜欢PEG,我认为,在PHP中唯一的PEG实现。 – jcubic

6

我移植Jison,野牛克隆在JavaScript中,到PHP。结果是一个杀手解析器,能够处理非常简单和非常复杂的搜索/解析。它现在是Jison的一部分,但在my fork有一些更新。

这些文件是here。请参阅该页面中的自述文件,您可以同时创建一个JavaScript和PHP解析器,以执行相同或不同的操作。

它使用稳定,快速,简单和有趣。

+0

我会检查,尽快,它很好。 –

+0

关于移植PHP的死链接:/ – Dennis