我正在为一个主要用 Scala 编写的应用程序编写表达式解析器。我已经在 Scala 中构建了 AST 对象,现在需要编写解析器。我听说过 Scala 的内置解析器组合器以及 ANTLR3,我想知道:哪个会提供更好的性能和易于编写代码?至今:
ANTLR 专业人士
- 知名
- 快速地
- 外部 DSL
- ANTLRWorks(用于解析器语法调试/测试的出色 IDE)
ANTLR 缺点
- 基于 Java(Scala 互操作可能具有挑战性,有经验吗?)
- 在运行时需要大量依赖
解析器组合器专家
- 斯卡拉的一部分
- 少一个构建步骤
- 不需要运行时依赖;例如已经包含在 Scala 的运行时库中
解析器组合器的缺点
- 内部 DSL(可能意味着执行速度较慢?)
- 没有 ANTLRWorks(提供了很好的解析器测试和可视化功能)
有什么想法吗?
编辑:这个表达式解析器解析代数/微积分表达式。最终确定后,它将在适用于 Android 的应用 Magnificalc 中使用。