外部Scala DSL的编译/代码生成

时间:2016-08-17 06:27:29

标签: scala dsl

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

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

1 个答案:

答案 0 :(得分:0)

  

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

不,这是错的。可以在Scala中编写一个编译器,毕竟Scala是Turing-complete(即你可以写任何),你甚至不需要需要图灵完整性对于编译器。

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

  • Scala编译器本身(在所有变体中,Scala-JVM,Scala.js,Scala-native,Scala-virtualized,Typelevel Scala,废弃的Scala.NET,......)
  • Dotty编译器
  • Scalisp
  • Scalispa
  • ......还有很多人......