【问题标题】:How do Scala parser combinators compare to Haskell's Parsec? [closed]Scala 解析器组合器与 Haskell 的 Parsec 相比如何? [关闭]
【发布时间】:2011-01-27 02:43:18
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: parsing scala haskell parsec parser-combinators


    【解决方案1】:

    你有很多问题!

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

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

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

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

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

    packrat 解析

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

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

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

    【讨论】:

      【解决方案2】:

      还有以下技术报告:

      Parser combinators in Scala

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

      report.pdf (324K)

      【讨论】:

      • @Adriaan Moors:有没有解决 Scala 2.8 组合解析器库添加的出版物?
      • 我不这么认为,但我会问 Tiark——我从 2.7 开始就没有研究过解析器。
      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多