首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scalas/Haskells解析器组合子足够了吗?

Scalas/Haskells解析器组合子足够了吗?
EN

Stack Overflow用户
提问于 2009-01-28 22:51:28
回答 6查看 1.5K关注 0票数 8

我想知道Scalas/Haskells解析器组合子是否足以解析一种编程语言。更具体地说,是MiniJava语言。我目前正在阅读compiller construction和jflex,而使用java cup是相当痛苦的,所以我想知道我是否可以/应该使用解析器组合子来代替。MiniJava语法非常小。MiniJavas BNF:http://www.cambridge.org/us/features/052182060X/grammar.html

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-08 21:58:58

Scala的解析器是一个回溯解析器,因此它可以处理几乎任何BNF或EBNF。然而,这也意味着,在一些边缘情况下,读取输入可能会非常慢。

如果语法可以更改为LL(1) grammar,则可以使用~!运算符将回溯保持到最小。

语法可能可以转换为LL(1),但正如所写的那样,它不是。例如,可以看到表达式和语句有First/First冲突(请在链接文章的末尾查看)。

无论如何,对于一个学术项目来说,这已经足够了。对于现实生活中的编译器,你需要更快的解析器。

票数 4
EN

Stack Overflow用户

发布于 2009-01-29 02:06:59

我从来没有使用过Scala,但是BNF的存在使得这一切变得很容易。

简单地翻译成哈斯克尔的Text.ParserCombinators.Parsec

代码语言:javascript
复制
goal = do c <- mainClass
          cs <- many classDeclaration
          eof
          return $ c:cs
mainClass = do token "class"
               name <- identifier
               ...

等等。PArrows的转换也很简单。您可能会发现,在解析器之前使用不同的词法分析阶段会更容易一些,但是也可以不使用。

票数 11
EN

Stack Overflow用户

发布于 2009-01-29 20:52:52

我正在使用Scala的解析器组合子来解析PL/SQL代码,它的工作方式非常出色。

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

https://stackoverflow.com/questions/489783

复制
相关文章

相似问题

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