2010-03-13 104 views
22

我读过Haskell解析器组合器(在Parsec中)可以解析上下文敏感的语法。对于Scala解析器组合器,这也是如此吗?如果是这样,这是“入”(又名“>>”)功能是什么?Scala解析器组合器与Haskell的Parsec相比如何?

Scala的解析器组合器的实现与Haskell的实现有什么长处/短处?他们接受同一类语法吗?更容易产生错误信息或用其他方法做其他杂项有用的事情?

packrat解析(在Scala 2.8中引入)如何适合这张图片?

是否有网页或其他资源,显示不同的操作符/函数/ DSL糖从一种语言的实现映射到另一个上?

回答

14

您有很多问题!

秒差距(这仅仅是众多的Haskell解析器组合库之一)到Scala实现的秒差距

有人在这里进行的比较比较,因为Scala代码是相当新的,但检查文档:

请注意,如果您对此方法感兴趣,Haskell还有许多其他解析器组合器库。

有哪些优势/ Scala的实现解析器组合的弱点,VS Haskell的?

Haskell代码已经有十多年的历史了,很好理解,并且有很多例子,很多文档和用户案例。斯卡拉的东西比较新。

packrat解析

packrat解析是完全不同的。最初的packrat paper是在Haskell开发的,但后来变得更加普遍。

是否有网页或其他资源,显示不同的操作符/函数/ DSL糖从一种语言的实现映射到另一个上?

不,但那会很酷。但是,几乎所有(?)解析器组合器库都基于开创性的parsec实现,所以它们与原始parsec共享很多。

7

还有以下技术报告:

Parser combinators in Scala

解析器组合在函数式编程语言,例如哈斯克尔知名。在本文中,我们描述了它们是如何在Scala中实现的,这是一种面向对象的函数式语言。感谢Scala灵活的语法,我们能够近似接近由专用解析器生成器支持的EBNF表示法。对于不熟悉的人,我们首先通过从头开发一个最小的库来解释解析器组合器的概念。然后我们转向对现有Scala库的详细描述,包括它对作为语法一部分的变量绑定的支持。我们提供了几个现实的例子来说明我们的图书馆的实用性。

report.pdf (324K)

+0

@Adriaan摩尔:有没有解决的Scala 2.8组合符解析器库添加的刊物? – 2010-03-16 14:39:03

+0

我不这么认为,但我会问Tiark - 自2.7以来我没有在解析器上工作过。 – 2010-03-17 09:51:28