首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与使用解析器组合子相比,使用像happy这样的解析器生成器有什么优势?

与使用解析器组合子相比,使用像happy这样的解析器生成器有什么优势?
EN

Stack Overflow用户
提问于 2011-09-01 18:27:24
回答 5查看 4.9K关注 0票数 27

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-01 21:18:08

外部与内部数字用户线路

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

优先级规则

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

静态检查

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

票数 24
EN

Stack Overflow用户

发布于 2011-09-01 19:06:56

这是一个传统的决定:我是使用lex/yacc (愉快的)还是我自己编写(主要是递归下降的)解析器,只是parsec库就像是一个DSL来做正确的事情。

如果有使用yacc/lex方法的经验,使用happy将是一个较小的学习曲线。

票数 4
EN

Stack Overflow用户

发布于 2011-09-01 19:13:37

在我看来,Parsec隐藏了大部分令人讨厌的语法细节,让您可以更直观地编写解析器。如果你想从一开始就学习这些东西,可以使用像Happy这样的解析器生成器(甚至可以自己实现一个)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7269025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档