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

标签 java parsing scala antlr3 parser-combinators

我正在为一个主要用 Scala 编写的应用程序编写表达式解析器。我已经在 Scala 中构建了 AST 对象,现在需要编写解析器。我听说过 Scala 的内置解析器组合器,也听说过 ANTLR3,我想知道:哪个会提供更好的性能和更易于编写代码?到目前为止:

ANTLR 专业人士

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

ANTLR 缺点

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

解析器组合专家

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

解析器组合器的缺点

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

有什么想法吗?

编辑:这个表达式解析器解析代数/微积分表达式。最终确定后,它将在适用于 Android 的应用 Magnificalc 中使用。

最佳答案

Scala 的解析器组合器效率不高。他们不是被设计成的。它们非常适合用相对较少的输入完成小任务。

所以这真的取决于您的要求。 ANTLR 不应该有任何互操作问题。从 Java 调用 Scala 可能会很麻烦,但从 Scala 调用 Java 几乎总是可行的。

关于java - Scala 解析器组合器与 ANTLR/Java 生成的解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6011141/

相关文章:

java - 椭圆曲线加密

c# - 提高字符串解析性能

scala - 如何在 Scala 编译时检查某个 T 是否为 case 类?

scala - 我们所有的模型类都应该是案例类吗?

java - 对 main() 中的函数进行 JUnit 测试

java - 如何在 android 中的 contentProvider 类中获取 mainactivity.this

在 tomcat 服务器上导入 72MB XAR 文件时出现 java 堆内存不足错误?

python - 如何将 python 代码转换为解析树并返回原始代码?

java - 将 IDL 枚举解析为 Java 枚举

scala - 如何在scala代码中使用系统IP地址?