10

我阅读了很多有关 Haskell Parser Combinators 的内容,发现了很多主题,例如:

但所有这些主题都Parser CombinatorsParser Generators.

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

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

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

4

2 回答 2

3

我会说肯定会选择 Parsec,原因如下:

Attoparsec 旨在快速使用,但缺乏对您在 Parsec 中获得的错误消息的强大支持,因此这是您的第一点的胜利。

我使用解析器组合器库的经验是,无论是在 GHCi 中还是在测试中,测试解析器的各个部分都非常容易,因此所有这些都真正满足了第二点。最后,Attoparsec 和 Parsec 非常快。

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

于 2013-08-05T16:23:34.697 回答
3

如果有人发现这个问题,我会在这里发布我的答案。当前的答案已经过时了。

最好使用megaparsec包作为解析器组合库。这是一个现代化的生产就绪库。它README.md包含与其他解析器组合库的出色比较:

于 2018-04-02T12:04:00.617 回答