【问题标题】:How to interact with the compiler in Scala code itself?如何在 Scala 代码本身中与编译器交互?
【发布时间】:2012-01-16 10:03:44
【问题描述】:

我想知道除了正常的“在命令行上调用它来编译我的源代码”之外,还有多少种方法可以与 Scala 编译器进行交互。

有什么方法可以解析代码、构建抽象语法树或使用库在运行时编译代码吗?

【问题讨论】:

标签: scala compiler-construction programming-languages compilation abstract-syntax-tree


【解决方案1】:

前段时间我使用(现已弃用)scala.tools.nsc.Interpreter 类来加载、修改和 -- 惊喜! -- 在运行时解释 Scala 代码。如果您想在您的代码和解释代码之间交换值,请查看其bind 方法。它还有一个compileSources 和一个compileString 方法,但到目前为止我还没有使用其中一个。我也不知道如何使用这个(或其他东西)来获取 AST。

另请参阅:What is the purpose of the scala.tools.nsc package?nsc package scaladoc

更新:这应该回答 AST 问题(从 2009 年开始,可能已过时):Scala AST in Scala

【讨论】:

    【解决方案2】:

    我过去通过创建一个新的 CompilerCommand 实例来解析命令行参数,更重要的是,通过扩展令人恐惧的 Global 类来做到这一点。

    通过覆盖computeInternalPhases 方法,您可以只使用编译器的某些阶段(例如,最多refchecks,仅将其用作解析器/类型检查器),并且您可以添加自己的阶段(插件)作为你会期望的。当然也可以一路生成类文件。

    所以是的,这绝对是可能的。毕竟编译器本身也是运行在JVM上的。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-28
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-10
        相关资源
        最近更新 更多