将Haskell Parsec语法翻译成Scala



我正在尝试将使用Parsec在Haskell中编写的语法转换为Scala的语法分析器组合子。

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

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

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

有人愿意分享Scala中有状态解析的例子吗?

据我所知,在Scala Parsers Combinators中处理状态填充的唯一方法是通过into方法,也称为>>flatMap(是的,您可以在中使用它进行理解)。然而,它将状态(或者更准确地说,解析结果)传递到解析器中,而不是传递到下一个解析器中,这似乎就是您所描述的。

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

另请参阅此问题。有一篇关于Scala解析器组合子的非常有趣的论文,但我没能找到。

最新更新