23

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

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

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

是否有网页或其他资源显示从一种语言的实现如何映射到另一种语言的不同运算符/功能/DSL 糖?

4

2 回答 2

15

你有很多问题!

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

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

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

Scala 的解析器组合器实现与 Haskell 相比有哪些优势/劣势?

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

Packrat 解析

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

是否有网页或其他资源显示从一种语言的实现如何映射到另一种语言的不同运算符/功能/DSL 糖?

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

于 2010-03-13T07:29:04.730 回答
7

还有以下技术报告:

Scala 中的解析器组合器

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

报告.pdf (324K)

于 2010-03-16T13:42:02.020 回答