【问题标题】:Choosing a Haskell parser选择 Haskell 解析器
【发布时间】:2010-06-21 04:53:57
【问题描述】:

Haskell 中有许多开源的parser implementations 可供我们使用。 Parsec 似乎是文本解析的标准,attoparsec 似乎是二进制解析的流行选择,但除此之外我不知道太多。您是否遵循特定的决策树来选择解析器实现?您对图书馆的优势或劣势有什么有趣的了解吗?

【问题讨论】:

    标签: parsing haskell


    【解决方案1】:

    你有几个不错的选择。

    对于String类型的轻量级解析:

    对于打包的字节串解析,例如HTTP headers.

    对于大多数人使用的实际二进制数据:

    • binary -- 用于惰性二进制解析
    • cereal -- 用于严格的二进制解析

    要问自己的主要问题是底层字符串类型是什么?

    该决定很大程度上决定了您将使用哪种解析器工具集。

    要问的第二个问题是:我是否已经有了数据类型的语法?如果是这样,我可以使用快乐

    显然,对于自定义数据类型,有各种优秀的现有解析器:

    【讨论】:

      【解决方案2】:

      只是添加到 Don 的帖子中:就我个人而言,我非常喜欢 Text.ParserCombinators.ReadP(base 的一部分),因为它是快速简单的东西。特别是当 Parsec 看起来有点矫枉过正时。

      字节串版本有一个 bytestringreadp 库,但它不包括 Char8 字节串,我怀疑 attoparsec 在这一点上会是一个更好的选择。

      【讨论】:

        【解决方案3】:

        我最近将一些代码从 Parsec 转换为 Attoparsec。两者都相当有能力。

        Attoparsec 在性能和内存占用方面胜出,但 Parsec 提供更好的错误报告并拥有更完整的文档。

        【讨论】:

          【解决方案4】:

          Bryan O'Sullivan 的博文 What’s in a parser? Attoparsec rewired (2/2) 包含一个很好的性能基准,比较了几种实现以及一些比较内存使用情况的 cmets。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多