gpt4 book ai didi

haskell - Text.ParserCombinators.Parsec 和 Text.Parsec 之间有什么区别

转载 作者:行者123 更新时间:2023-12-02 05:04:57 26 4
gpt4 key购买 nike

Text
Text.Parsec
Text.Parsec.ByteString
Text.Parsec.ByteString.Lazy
Text.Parsec.Char
Text.Parsec.Combinator
Text.Parsec.Error
Text.Parsec.Expr
Text.Parsec.Language
Text.Parsec.Perm
Text.Parsec.Pos
Text.Parsec.Prim
Text.Parsec.String
Text.Parsec.Token
ParserCombinators
Text.ParserCombinators.Parsec
Text.ParserCombinators.Parsec.Char
Text.ParserCombinators.Parsec.Combinator
Text.ParserCombinators.Parsec.Error
Text.ParserCombinators.Parsec.Expr
Text.ParserCombinators.Parsec.Language
Text.ParserCombinators.Parsec.Perm
Text.ParserCombinators.Parsec.Pos
Text.ParserCombinators.Parsec.Prim
Text.ParserCombinators.Parsec.Token

它们一样吗?

最佳答案

目前有两个广泛使用的 Parsec 主要版本:Parsec 2 和秒差距 3。

我的建议是简单地使用最新版本的 Parsec 3。但是如果你想做出明智的选择,继续阅读。

秒差距 3 的新功能

Monad 转换器

Parsec 3 引入了一个 monad 转换器 ParsecT,它可以用来组合与其他单子(monad)效果一起解析。

尽管 Parsec 2 允许您选择 token 类型(这在您想要将词法分析与解析分开),标记总是排列成列表。列表可能不是最有效的存储数据结构大文本。

Parsec 3 可以处理任意 -- 具有类似列表的数据结构界面。您可以定义自己的流,但 Parsec 3 还包括一个流行的高效的基于 ByteString 的 Stream 实现(对于 Char-based解析),通过模块 Text.Parsec.ByteStringText.Parsec.ByteString.Lazy

选择秒差距 2 的原因

需要的扩展更少

Parsec 3 提供的高级功能不是免费的;实现它们需要多种语言扩展。

这两个版本都不是 Haskell-2010(即都使用扩展),但是Parsec 2 使用的扩展比 Parsec 3 少,所以任何给定的编译器都有可能Parsec 2 的编译能力高于 Parsec 3。

此时两个版本都可以使用 GHC,而 Parsec 2 也是 reported到使用 JHC 构建,并作为 JHC 的标准库之一包含在内。

性能

最初(即从 3.0 版本开始)Parsec 3 比秒差距 2。然而,work on improving Parsec 3 performance已经完成了,从 3.1 版开始,Parsec 3 仅比 Parsec 2 稍慢(基准:12)。

兼容层

可以在 Parsec 3 中“重新实现”所有 Parsec 2 API。这兼容层由模块层次结构下的 Parsec 3 包提供Text.ParserCombinators.Parsec(与 Parsec 2 使用的层次结构相同),而新的 Parsec 3 API 在 Text.Parsec 层次结构下可用。

这意味着您可以使用 Parsec 3 作为 Parsec 2 的直接替代品。

关于haskell - Text.ParserCombinators.Parsec 和 Text.Parsec 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12938856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com