我正在为一个主要用 Scala 编写的应用程序编写表达式解析器。我已经在 Scala 中构建了 AST 对象,现在需要编写解析器。我听说过 Scala 的内置解析器组合器,也听说过 ANTLR3,我想知道:哪个会提供更好的性能和更易于编写代码?到目前为止:
ANTLR 专业人士
- 知名
- 快速
- 外部 DSL
- ANTLRWorks(用于解析器语法调试/测试的出色 IDE)
ANTLR 缺点
- 基于 Java(Scala 互操作可能具有挑战性,有经验吗?)
- 在运行时需要大量依赖
解析器组合专家
- Scala 的一部分
- 少了一个构建步骤
- 不需要运行时依赖;例如已经包含在 Scala 的运行时库中
解析器组合器的缺点
- 内部 DSL(可能意味着执行速度较慢?)
- 没有 ANTLRWorks(提供出色的解析器测试和可视化功能)
有什么想法吗?
编辑:这个表达式解析器解析代数/微积分表达式。最终确定后,它将在适用于 Android 的应用 Magnificalc 中使用。
最佳答案
Scala 的解析器组合器效率不高。他们不是被设计成的。它们非常适合用相对较少的输入完成小任务。
所以这真的取决于您的要求。 ANTLR 不应该有任何互操作问题。从 Java 调用 Scala 可能会很麻烦,但从 Scala 调用 Java 几乎总是可行的。
关于java - Scala 解析器组合器与 ANTLR/Java 生成的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6011141/