【发布时间】:2018-05-14 23:36:42
【问题描述】:
我想开发一个工具,在 Scala 编译器完成所有繁重工作后对 Scala 程序进行后处理。据我了解,Scala 编译器的不同阶段会在语法糖和 lambda、闭包、模式匹配等高级功能方面逐步简化程序。但是,我注意到所谓的 cleanup 阶段 - 这是代码生成之前的最后一个阶段 - 看起来像 scala,但它不是真正的 scala。
有没有人亲自认识或可以向我指出可以帮助我理解 cleanup 阶段产生的语言的资源?
举个例子,在 cleanup 阶段的输出中,我看到如下内容:
case <synthetic> val x1: Foo$Bar = l;
case9(){
if (...some condition...)
matchEnd8(scala.Predef.Set().empty())
else
case10()
};
我的假设是,这是翻译模式匹配的结果,但据我所知,它看起来不像有效的 scala 语法(我根本不是经验丰富的 Scala 开发人员!)。
我想这一切都归结为:是否可以将 cleanup 阶段的输出转换为一般的有效 - 可编译 - scala 代码?
【问题讨论】:
标签: scala compiler-construction code-translation intermediate-language scala-compiler