Haskell Parser组合器

Woj*_*ilo 10 parsing haskell parsec parser-combinators attoparsec

我正在阅读很多关于Haskell Parser Combinators的内容,并发现了许多主题,如:

但是,所有这些话题比较Parser CombinatorsParser Generators.

我想问你哪个Parser Combinator最适合以下条件:

  1. 我希望能够很好地控制错误(包括错误恢复)和用户的消息
  2. 我希望能够用一小部分文本(不是一次整个文件)来提供解析器
  3. 我希望能够很好地重新设计语法(我目前正在开发语法,所以"很好的工作"非常重要"
  4. 最终的解析器应该很快(性能很重要,但不如第1-3点那么多).

我发现,最流行的解析器组合器是:

Vic*_*ith 3

我想说肯定会选择秒差距,原因如下:

Attoparsec 的设计目的是快速使用,但缺乏对 Parsec 错误消息的强大支持,因此这是您第一点的胜利。

我使用解析器组合器库的经验是,无论是在 GHCi 中还是在测试中测试解析器的各个部分都非常容易,因此它们都确实满足了第二点。最后,Attoparsec 和 Parsec 的速度相当快。

最后,秒差距存在时间最长,并且具有许多有用和高级的功能。这意味着总体可维护性将变得更加容易,秒差距中有更多示例,并且更多人熟悉它。uu-parsinglib 绝对值得花时间去探索,但出于这些原因,我建议首先熟悉 Parsec 是更好的课程。(Alex 也是最推荐与 Parsec 或其他方式一起使用的词法分析器,但我自己没有使用过。)