Scala解析器组合器与Haskell的Parsec相比如何?

时间:2010-03-13 07:15:43

标签: parsing scala haskell parsec parser-combinators

我已经读过Haskell解析器组合器(在Parsec中)可以解析上下文敏感语法。 Scala解析器组合器也是如此吗?如果是这样,这就是“进入”(又名“>>”)函数的用途吗?

与Haskell相比,Scala实现解析器组合器有哪些优点/缺点?他们接受同一类语法吗?是否更容易生成错误消息或与其中一个做其他有用的事情?

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

是否有网页或其他资源显示一种语言的实现中不同的运算符/函数/ DSL-sugar如何映射到另一种语言?

2 个答案:

答案 0 :(得分:14)

你有很多问题!

  

将parsec(只是众多Haskell解析器组合库中的一个)与parsec的Scala实现进行比较

没有人在这里进行比较,因为Scala代码相当新,但请查看文档:

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

  

与Haskell相比,Scala实现解析器组合器有哪些优点/缺点?

Haskell代码已有十多年的历史,很好理解,并且有很多示例,大量文档和用户案例。 Scala的东西相对较新。

  

packrat解析

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

  

是否有网页或其他资源显示一种语言的实现中不同的运算符/函数/ DSL-sugar如何映射到另一种语言?

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

答案 1 :(得分:7)

还有以下技术报告:

Parser combinators in Scala

Parser组合器在Haskell等函数式编程语言中是众所周知的。在本文中,我们将描述它们如何在Scala中实现,这是一种面向功能的面向语言。由于Scala灵活的语法,我们能够非常接近专用解析器生成器支持的EBNF表示法。对于没有经验的人,我们首先通过从头开发一个最小的库来解释解析器组合器的概念。然后,我们转向现有Scala库的详细描述,包括它支持将变量绑定表示为语法的一部分。我们提供了几个现实的例子来说明我们图书馆的实用性。

report.pdf (324K)