我正在尝试使用Scala的解析器组合器将使用Parsec编写的Haskell语法转换为Scala。
实际匹配表达式的翻译非常简单,至少在我看来,在Scala中甚至更容易。但是,让我完全不清楚的是如何处理Parsec使用单子传递的状态。
Scala解析器读取输入并产生ParseResult[T]。
相比之下,Haskell中的GenParser读取输入和状态,并生成另一个解析器。在Scala中传递该状态让我感到困惑。
有人能分享一下他们愿意分享的Scala中的有状态解析示例吗?
我正在尝试使用Scala的解析器组合器将使用Parsec编写的Haskell语法转换为Scala。
实际匹配表达式的翻译非常简单,至少在我看来,在Scala中甚至更容易。但是,让我完全不清楚的是如何处理Parsec使用单子传递的状态。
Scala解析器读取输入并产生ParseResult[T]。
相比之下,Haskell中的GenParser读取输入和状态,并生成另一个解析器。在Scala中传递该状态让我感到困惑。
有人能分享一下他们愿意分享的Scala中的有状态解析示例吗?
into
方法,也称为>>
和flatMap
(是的,你可以在for-comprehensions中使用它)。然而,它将状态(或更精确地说,解析结果)传递到解析器中,而不是沿着下一个解析器,这似乎是您所描述的内容。