我已经读过Haskell解析器组合器(在Parsec中)可以解析上下文敏感语法。 Scala解析器组合器也是如此吗?如果是这样,这就是“进入”(又名“>>”)函数的用途吗?
与Haskell相比,Scala实现解析器组合器有哪些优点/缺点?他们接受同一类语法吗?是否更容易生成错误消息或与其中一个做其他有用的事情?
packrat解析(在Scala 2.8中引入)如何适合这张图片?
是否有网页或其他资源显示一种语言的实现中不同的运算符/函数/ DSL-sugar如何映射到另一种语言?
答案 0 :(得分:14)
你有很多问题!
将parsec(只是众多Haskell解析器组合库中的一个)与parsec的Scala实现进行比较
没有人在这里进行比较,因为Scala代码相当新,但请查看文档:
请注意,如果您对此方法感兴趣,Haskell还有许多其他解析器组合库,例如
与Haskell相比,Scala实现解析器组合器有哪些优点/缺点?
Haskell代码已有十多年的历史,很好理解,并且有很多示例,大量文档和用户案例。 Scala的东西相对较新。
packrat解析
packrat解析完全不同。最初的packrat paper是在Haskell中开发的,但后来变得更加广泛。
是否有网页或其他资源显示一种语言的实现中不同的运算符/函数/ DSL-sugar如何映射到另一种语言?
不,但那会很酷。但是,几乎所有(?)解析器组合库都基于开创性的parsec实现,因此它们与原始parsec共享很多。
答案 1 :(得分:7)
还有以下技术报告:
Parser组合器在Haskell等函数式编程语言中是众所周知的。在本文中,我们将描述它们如何在Scala中实现,这是一种面向功能的面向语言。由于Scala灵活的语法,我们能够非常接近专用解析器生成器支持的EBNF表示法。对于没有经验的人,我们首先通过从头开发一个最小的库来解释解析器组合器的概念。然后,我们转向现有Scala库的详细描述,包括它支持将变量绑定表示为语法的一部分。我们提供了几个现实的例子来说明我们图书馆的实用性。