2009-11-24 31 views
15

¿Hay una biblioteca de Scala que analice Scala y cree un árbol de sintaxis abstracto (AST)?Scala AST en Scala

Idealmente estoy interesado en una biblioteca de Scala. Plan B sería una biblioteca de Java.

(Sé que podría aprovechar la EBNF de la Scala Syntax Summary.)

Respuesta

8

yo creo que la mejor manera de acceder a la AST es un plugin con compilador. Debe leer un soft introduction antes de diving in deep.

+1

La Scala plugin del compilador parece prometedor. – AWhitford

0

No está seguro acerca de las soluciones de Scala puros, pero si ves que necesitas para poner en práctica el plan B, puede empezar por el control de ANTLR o Rats!

2

No se puede construir un AST para la Scala de la gramática solo. Hay implicaciones que considerar, y, para considerarlas, existe el tipo de referencia a considerar.

Sin embargo, puede llamar al compilador en sí; después de todo, es solo un archivo jar. Scala 2.8, en particular, tiene bastantes ganchos para otros programas: trabajo de Miles Sabin, que está haciendo esto precisamente para que el plugin de Eclipse para Scala pueda aprovechar el compilador de esa manera.

Le sugiero que vaya a la lista de correo de Scala Tools y se ponga en contacto con la gente de allí.

+3

Puede crear un AST para Scala sin tener en cuenta los aspectos semánticos del lenguaje, como los tipos y las implicaciones. Es cierto que para una gran cantidad de aplicaciones desearía tenerlas en cuenta, pero no necesariamente todas. –

+1

Puedo imaginar los propósitos de querer un AST por lo que el usuario escribió, así como uno que refleje las implicaciones y cualquier otro factor que contribuya al AST preciso utilizado en última instancia para la generación de código. –

+0

Inicialmente, pensaba que no me interesaba una interpretación verdaderamente semántica del código scala, pero su punto acerca de las implícitas y la inferencia tipográfica es bueno ... Creo que definitivamente necesitaré lo último, así que miro más de cerca al El compilador de Scala parece prudente. – AWhitford

4

Unos programas de análisis existentes:

Tenga cuidado si se utiliza el EBNF de la especificación, hay al parecer:

"desajustes entre el apéndice y la gramática en línea, y los desajustes entre el lenguaje compilado por scalac (y utilizado en la Scala fuentes) y el lenguaje reclamado por la gramática "- Scala Trac bug #1826.

+0

Su consejo sobre el EBNF es útil. Esto significa que JavaCC, ANTLR, etc. probablemente sea un desafío. Los compiladores IDE tienden a tener sus propios matices porque están interesados ​​en la compilación en tiempo real, que no es algo que necesito. – AWhitford