TOB*_*TOB 9 parsing haskell scala
我正在尝试使用Parsec将用Haskell编写的语法翻译成Scala的解析器组合器.
实际匹配表达式的翻译非常简单,至少在我看来,在Scala中更容易一些.对我来说一点都不清楚的是如何处理Parsec使用monad传递的状态.
Scala解析器读入Input并生成ParseResult [T].
相反,Haskell中的GenParser读入输入和状态并生成另一个解析器.在Scala中传递这种状态令我感到困惑.
有没有人在Scala中有一个状态解析的例子,他们愿意分享?
据我所知,在 Scala 解析器组合器中处理状态完整的唯一方法是通过该into
方法,也称为>>
and flatMap
(是的,您可以在 for 推导式中使用它)。但是,它将状态(或者更准确地说,解析结果)传递到解析器中,而不是沿着下一个解析器传递,这似乎就是您所描述的。
由于不知道 Haskell 的秒差距,我很难猜测如何使用它来翻译你的语法。
另请参阅这个问题。有一篇关于 Scala 解析器组合器的非常有趣的论文,但我找不到它。对Scala Lang进行一些探索可能会发现这一点。