我目前正在寻找一个词法分析器/解析器,它可以从 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/