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

art*_*tif 22 parsing haskell scala parsec parser-combinators

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

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

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

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

Don*_*art 14

你有很多问题!

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

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

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

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

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

packrat解析

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

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

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


Adr*_*ors 7

还有以下技术报告:

Scala中的解析器组合器

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

report.pdf(324K)