parsing - 与使用解析器组合器相比,使用快乐之类的解析器生成器有什么优势?

标签 parsing haskell parser-generator parsec happy

要学习如何编写和解析上下文无关语法,我想选择一个工具。对于 Haskell,有两个大选项:Happy,它从语法描述生成解析器和 *Parsec,它允许您直接在 Haskell 中编写解析器。

两种方法的(缺点)优点是什么?

最佳答案

外部与内部 DSL

Happy 的解析器规范格式是外部 DSL,而使用 Parsec,您可以在定义解析器时使用 Haskell 的全部功能。这意味着您可以编写函数来生成解析器,使用 Template Haskell 等等。

优先规则

使用 Happy,您可以使用 precedences为了简化您的语法,而使用 Parsec 您必须自己正确嵌套语法规则。因此,在 Parsec 中更改运算符的优先级要繁琐得多。

静态检查

Happy 会在编译时警告您语法中的歧义。 (虽然它不能很好地告诉您它们在哪里。)使用 Parsec,您不会收到任何警告,直到您的解析器在运行时失败。

关于parsing - 与使用解析器组合器相比,使用快乐之类的解析器生成器有什么优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269025/

相关文章:

parsing - Julia 解析 CSV

parsing - 最准确的句子分割开源工具是什么?

python - 使用电子邮件数据 0.3.4 使用 Python 3.6 读取 .eml 文件

haskell - Haskell 中可调整大小的 IO 数组

javascript - 这个语法怎么有歧义?

php正则表达式和汉字

模块扩展中的 Haskell 多态性问题

haskell - liftM 与原始复制

parser-generator - PEG 和空格/注释

c - yacc 在归约过程中丢失了值