使用解析器组合器的原因是什么?

时间:2017-12-06 11:11:59

标签: parsing haskell parser-combinators

我正在查看following approach在Haskell中使用解析器组合器。作者给出了以下Parser Combinators的例子:

windSpeed :: String -> Maybe Int
windSpeed windInfo =
    parseMaybe windSpeedParser windInfo

windSpeedParser :: ReadP Int
windSpeedParser = do
    direction <- numbers 3
    speed <- numbers 2 <|> numbers 3
    unit <- string "KT" <|> string "MPS"
    return speed

作者给出了这种方法的以下原因:

  • 易于阅读(我同意这一点)
  • 与规范类似的格式,即解析器本身基本上是对它解析的内容的描述(我同意这一点)

我不禁觉得我错过了选择解析器组合器的一些原因。 using Haskell,编译时guaranteeselimination运行时错误的一些好处。当您启动parsing DSL and using免费monad时,或者一些后续好处。

我的问题是:使用解析器组合器的原因是什么?

1 个答案:

答案 0 :(得分:2)

我发现使用解析器组合器有几个好处:

  • Parser组合器是手写自上而下解析器的概括。在您手写解析器的情况下,使用解析器组合器抽象出常见的模式。
  • 与解析器生成器不同,解析器组合器可能是动态,允许在运行时进行决策。如果可以根据输入重新定义语言的语法,则此方面可能很有用。
  • 解析器是一流的物体。