选择Haskell解析器
问题描述:
Haskell有许多开源的parser implementations。 Parsec似乎是文本解析的标准,而attoparsec似乎是二进制解析的流行选择,但除此之外我不太了解。您选择解析器实现时是否遵循特定的决策树?你有没有对图书馆的长处或弱点有所了解?选择Haskell解析器
答
你有几个不错的选择。
对于字符串类型的轻质解析:
对于填料字节串解析,例如的HTTP headers。
对于实际的二进制数据,大多数人使用两种:
主要是问问自己,底层字符串类型是什么?
- 字符串?
- bytestring(严格)?
- bytestring(偷懒)?
- 统一text
这一决定在很大程度上决定了你会使用哪个分析器工具集。
问的第二个问题是:我是否已经有了数据类型的语法?如果是这样,我就可以用得开心
而且很明显自定义数据类型有很多种好现有的解析器:
答
只需添加到唐的职务:就个人而言,我很喜欢Text.ParserCombinators.ReadP(底座的一部分)的无 - 非常快速和容易的东西。特别是当Parsec看起来过度杀伤力时。
字节串版本有一个bytestringreadp库,但它不包含Char8字节串,我怀疑attoparsec在这一点上是更好的选择。
答
我最近将一些代码从Parsec转换到Attoparsec。两者都很有能力。
Attoparsec赢得了性能和内存占用,但Parsec提供了更好的错误报告并且具有更完整的文档。
感谢您的详细解答 – Keith 2010-06-19 22:18:07
非常棒的答案,非常感谢。 – Litherum 2012-03-25 05:57:53