Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用非交互式scala.tools.nsc.Global将文件解析为AST_Scala_Scala Compiler - Fatal编程技术网

使用非交互式scala.tools.nsc.Global将文件解析为AST

使用非交互式scala.tools.nsc.Global将文件解析为AST,scala,scala-compiler,Scala,Scala Compiler,在scala.tools.nsc.interactive.Global中,有一个parseTree方法。我想改为使用scala.tools.nsc.Global从文件中获取AST。看着parseTree定义,我写道 val settings = new Settings settings.embeddedDefaults(getClass.getClassLoader) settings.usejavacp.value = true val reporter = new StoreReporte

scala.tools.nsc.interactive.Global
中,有一个
parseTree
方法。我想改为使用
scala.tools.nsc.Global
从文件中获取AST。看着
parseTree
定义,我写道

val settings = new Settings
settings.embeddedDefaults(getClass.getClassLoader)
settings.usejavacp.value = true
val reporter = new StoreReporter
val compiler: Compiler = new Global(settings, reporter)

val run = new compiler.Run
val tree = compiler.newUnitParser(new compiler.CompilationUnit(source)).parse()
但这会产生

[info]   java.lang.AssertionError: assertion failed: <no phase>: <?>
[info]   at scala.reflect.internal.Symbols$TypeHistory.<init>(Symbols.scala:3667)
[info]   at scala.reflect.internal.Symbols$Symbol.info_$eq(Symbols.scala:1509)
[info]   at scala.reflect.internal.Symbols$TypeSymbol.info_$eq(Symbols.scala:3099)
[info]   at scala.reflect.internal.Symbols$Symbol.setInfo(Symbols.scala:1515)
[info]   at scala.reflect.internal.Mirrors$Roots$RootClass.<init>(Mirrors.scala:307)
[info]   at scala.reflect.internal.Mirrors$Roots.RootClass$lzycompute(Mirrors.scala:321)
[info]   at scala.reflect.internal.Mirrors$Roots.RootClass(Mirrors.scala:321)
[info]   at scala.reflect.internal.Mirrors$Roots$EmptyPackageClass.<init>(Mirrors.scala:330)
[info]   at scala.reflect.internal.Mirrors$Roots.EmptyPackageClass$lzycompute(Mirrors.scala:336)
[info]   at scala.reflect.internal.Mirrors$Roots.EmptyPackageClass(Mirrors.scala:336)
[info]   ...
[info]java.lang.AssertionError:断言失败::
[信息]位于scala.reflect.internal.Symbols$TypeHistory.(Symbols.scala:3667)
[info]位于scala.reflect.internal.Symbols$Symbol.info_u$eq(Symbols.scala:1509)
[info]位于scala.reflect.internal.Symbols$TypeSymbol.info_u$eq(Symbols.scala:3099)
[info]位于scala.reflect.internal.Symbols$Symbol.setInfo(Symbols.scala:1515)
[info]位于scala.reflect.internal.Mirrors$Roots$RootClass.(Mirrors.scala:307)
[info]位于scala.reflect.internal.Mirrors$Roots.RootClass$lzycompute(Mirrors.scala:321)
[信息]位于scala.reflect.internal.Mirrors$Roots.RootClass(Mirrors.scala:321)
[信息]位于scala.reflect.internal.Mirrors$Roots$EmptyPackageClass。(Mirrors.scala:330)
[info]位于scala.reflect.internal.Mirrors$Roots.EmptyPackageClass$lzycompute(Mirrors.scala:336)
[信息]位于scala.reflect.internal.Mirrors$Roots.EmptyPackageClass(Mirrors.scala:336)
[信息]。。。

如何正确初始化编译器?Scala 2.11.7版。

李浩毅对Scala用户的回答:

val run = new compiler.Run()
compiler.phase = run.parserPhase
run.cancel()

val tree = compiler.newUnitParser(new compiler.CompilationUnit(source)).parse()