6

我想知道有多少種方式與普通的Scala編譯器進行交互,「在命令行上調用它來編譯我的源代碼」。如何在Scala代碼本身與編譯器交互?

是否有一些方法來解析代碼,構建抽象語法樹或使用庫在運行時編譯代碼?

+0

[可以從實時scala代碼獲取AST的可能的重複嗎?](http://stackoverflow.com/questions/1962925/can-i-get-ast-from-live-scala-code) –

回答

2

前一段時間我用(現在刪除的)scala.tools.nsc.Interpreter類加載,修改和 - 意外! - 在運行時解釋Scala代碼。如果你想交換你的和解釋的代碼之間的值,請看bind方法。它也有一個compileSources和一個compileString方法,但到目前爲止我沒有使用過它們中的一個。我也不知道如何使用這個(或其他)來獲得AST。

另請參閱:What is the purpose of the scala.tools.nsc package?nsc package scaladoc

更新:通過創建一個新CompilerCommand實例解析命令行參數,更重要的是,Scala AST in Scala

1

我在過去做到了這一點:這應該回答AST問題(2009年,可能是過時的)擴展了永恆恐怖類Global

通過重寫computeInternalPhases方法,只能使用編譯器的某些階段(例如,高達refchecks,使用它作爲一個解析器/只typechecker),你可以添加自己的階段(插件)如你所願。你當然也可以一路去產生類文件。

所以是的,這絕對有可能。畢竟,編譯器本身也在JVM上運行。