6

Me pregunto cuántas maneras existen para interactuar con el compilador Scala fuera de lo normal "invocarlo en la línea de comandos para compilar mis fuentes".¿Cómo interactuar con el compilador en el código de Scala?

¿Hay alguna manera de analizar el código, crear un árbol de sintaxis abstracto o utilizar una biblioteca para compilar el código en tiempo de ejecución?

+0

posible duplicado de [¿Puedo obtener AST del código scala en vivo?] (Http://stackoverflow.com/questions/1962925/can-i-get-ast-from-live-scala-code) –

Respuesta

2

Hace algún tiempo usé la clase (ahora privada) scala.tools.nsc.Interpreter para cargar, modificar y - ¡sorprender! - interpretar el código de Scala en tiempo de ejecución. Si desea intercambiar valores entre usted y el código interpretado, eche un vistazo a su método bind. También tiene un método compileSources y compileString, pero no usé uno hasta ahora. Además, no sé nada sobre cómo usar esto (o algo más) para obtener el AST.

Vea también: What is the purpose of the scala.tools.nsc package? y nsc package scaladoc.

Actualización: Esta debe responder a la pregunta de AST (a partir de 2009, podría ser obsoleta): Scala AST in Scala

1

he hecho esto en el pasado mediante la creación de un nuevo CompilerCommand ejemplo para analizar los argumentos de línea de comandos y, más importante aún, por extendiendo la siempre aterradora clase Global.

reemplazando el método computeInternalPhases, puede utilizar sólo algunas fases del compilador (por ejemplo, hasta refchecks, para utilizarlo como un analizador/typechecker solamente), y se puede añadir sus propias fases (plugins) como era de esperar . Por supuesto, también puede generar archivos de clase.

Así que sí, definitivamente es posible. Después de todo, el compilador también se ejecuta en la JVM.

Cuestiones relacionadas