问题标签 [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.
scala - 使用标准模式从 CharSequence 中解析日期……
我正在为外部工具的命令行界面编写解析器,并且正在使用 Scala 的解析器组合器库。作为其中的一部分,我需要解析格式EEE MMM d HH:mm:ss yyyy Z的标准日期。
Scala 的解析器组合器是“基于流的”,可以使用 CharSequence 而不是字符串。这让我很难使用JodaTime 中的java.text.DateTimeFormat或DateTimeFormat,因为它们都使用字符串。
到目前为止,我不得不像这样编写自己的正则表达式解析器来解析日期,但我更愿意将使用 JodaTime 完成的工作合并到我的解析器中。我真的不想重新发明轮子。我一直在查看 JodaTime 的源代码,但我不确定为什么它需要使用 Strings 而不仅仅是 CharSequences。我是否缺少某些方面?
parsing - 使用 Scala 解析器组合器解析 CSV 文件
我正在尝试使用 Scala 解析器组合器编写 CSV 解析器。语法基于RFC4180。我想出了以下代码。它几乎可以工作,但我无法让它正确分离不同的记录。我错过了什么?
更新:问题已解决
默认的 RegexParsers 使用正则表达式忽略空格,包括空格、制表符、回车和换行符[\s]+
。上面的解析器无法分离记录的问题就是因为这个。我们需要禁用 skipWhitespace 模式。将 whiteSpace 定义替换为 just[ \t]}
并不能解决问题,因为它将忽略字段中的所有空格(因此 CSV 中的“foo bar”变为“foobar”),这是不希望的。因此,解析器的更新源是
java - 有没有像 Java 的 Scala 一样棒的解析器组合器?
我阅读了关于 Scala 解析器组合器的教程,我想知道 Java 是否有一些“神奇”的东西。我能找到的最好的东西是JParsec。
scala - scala.util.parsing.ast.Binders 应该如何使用?
我目前正在 Scala 中实现一个小型编译器,当我在做上下文分析的组件时,我发现了Binders
包中的特征scala.util.parsing.ast
(我使用的是 Scala 2.9 RC),它记录在案以在解析时启用名称绑定。这听起来很有趣,我在谷歌上搜索了很多,但我仍然不知道如何使用它。虽然我当然可以让我的抽象语法从中派生,Binders
但我不知道如何从那里着手。网上有没有使用的例子?
scala - Scala Parser,为什么“拍<~拍~>拍”不起作用?
尝试一个简单的解析器组合器,我遇到了编译错误。
我想将“Smith, Joe”解析为它的 Name 对象,例如 Name(Joe, Smith)。很简单,我猜。
这是与此相关的代码:
我正在通过
出现编译错误:
我在这里想念什么?
scala - 算术表达式语法和解析器
最近,我正在寻找一种适合算术表达式的语法,但只找到了一些微不足道的语法,pow(..., ...)
例如忽略。然后我自己尝试了它,但有时它并没有像预期的那样工作。例如,我错过了-
在表达式前面允许一元并修复它。也许有人可以看看我目前的方法并改进它。此外,我认为其他人可以利用,因为能够解析算术表达式是一项常见任务。
因此,可以评估以下内容:
有什么改进建议吗?我使用正确的语法还是只是时间问题,直到用户输入无法解析的有效(关于我提供的函数)算术表达式?
(什么是运算符优先级?)
parsing - Scala解析器组合器,行尾失败
我正在尝试在 Scala 中为Icon 编程语言构建一个解释器。现在我正在为它设置一个解析器。
到目前为止我写的代码是:
现在,我的问题是,当我在此输入上运行此代码时:
写(1 到 5)和写(3 到 5)
我得到以下输出:
我添加了打印输出,以查看它是否与 & 运算符匹配。
该代码在其他奇怪的输入上运行良好,例如:
write((if &fail then 3 else 5) to (3 to 5))
所以这似乎是一个与andexp解析器特别相关的问题。
任何帮助将不胜感激,因为我对 Scala 和解析器组合器完全陌生,而且我认为很难找到好的文档。
scala - 如何对 Scala 的解析器组合器结果进行模式匹配
我们有一个解析输入字符串的多线程 RPC 服务器。我们遇到了一个问题,Scala 的解析器组合库不是多线程安全的:Parsers.scala 中的 var lastNoSuccess被任何解析使用。我们在这一行得到一个 NullPointerException
通过创建扩展其中一个解析器的对象来实现解析器的默认方法,但我想按需构造一个解析器,因此每个解析器都有自己的内部状态,所以我使用的是类而不是对象。但是,我无法编译它,因为我需要对结果进行模式匹配:
失败
parsing - 忽略 Scala 组合器解析器中的 C 样式注释
让我的解析器尊重(忽略)C 风格注释的最简单方法是什么。我对这两种评论类型都感兴趣,尽管也欢迎仅针对一种类型的解决方案。
我目前只是在扩展 JavaTokenParsers。
java - Scala 解析器组合器与 ANTLR/Java 生成的解析器?
我正在为一个主要用 Scala 编写的应用程序编写表达式解析器。我已经在 Scala 中构建了 AST 对象,现在需要编写解析器。我听说过 Scala 的内置解析器组合器以及 ANTLR3,我想知道:哪个会提供更好的性能和易于编写代码?至今:
ANTLR 专业人士
- 知名
- 快速地
- 外部 DSL
- ANTLRWorks(用于解析器语法调试/测试的出色 IDE)
ANTLR 缺点
- 基于 Java(Scala 互操作可能具有挑战性,有经验吗?)
- 在运行时需要大量依赖
解析器组合器专家
- 斯卡拉的一部分
- 少一个构建步骤
- 不需要运行时依赖;例如已经包含在 Scala 的运行时库中
解析器组合器的缺点
- 内部 DSL(可能意味着执行速度较慢?)
- 没有 ANTLRWorks(提供了很好的解析器测试和可视化功能)
有什么想法吗?
编辑:这个表达式解析器解析代数/微积分表达式。最终确定后,它将在适用于 Android 的应用 Magnificalc 中使用。