- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下 scala 代码无法按预期工作:
import scala.util.parsing.combinator.PackratParsers
import scala.util.parsing.combinator.syntactical.StandardTokenParsers
import scala.util.parsing.combinator.lexical.StdLexical
object Minimal extends StandardTokenParsers with PackratParsers {
override val lexical = new StdLexical
lexical.delimiters += ("<", "(", ")")
lazy val expression: PackratParser[Any] = (
numericLit
| numericLit ~ "<" ~ numericLit
)
def parseAll[T](p: PackratParser[T], in: String): ParseResult[T] =
phrase(p)(new PackratReader(new lexical.Scanner(in)))
def main(args: Array[String]) = println(parseAll(expression, "2 < 4"))
}
我收到错误消息:
[1.3] failure: end of input expected
2 < 4
^
如果我将“表达式”的定义更改为
lazy val expression: PackratParser[Any] = (
numericLit ~ "<" ~ numericLit
| numericLit
)
问题消失了。
问题似乎是,对于“表达式”的原始定义代码,应用了仅由“numericLit”组成的第一条规则,这样解析器确实期望输入随后立即结束。我不明白为什么解析器在注意到输入确实没有结束时不立即回溯; scala PackratParsers 应该是回溯的,并且我还确保按照另一个问题的答案中的建议将“def”替换为“lazy val”。
最佳答案
您看到此行为的原因是交替运算符(竖线)旨在接受第一个成功的替代选项。在您的情况下,numericLit
成功,因此交替永远不会考虑其他替代方案。
对于这种语法规范,您必须小心一个替代项是否可以与另一个替代项的前缀匹配。正如您所看到的,较长的替代方案应该放在替代方案的前面,否则它永远不会成功。
如果您希望较短的替代项仅在其后没有更多输入的情况下才匹配,那么您可以尝试使用 not
组合器来表达该额外条件。但是,如果要在其他构造中使用表达式
,则此方法将导致问题。
关于Scala Packrat解析器 : backtracking seems not to work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24987739/
有时与 一起工作时包鼠 ,在检查 Packrat 库的状态时会得到这种输出: > packrat::status() The following packages are tracked by pac
我之前在 RStudio 中打开了 packrat()。我现在希望完全删除并禁用它(即恢复到安装 Packrat 之前的状态)。我试图在 Rstudio 中找到一个选项来禁用它,但找不到任何东西。因此
我正在尝试将 bool 表达式解析为 Expr树使用来自 scala-parser-combinators 的 Scala 的 Packrat 解析器. sealed trait Expr c
我对 Scala 2.8 中提供的 Packrat 解析器组合器有一些疑问。 不幸的是,除了 Scaladoc PackratParsers 特征描述之外,我找不到任何有关如何使用此新功能的教程,该描
Packrat 理论上是一个很好的工具,但多年来它一直受到启动 RStudio 时大量挂起时间的困扰,开发人员似乎无法解决这个问题。它在我的项目中变得不可持续。有没有人有任何好的替代品来代替 Pack
我正在使用 Packrat 为我的 R 项目设置一个 git 工作流程。每次我packrat::snapshot()我的工作区,文件 packrat.lock随着新包/版本等发生变化,但它也会更改每个
为了更好地了解 Packrat,我尝试查看 the provided implementation附带 the paper (我专注于绑定(bind)): instance Derivs d => M
我正在使用 packrat 构建 R 包。该软件包经过全面测试,并通过本地保存的源文件进行安装 install.packages("myPackage.tar.gz", repos = NULL, t
我在 RStudio 工作。我首先在项目中创建了一个knitr文件,并且编译pdf工作完美。然后,当我处理不同的文件时,我为该项目激活了 packrat。 (后来又停用了) 现在,当我再次尝试 Kni
我正在使用 packrat_0.4.3 并有一些我自己的软件包。 我按照这个介绍创建了一个本地存储库:http://cran.r-project.org/doc/manuals/R-admin.htm
我使用 packrat (v 0.4.8.-1) 创建了一个快照,并捆绑了与相应 R 代码一起使用的 R 包依赖项。我想向其他人提供 R 代码和 packrat 包,使我正在做的工作(包括 R 环境)
我知道并使用 bison/yacc。但在解析世界中,围绕 Packrat 解析有很多议论。 这是什么?值得学习吗? 最佳答案 Packrat 解析是一种为 parsing expression gra
有人可以告诉我如何使用 scala 2.8 packrat-parsing 解析 HTTP 协议(protocol)吗? 我需要将附加的示例 HTTP 响应解析为 ResponseStatusCode
我对 Packrat 有这个问题;当我尝试在 R 上安装随机包时: “无法打开文件'packrat/init.R':没有这样的文件或目录” 我正在使用 ubuntu 16.04,我尝试卸载 r-bas
我的 packrat.src 目录包含多个用于各种库的 *.tar.gz 文件。 例如,broom 的子文件夹如下所示: broom ├── broom_0.4.1.tar.gz └── broom_
许多网站都说 Packrat 解析器可以在线性时间内解析输入。 因此,乍一看,它们比由 yacc 或 bison 工具构建的 LALR 解析器更快。 我想知道在使用通用输入(如编程语言源文件)而不是任
我正在使用 packrat对于我本地的 R 包。我正在尝试添加 MultinomialCI作为依赖项,但我无法将其加载到 packrat .特别是,我不知道如何手动快照。 Rstudio 的包查看器看
我正在开发一个 R 项目 (R studio),该项目需要多个包和 packrat 来管理它们。除了必须安装的 rCharts 之外,我已经能够为所有这些找到 CRAN 或二进制文件: requ
当我从 Rstudio 运行时,我的 Shiny 应用程序运行良好,但在 Shiny 服务器(开源)上运行时,我的 Shiny 应用程序运行良好,这对我来说似乎很奇怪(开源),不使用 packrat
Packrat有一个 use.cache减少软件包安装时间的功能。 该文档提供以下信息: use.cache: Install packages into a global cache, which
我是一名优秀的程序员,十分优秀!