选择Haskell解析器

问题描述:

Haskell有许多开源的parser implementationsParsec似乎是文本解析的标准,而attoparsec似乎是二进制解析的流行选择,但除此之外我不太了解。您选择解析器实现时是否遵循特定的决策树?你有没有对图书馆的长处或弱点有所了解?选择Haskell解析器

你有几个不错的选择。

对于字符串类型的轻质解析:

对于填料字节串解析,例如的HTTP headers

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

  • binary - 懒惰的二元分析
  • cereal - 严格的二元分析
主要是

问问自己,底层字符串类型是什么?

这一决定在很大程度上决定了你会使用哪个分析器工具集。

问的第二个问题是:我是否已经有了数据类型的语法?如果是这样,我就可以用得开心

而且很明显自定义数据类型有很多种好现有的解析器:

+1

感谢您的详细解答 – Keith 2010-06-19 22:18:07

+1

非常棒的答案,非常感谢。 – Litherum 2012-03-25 05:57:53

只需添加到唐的职务:就个人而言,我很喜欢Text.ParserCombinators.ReadP(底座的一部分)的无 - 非常快速和容易的东西。特别是当Parsec看起来过度杀伤力时。

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

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

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

Attoparsec赢得了性能和内存占用,但Parsec提供了更好的错误报告并且具有更完整的文档。