복붙노트

[SCALA] 프로그래밍 방식으로 스칼라 컴파일러를 호출하는 방법?

SCALA

프로그래밍 방식으로 스칼라 컴파일러를 호출하는 방법?

내 스칼라 코드가 입력으로 스칼라 수업을 컴파일하고 클래스를 실행합니다. 어떻게 프로그래밍 스칼라 컴파일러를 호출 할 수 있습니다? 나는, 즉 2.10 최신 스칼라 버전을 사용하는 것입니다.

해결법

  1. ==============================

    1.나는 스칼라 컴파일러를 호출하는 적절한 방법 개요에 설명 반사 API를 통해 그 일을 생각합니다. 특히, '기호, 나무, 그리고 유형'도구 상자를 사용하여 트리에 문자열을 구문 분석에 대한 회담 도구 상자 섹션에 구문 분석을 통해 트리 만들기. 할 수 있습니다 후 평가 후면 호출 () 등

    나는 스칼라 컴파일러를 호출하는 적절한 방법 개요에 설명 반사 API를 통해 그 일을 생각합니다. 특히, '기호, 나무, 그리고 유형'도구 상자를 사용하여 트리에 문자열을 구문 분석에 대한 회담 도구 상자 섹션에 구문 분석을 통해 트리 만들기. 할 수 있습니다 후 평가 후면 호출 () 등

    Shyamendra Solanki 쓴하지만, 현실에서 당신은 더 많은 작업 수행 얻을 scalac의 세계를 구동 할 수있다. 내가 예를 들어 통합 테스트를 수행하는 샘플 코드로 생성 된 코드를 컴파일 할 수 있도록 내가 CompilerMatcher를 작성했습니다.

    당신은 코드를 평가하기 위해 REPL의 IMain를 호출 할 수 있습니다 (당신이 뭔가를하려는 경우이 또한 CompilerMatcher 위에서 사용할 수 있는지 스칼라 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")
      }
    

    이는 2009 년 조쉬 Suereth 백에 의해 스칼라 통역 게시물을 포함하기에 증명되었다.

  2. ==============================

    2.이 클래스는 컴파일 (파일 test.scala에서) 실행하기

    이 클래스는 컴파일 (파일 test.scala에서) 실행하기

    class Test {
    
       println ("Hello World!")
    
    }
    

    (같은 디렉토리에) // compileAndRun.scala

    import scala.tools.nsc._
    import java.io._
    
    val g = new Global(new Settings()) 
    
    val run = new g.Run  
    
    run.compile(List("test.scala"))  // invoke compiler. it creates Test.class.
    
    val classLoader = new java.net.URLClassLoader(
        Array(new File(".").toURI.toURL),  // Using current directory.
        this.getClass.getClassLoader)
    
    val clazz = classLoader.loadClass("Test") // load class 
    
    clazz.newInstance  // create an instance, which will print Hello World.
    
  3. from https://stackoverflow.com/questions/20322543/how-to-invoke-the-scala-compiler-programmatically by cc-by-sa and MIT license