Ответ 1
ToolBox
Я думаю, что надлежащий способ вызова компилятора Scala делает это через Reflection API, зарегистрированный в Overview. В частности, Дерево Создание через раздел синтаксического анализа на панели инструментов > в разделе "Символы, деревья и типы" говорит о разборе String
в Tree
с помощью ToolBox
. Затем вы можете вызвать eval()
и т.д.
scala.tools.nsc.Global
Но, как писал Шьямендра Соланки, на самом деле вы можете управлять scalac Global
, чтобы сделать больше. Я написал CompilerMatcher, поэтому я могу скомпилировать сгенерированный код с примером кода для выполнения тестов интеграции.
scala.tools.ncs.IMain
Вы можете вызвать REPL IMain
для оценки кода (это также доступно в приведенном выше CompilerMatcher
, если вы хотите что-то, что работает с Scala 2.10):
val main = new IMain(s) {
def lastReq = prevRequestList.last
}
main.compileSources(files.map(toSourceFile(_)): _*)
code map { c => main.interpret(c) match {
case IR.Error => sys.error("Error interpreting %s" format (c))
case _ =>
}}
val holder = allCatch opt {
main.lastReq.lineRep.call("$result")
}
Это было продемонстрировано в вставке сообщения Scala Interpreter Джоша Суэрета в 2009 году.