首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Text.ParserCombinators.Parsec和Text.Parsec有什么不同

Text.ParserCombinators.Parsec和Text.Parsec有什么不同
EN

Stack Overflow用户
提问于 2011-05-17 18:15:33
回答 2查看 3.6K关注 0票数 44
代码语言:javascript
复制
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

它们是一样的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-18 13:27:10

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

我的建议是简单地使用Parsec 3的最新版本,但如果你想做一个认真的选择,请继续阅读。

第3段中的新特性

Monad Transformer

Parsec 3引入了一个monad转换器,ParsecT,它可以用来将解析与其他一元效果结合起来。

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

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

更喜欢Parsec 2的理由

所需扩展更少

Parsec 3提供的高级特性不是免费的;要实现它们,需要几个语言扩展。

这两个版本都不是Haskell-2010 (即都使用扩展),但Parsec 2使用的扩展比Parsec 3少,因此任何给定编译器编译Parsec 2的机会都高于Parsec 3。

到目前为止,这两个版本都可以与GHC一起工作,而Parsec 2也是与JHC一起构建的reported,并被包括在JHC的标准库中。

性能

最初(即3.0版本) Parsec 3比Parsec 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的临时替代品。

票数 40
EN

Stack Overflow用户

发布于 2011-05-17 19:37:35

我认为后者是Parsec 2的向后兼容层,是用较新的API实现的。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6029371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档