Tag: parsec

Parsec vs Yacc / Bison / Antlr:为什么以及何时使用Parsec?

我是Haskell和Parsec的新手。 在阅读第16章使用Haskell的Parsec之后,我想起了一个问题:为什么Parsec比其他parsing器生成器(比如Yacc / Bison / Antlr)更好? 我的理解是,Parsec创build了一个很好的编写parsing器的DSL,Haskell使它非常容易和expression。 但是parsing就是这样一种标准/stream行的技术,值得自己的语言输出到多种目标语言。 那么我们什么时候应该使用Parsec而不是从Bison / Antlr生成Haskell代码呢? 这个问题可能会超越技术,进入行业实践领域。 从头开始编写parsing器时,拿起Haskell / Parsec相比于Bison / Antlr或类似的东西有什么好处? 顺便说一句:我的问题与这个问题非常相似,但在那里没有得到满意的回答。

在使用像Parsec这样的parsing器组合器库时,是否应该使用词法分析器?

在parsing器组合库(如Haskell的Parsec)中编写parsing器时,通常有两个select: 编写一个词法分析器,将您的Stringinput分成标记,然后在[Token]上执行parsing 直接在String上写分析器组合器 第一种方法通常似乎是有道理的,因为许多parsinginput可以被理解为由空格分隔的令牌。 在其他地方,我曾经看到人们build议不要使用标记(或者扫描或者打点 ,有些人称之为),简单地被引用为主要原因。 勒索与不做之间的一般权衡是什么?

Text.ParserCombinators.Parsec和Text.Parsec有什么区别?

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 他们是一样的吗?

应用性parsing与单体parsing有什么好处?

似乎有一个共识,你应该使用Parsec作为应用而不是monad。 应用性parsing与单体parsing有什么好处? 样式 性能 抽象化 monadicparsing出来了吗?

在haskell中的attoparsec或parsec

我必须parsing一些文件,并将其转换为一些预定义的数据types。 Haskell似乎提供了两个包: attoparsec 秒差距 它们之间有什么区别,哪一个更适合根据一些规则parsing文本文件?