Scala解析器组合器与ANTLR/Java生成的解析器?

Nat*_*oos 25 java parsing scala parser-combinators antlr3

我正在为一个主要用Scala编写的应用程序编写表达式解析器.我在Scala中构建了AST对象,现在需要编写解析器.我听说过Scala的内置解析器组合器,以及ANTLR3,我想知道:哪个可以提供更好的性能和编写代码的简易性?至今:

ANTLR专业人士

  1. 知名
  2. 快速
  3. 外部DSL
  4. ANTLRWorks(用于解析器语法调试/测试的出色IDE)

ANTLR缺点

  1. 基于Java(Scala互操作可能具有挑战性,任何经验?)
  2. 在运行时需要很大的依赖关系

Parser combinator专业人士

  1. Scala的一部分
  2. 少一个构建步骤
  3. 不需要运行时依赖; 例如,已经包含在Scala的运行时库中

解析器组合器缺点

  1. 内部DSL(可能意味着执行速度较慢?)
  2. 没有ANTLRWorks(提供很好的解析器测试和可视化功能)

有什么想法吗?

编辑:此表达式解析器解析代数/微积分表达式.它将在最终确定的Android应用程序Magnificalc中使用.

Eri*_*cht 16

Scala的解析器组合器效率不高.它们的设计并非如此.它们适用于输入相对较少的小任务.

所以它真的取决于你的要求.ANTLR不应该存在任何互操作问题.从Java调用Scala可能会变得毛茸茸,但从Scala调用Java几乎总是有效.


sul*_*an- 6

我不担心解析器组合器的性能限制,除非您计划解析几页长的代数表达式.Programming Scala一书确实提到了解析器组合器的更高效实现是可行的.也许有人会找到时间和精力来写一个.

我认为使用ANTLR你会谈到两个额外的构建步骤:ANTLR编译为Java,你需要将Scala和Java编译为字节码,而不仅仅是Scala.