问题标签 [parser-combinators]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1789 浏览

scala - 使用标准模式从 CharSequence 中解析日期……

我正在为外部工具的命令行界面编写解析器,并且正在使用 Scala 的解析器组合器库。作为其中的一部分,我需要解析格式EEE MMM d HH:mm:ss yyyy Z的标准日期。

Scala 的解析器组合器是“基于流的”,可以使用 CharSequence 而不是字符串。这让我很难使用JodaTime 中的java.text.DateTimeFormatDateTimeFormat,因为它们都使用字符串。

到目前为止,我不得不像这样编写自己的正则表达式解析器来解析日期,但我更愿意将使用 JodaTime 完成的工作合并到我的解析器中。我真的不想重新发明轮子。我一直在查看 JodaTime 的源代码,但我不确定为什么它需要使用 Strings 而不仅仅是 CharSequences。我是否缺少某些方面?

0 投票
3 回答
14254 浏览

parsing - 使用 Scala 解析器组合器解析 CSV 文件

我正在尝试使用 Scala 解析器组合器编写 CSV 解析器。语法基于RFC4180。我想出了以下代码。它几乎可以工作,但我无法让它正确分离不同的记录。我错过了什么?

更新:问题已解决

默认的 RegexParsers 使用正则表达式忽略空格,包括空格、制表符、回车和换行符[\s]+。上面的解析器无法分离记录的问题就是因为这个。我们需要禁用 skipWhitespace 模式。将 whiteSpace 定义替换为 just[ \t]}并不能解决问题,因为它将忽略字段中的所有空格(因此 CSV 中的“foo bar”变为“foobar”),这是不希望的。因此,解析器的更新源是

0 投票
3 回答
2403 浏览

java - 有没有像 Java 的 Scala 一样棒的解析器组合器?

我阅读了关于 Scala 解析器组合器的教程,我想知道 Java 是否有一些“神奇”的东西。我能找到的最好的东西是JParsec

0 投票
2 回答
249 浏览

scala - scala.util.parsing.ast.Binders 应该如何使用?

我目前正在 Scala 中实现一个小型编译器,当我在做上下文分析的组件时,我发现了Binders包中的特征scala.util.parsing.ast(我使用的是 Scala 2.9 RC),它记录在案以在解析时启用名称绑定。这听起来很有趣,我在谷歌上搜索了很多,但我仍然不知道如何使用它。虽然我当然可以让我的抽象语法从中派生,Binders但我不知道如何从那里着手。网上有没有使用的例子?

0 投票
3 回答
627 浏览

scala - Scala Parser,为什么“拍<~拍~>拍”不起作用?

尝试一个简单的解析器组合器,我遇到了编译错误。

我想将“Smith, Joe”解析为它的 Name 对象,例如 Name(Joe, Smith)。很简单,我猜。

这是与此相关的代码:

我正在通过

出现编译错误:

我在这里想念什么?

0 投票
2 回答
3992 浏览

scala - 算术表达式语法和解析器

最近,我正在寻找一种适合算术表达式的语法,但只找到了一些微不足道的语法,pow(..., ...)例如忽略。然后我自己尝试了它,但有时它并没有像预期的那样工作。例如,我错过了-在表达式前面允许一元并修复它。也许有人可以看看我目前的方法并改进它。此外,我认为其他人可以利用,因为能够解析算术表达式是一项常见任务。

因此,可以评估以下内容:

有什么改进建议吗?我使用正确的语法还是只是时间问题,直到用户输入无法解析的有效(关于我提供的函数)算术表达式?
(什么是运算符优先级?)

0 投票
3 回答
1349 浏览

parsing - Scala解析器组合器,行尾失败

我正在尝试在 Scala 中为Icon 编程语言构建一个解释器。现在我正在为它设置一个解析器。

到目前为止我写的代码是:

现在,我的问题是,当我在此输入上运行此代码时:

写(1 到 5)和写(3 到 5)

我得到以下输出:

我添加了打印输出,以查看它是否与 & 运算符匹配。

该代码在其他奇怪的输入上运行良好,例如:

write((if &fail then 3 else 5) to (3 to 5))

所以这似乎是一个与andexp解析器特别相关的问题。

任何帮助将不胜感激,因为我对 Scala 和解析器组合器完全陌生,而且我认为很难找到好的文档。

0 投票
3 回答
2490 浏览

scala - 如何对 Scala 的解析器组合器结果进行模式匹配

我们有一个解析输入字符串的多线程 RPC 服务器。我们遇到了一个问题,Scala 的解析器组合库不是多线程安全的:Parsers.scala 中的 var lastNoSuccess任何解析使用。我们在这一行得到一个 NullPointerException

通过创建扩展其中一个解析器的对象来实现解析器的默认方法,但我想按需构造一个解析器,因此每个解析器都有自己的内部状态,所以我使用的是类而不是对象。但是,我无法编译它,因为我需要对结果进行模式匹配:

失败

0 投票
1 回答
1917 浏览

parsing - 忽略 Scala 组合器解析器中的 C 样式注释

让我的解析器尊重(忽略)C 风格注释的最简单方法是什么。我对这两种评论类型都感兴趣,尽管也欢迎仅针对一种类型的解决方案。

我目前只是在扩展 JavaTokenParsers。

0 投票
6 回答
5442 浏览

java - Scala 解析器组合器与 ANTLR/Java 生成的解析器?

我正在为一个主要用 Scala 编写的应用程序编写表达式解析器。我已经在 Scala 中构建了 AST 对象,现在需要编写解析器。我听说过 Scala 的内置解析器组合器以及 ANTLR3,我想知道:哪个会提供更好的性能和易于编写代码?至今:

ANTLR 专业人士

  1. 知名
  2. 快速地
  3. 外部 DSL
  4. ANTLRWorks(用于解析器语法调试/测试的出色 IDE)

ANTLR 缺点

  1. 基于 Java(Scala 互操作可能具有挑战性,有经验吗?)
  2. 在运行时需要大量依赖

解析器组合器专家

  1. 斯卡拉的一部分
  2. 少一个构建步骤
  3. 不需要运行时依赖;例如已经包含在 Scala 的运行时库中

解析器组合器的缺点

  1. 内部 DSL(可能意味着执行速度较慢?)
  2. 没有 ANTLRWorks(提供了很好的解析器测试和可视化功能)

有什么想法吗?

编辑:这个表达式解析器解析代数/微积分表达式。最终确定后,它将在适用于 Android 的应用 Magnificalc 中使用。