【问题标题】:Compilation / Code Generation of External Scala DSL外部Scala DSL的编译/代码生成
【发布时间】:2016-08-17 06:27:29
【问题描述】:

我的理解是在 Scala 中创建和解析外部 DSL 非常简单(例如表示规则)。我的假设是否正确,即 DSL 只能在运行时解释,但不支持代码生成(如 ANTLR)以存档更好的性能?

编辑:更准确地说,我的问题是我是否可以使用内置的 Scala 工具/库(例如http://www.artima.com/pins1ed/combinator-parsing.html)来实现这一点(创建外部域特定语言并生成 java/scala 代码)。不是在 scala 中完全自己编写一个完整的解析器/代码生成器。很明显,您可以使用第三方工具来实现这一点,但您必须学习额外的东西并拥有额外的依赖项。我是实现 DSL 领域的新手,所以到目前为止,我对何时使用 ANTLR 之类的外部工具以及你可以(通过合理的努力)用 Scala 板载的东西做些什么没有直觉。

【问题讨论】:

  • 你说的是哪种 DSL? DSL = 领域特定语言,我首先想到的。
  • 既然可以在Java中使用ANTLR,为什么不能在Scala中使用呢?您可以从您的 Scala 代码中调用任何 Java API(它不会像使用专用的 Scala API 那样漂亮)。
  • 我已将我的问题编辑得更准确

标签: scala dsl


【解决方案1】:

我的假设是否正确,即 DSL 只能在运行时解释,但不支持代码生成(如 ANTLR)以存档更好的性能?

不,这是错误的。可以用 Scala 编写编译器,毕竟 Scala 是图灵完备的(即你可以写任何东西),你甚至不需要需要图灵完备对于编译器。

一些用 Scala 编写的编译器示例包括

  • Scala 编译器本身(在其所有变体中,Scala-JVM、Scala.js、Scala-native、Scala-virtualized、Typelevel Scala、废弃的 Scala.NET……)
  • Dotty 编译器
  • 鳞片
  • 斯卡利斯帕
  • ……还有许多其他……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多