有很多开源的解析器实现 http://hackage.haskell.org/packages/archive/pkg-list.html#cat:parsing我们可以在 Haskell 中使用。Parsec http://hackage.haskell.org/cgi-bin/hackage-scripts/package/parsec似乎是文本解析的标准阿托秒差距 http://hackage.haskell.org/package/attoparsec似乎是二进制解析的流行选择,但除此之外我不知道太多。您在选择解析器实现时是否遵循特定的决策树?您是否了解到有关图书馆的优点或缺点的任何有趣的事情?
您有几个不错的选择。
对于String类型的轻量级解析:
- parsec http://hackage.haskell.org/package/parsec
- 多解析 http://hackage.haskell.org/package/polyparse
对于打包字节串解析,例如的HTTP 标头 http://www.serpentine.com/blog/2010/03/03/whats-in-a-parser-attoparsec-rewired-2/.
- 阿托秒差距 http://hackage.haskell.org/package/attoparsec
对于实际的二进制数据,大多数人使用:
-
binary http://hackage.haskell.org/package/binary-- 用于惰性二进制解析
-
cereal http://hackage.haskell.org/package/cereal-- 用于严格的二进制解析
要问自己的主要问题是底层字符串类型是什么?
- String?
-
字节串 http://hackage.haskell.org/packages/archive/bytestring/0.9.1.7/doc/html/Data-ByteString.html(严格的)?
-
字节串 http://hackage.haskell.org/packages/archive/bytestring/0.9.1.7/doc/html/Data-ByteString-Lazy.html (lazy)?
- unicode text http://hackage.haskell.org/package/text
该决定很大程度上决定了您将使用哪个解析器工具集。
要问的第二个问题是:我是否已经有了该数据类型的语法?如果是这样,我可以使用 happy
- The 快乐的解析器生成器 http://hackage.haskell.org/package/happy
显然,对于自定义数据类型,有各种良好的现有解析器:
- XML
-
haxml http://hackage.haskell.org/package/HaXml
- xml-light http://hackage.haskell.org/package/xml
- hxt http://hackage.haskell.org/package/hxt
- hexpat http://hackage.haskell.org/package/hexpat
- CSV
- 字节串-csv http://hackage.haskell.org/package/bytestring-csv
- csv http://hackage.haskell.org/package/csv
- JSON
- json http://hackage.haskell.org/package/json
- rss/atom
- feed http://hackage.haskell.org/package/feed
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)