将Haskell Parsec语法翻译成Scala?

时间:2012-03-23 02:31:16

标签: parsing scala haskell

我正在尝试使用Parsec将用Haskell编写的语法翻译成Scala的解析器组合器。

实际匹配表达式的翻译非常简单,至少在我看来,在Scala中更容易一些。对我来说一点都不清楚的是如何处理Parsec使用monad传递的状态。

Scala解析器读入Input并生成ParseResult [T]。

相比之下,Haskell中的GenParser读入输入和状态并生成另一个解析器。在Scala中传递这种状态让我很困惑。

有没有人在Scala中有一个他们愿意分享的有状态解析的例子?

1 个答案:

答案 0 :(得分:2)

我知道在Scala Parsers Combinators中处理状态丰满度的唯一方法是使用into方法,也称为>>flatMap(是的,您可以使用在for-comprehensions)。但是,它将状态(或更准确地说,解析结果)传递给解析器,而不是沿着下一个解析器传递,这似乎就是您所描述的。

不知道Haskell的Parsec,我很难猜测如何用它来翻译你的语法。

另见this question。有一篇关于Scala解析器组合的非常有趣的论文,但我无法找到它。 Scala Lang上的一些洞察可能会将其打开。