我用YARD很多享受:

http://www.ootl.org/yard/

http://code.google.com/p/yardparser/

http://www.codeproject.com/KB/recipes/yard- tokenizer.aspx

我能够构建全功能计算器。我评价一个院子里做PHP解析器。敬请指教对PEG的语法解析器和发电机的局限性。非常感谢你!

有帮助吗?

解决方案

我认为最大的“问题”与PEG的是,他们不属于语法的正常的分类,因为他们在一个完全不同的方式运作。普通语法是“落后”在某种意义上说,他们描述了所有可能的句子(程序)可以生成。的PEG描述如何解析 - 它们落入在从另一端的问题

在我看来,这是思考问题更自然的方式,当然对于任何手写(递归下降)语法分析器,我不会做任何事情。

其他提示

PEG文法的主要限制是,它们不与模糊处理的。

要可以肯定,这也是它们的强度,因为处理歧义是使用CFG(上下文语法)工具的最令人沮丧的部分之一。

带销您通过订购您想要另一个规则,会匹配含糊但你不想之前符合规则处理歧义明确。

问题是,你并不总是知道的一些,甚至任何含糊不清的语言或语法和PEG发电机,至少我试过的,不分析语法歧义,以帮助你找到它们,然后设计和设定规则来处理他们的正确途径。

CFG分析器生成像YACC和野牛分析你的语法和报告所有的歧义。不幸的是,他们往往在一个相当隐蔽的方式,可能很难弄懂举报。当然还有它往往很难解决语法来对付他们。但至少你会知道它们的存在。

通过一个PEG语法,因为一旦你把它的PEG它没有任何含糊之处越多,你可以无知幸福在你的语法概念含糊不清的,它只是匹配规则,也许默默不可达规则,这也将匹配,如果他们有更高的优先级。在测试中,这些可能不会出现,但发布后可能出现。

使用CFG文法你不得不处理发展过程中含糊不清,但它不会是容易的。


在事件我不是做清楚,这里是由Joshua哈伯曼在上的 LAMBDA终极的编程语言博客六十岁的讨论: PEG和Packrat解析并不是答案

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top