首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Scala中的Packrat解析器

理解Scala中的Packrat解析器
EN

Stack Overflow用户
提问于 2014-06-16 16:21:07
回答 1查看 378关注 0票数 1

DSL在行动中演示了在与预测解析器一起使用alternation时存在的一个潜在问题--慢度

代码语言:javascript
复制
Predictive parsers are fast and use linear time parsing, but a naïve implementation
of backtracking parsers can quickly degenerate to exponential time parsing. 

lazy val exp = exp ~ ("+" ~> term) |
               exp ~ ("-" ~> term) |
               term

Packrat parsers can help solve this problem of redoing the
same computation using the technique of memoization. 

如果在上面的示例中,对我的expterm解析器进行了懒惰的计算,即lazy val ...,那么这是否意味着我的解析器是一个packrat解析器?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-16 21:39:37

不,标记它们lazy val并不能使它们成为打包解析器。使它们成为packrat解析器的是底层实现。如果您已经将PackratParsers混合到您的Parser中,那么您将使用packrat解析器。基本的区别在于,packrat解析器缓存已经计算过的值(回忆录),以防止重复工作。看看https://github.com/scala/scala/blob/v2.10.4/src/library/scala/util/parsing/combinator/PackratParsers.scala中的代码。

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

https://stackoverflow.com/questions/24248126

复制
相关文章

相似问题

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