1

scala.tools.nsc.interactive.Globalは、parseTree方法があります。代わりにを使用して、ファイルから AST を取得したいと思いますscala.tools.nsc.Global。定義を見て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]   ...

コンパイラを正しく初期化するには? Scala バージョン 2.11.7。

4

1 に答える 1

1

scala-users に関する Li Haoyi の回答:

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

val tree = compiler.newUnitParser(new compiler.CompilationUnit(source)).parse()
于 2015-12-11T07:01:21.203 に答える