scala - Lexer/parser 从 BNF 语法生成 Scala 代码

标签 scala parsing lexer parser-combinators

我目前正在寻找一个词法分析器/解析器,它可以从 BNF 语法(具有优先级和关联性的 ocamlyacc 文件)生成 Scala 代码。我很困惑,因为我几乎没有发现如何做到这一点。

为了解析,我找到了 scala-bison (我在使用它时遇到了很多麻烦)。所有其他工具都只是导入到 Scala 中的 Java 解析器(例如 ANTLR)。

对于词法分析,我什么也没找到。

我还发现了 Scala 著名的解析器组合器,但是(如果我错了,请纠正我),即使它们相当吸引人,它们也会消耗大量时间和内存,主要是由于回溯

所以我有两个主要问题:

  • 为什么人们似乎只关注 _parser 组合器?
  • 与 Scala 一起使用的最佳词法分析器/解析器生成器建议是什么?

最佳答案

作为 ScalaBison 论文的作者之一,我多次遇到过这个问题。 :-) 我通常在 Scala 中进行扫描时使用 JFlex 。它与 ScalaBison 配合得非常好,我们所有的基准测试都是使用该组合完成的。不幸的缺点是它确实会生成 Java 源代码,因此编译需要一些技巧。我相信John Boyland (论文主要作者)为JFlex开发了Scala输出模式,但我认为还没有公开发布。

为了我自己的开发,我一直在无扫描器解析技术方面进行大量工作。 Scala 2.8 的 Packrat 解析器组合器非常好,但仍然不通用。我已经建立了an experimental library它在解析器组合器框架内实现广义解析。它的渐近界限比传统的解析器组合器要好得多,但实际上恒定时间开销更高(我仍在研究它)。

关于scala - Lexer/parser 从 BNF 语法生成 Scala 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3094025/

相关文章:

scala - 如何从 Spark Executor 获取或创建 Hadoop 客户端

parsing - 我应该在哪里划清词法分析器和解析器之间的界限?

regex - 鉴于我已经实现了基本的正则表达式匹配器,我该如何实现词法分析器?

code-generation - JavaME 的解析器生成器

php - PHP 中正则表达式的解析器?

scala - 使用Gradle 6.2构建Scala 2.13.1时出现问题(使用5.6.2)

scala:创建对象时循环引用?

scala - 如何仅更改 Seq 的一个元素?

php - 我收到解析器错误消息

Python请求Json数据,想将其从excel复制回csv文件