我阅读了很多有关 Haskell Parser Combinators 的内容,并发现了很多主题,例如:
- Parsec vs Yacc/Bison/Antlr: Why and when to use Parsec?
- Which Haskell parsing technology is most pleasant to use, and why?
- Parsec or happy (with alex) or uu-parsinglib
- Choosing a Haskell parser
- What is the advantage of using a parser generator like happy as opposed to using parser combinators?
但是所有这些主题都将解析器组合器
与解析器生成器
进行比较。
我想问您哪个Parser Combinator
最适合以下条件:
- 我希望能够很好地控制错误(包括错误恢复)和用户消息
- 我希望能够向解析器提供一小部分文本(而不是一次整个文件)
- 我希望能够很好地重新设计语法(我目前正在开发语法,因此“良好的工作状态”很重要”
- 最终的解析器应该很快(性能很重要,但不如第 1-3 点那么重要)。
我发现最流行的解析器组合器是:
最佳答案
我想说肯定会选择秒差距,原因如下:
Attoparsec 的设计目的是快速使用,但缺乏对 Parsec 错误消息的强大支持,因此这是您第一点的胜利。
我使用解析器组合器库的经验是,无论是在 GHCi 中还是在测试中测试解析器的各个部分都非常容易,因此它们都确实满足了第二点。最后,Attoparsec 和 Parsec 非常快。
最后,秒差距存在时间最长,并且具有许多有用和高级的功能。这意味着总体可维护性将变得更加容易,秒差距中有更多示例,并且更多人熟悉它。 uu-parsinglib 绝对值得花时间去探索,但出于这些原因,我建议首先熟悉 Parsec 是更好的类(class)。 (Alex 也是最推荐与 Parsec 或其他方式一起使用的词法分析器,但我自己没有使用过。)
关于parsing - Haskell 解析器组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18028220/