我的理解是创建&在Scala中解析外部DSL(例如表示规则)。我的假设是正确的,DSL只能在运行时解释,但不支持代码生成(如ANTLR)以便存档更好的性能吗?
编辑:更确切地说,我的问题是我是否可以使用内置的Scala工具/库(例如http://www.artima.com/pins1ed/combinator-parsing.html)实现此目的(创建外部域特定语言并生成java / scala代码)。不是在scala中完全自己编写完整的解析器/代码生成器。很明显,您可以使用第三方工具实现此目的,但您必须学习其他内容并拥有其他依赖项。我是实施DSL的新手,所以到目前为止我没有使用外部工具(如ANTLR)以及你可以(通过合理的努力)处理Scala板载的东西。
答案 0 :(得分:0)
我的假设是正确的,DSL只能在运行时解释,但不支持代码生成(如ANTLR)以便存档更好的性能吗?
不,这是错的。可以在Scala中编写一个编译器,毕竟Scala是Turing-complete(即你可以写任何),你甚至不需要需要图灵完整性对于编译器。
使用Scala编写的一些编译器示例包括