Necesito crear un convertidor de Scala a otro idioma. Estoy buscando scala code parser que convierte el código en el árbol de sintaxis sin compilación.Analizador de código de Scala (no compilador)
Respuesta
Permítanme hacerlo simple: no hay forma de generar un AST del programa Scala con el analizador solo. Es absolutamente necesario ejecutar typer, y eso significa tipo de inferencia e implícita.
Después de eso, puede hacer lo que quiera. Pero estas primeras pocas fases del compilador (cuatro en las versiones más recientes, contando el typer) son necesarias.
Coincidentemente, esas son las fases ejecutadas por el presentation compiler, que es utilizado por el Scala IDE for Eclipse. Me parece que esta podría ser la interfaz perfecta para ti.
ENSIME también uses it, que parece ser la mejor fuente de información al respecto, y también puede que desee echar un vistazo a la herramienta Scala Refactoring, ya que utiliza el compilador de AST también.
Finalmente, puedes intentar compilar el código con -Ybrowse:typer
para ver el árbol después de typer. Use -Xshow-phases
para visualizar las fases existentes, o -Xprint:typer
para imprimir la "fuente" después de typer (o cualquier otra fase).
- 1. ¿Cómo interactuar con el compilador en el código de Scala?
- 2. Analizador de código HTML
- 3. ¿Cómo puedo ver en qué código de [Java/Scala?] El compilador Scala reescribe el código Scala original
- 4. compilador Brainfuck en scala
- 5. Analizador que acepta identificadores Scala?
- 6. cómo hacer analizador Scala falle
- 7. Compilador de buffers de protocolo Scala
- 8. EBNF a Scala combinador analizador
- 9. El compilador Scala dice código inalcanzable, ¿por qué?
- 10. Scala SBT: Scala versión del compilador
- 11. Analizador de código fuente Java
- 12. Buscando un analizador de código C#
- 13. Analizador-analizador Scala insensible a las mayúsculas y minúsculas
- 14. Caché del compilador para Scala?
- 15. ¿Qué complementos de compilador scala están disponibles?
- 16. Analizador de código estático: no administrado C++ Visual Studio 2008
- 17. ¿Qué es un buen compilador compilador de C#/generador de analizador?
- 18. Lexer/analizador para generar código Scala a partir de la gramática BNF
- 19. ¿Dónde almacena el compilador Scala ASTs?
- 20. Analizador de código abierto OpenGL para Linux
- 21. Scala - Creación de un analizador básico de funciones dinámicas
- 22. Analizador de código C para .NET
- 23. C# código abierto analizador NMEA
- 24. ¿Pueden los analizadores del analizador de scala analizar archivos binarios?
- 25. Código analizador de código abierto para el marcado Mediawiki
- 26. ejemplo no analizador de `Control.Applicative.optional`
- 27. Scala: ¿Allanar el parseresult (~) del analizador de combinadores en List?
- 28. ¿Está el reentrante del compilador Scala?
- 29. código Scala captura de confusión
- 30. únicos anidada Scala de código Java
Creo que su respuesta básica es engañosa. Si tienes una gramática, puedes generar un AST; después de todo, las gramáticas y los árboles (sintaxis) tienen una sintaxis pura. Estoy de acuerdo, a menudo necesitas información de tipo para interpretar el AST de manera útil. (No me opongo a tus consejos sobre maquinaria útil). –
@Ira. Supone que el lenguaje puede _parsed_ con una gramática. Perl, por ejemplo, [no puede] (http://www.perlmonks.org/?node_id=663393). En Scala, el jurado todavía está fuera: algunas personas han intentado construir un analizador basado en las especificaciones EBNF, pero descubrieron que no funciona del todo. Tal vez Scala se pueda analizar a partir de una gramática, pero, en la práctica, cualquier tipo de análisis sería _inútil_ sin tipeo, ya que parte de ese código se proporciona implícitamente en esa fase. –
Esta misma historia se ha contado sobre C++, también. Está mal. Lo que es cierto es que algunos de los análisis pueden ser ambiguos localmente. Incluso pueden ser muy ambiguos, localmente. Sobre todo lo que esto significa es la tecnología de análisis que la gente usa (LL (k) y LALR (1)) es bastante mala en esto. Eso no significa que la tecnología de análisis correcta sea pésima. Consulte el análisis de GLR, que maneja dichas ambigüedades con aplomo. Analizamos C++ de esta manera a pesar de los teoremas populares sobre que es "difícil". Estamos trabajando en un analizador Perl, pero está en segundo plano. Tengo problemas para creer que Scala es tan desagradable como Perl. –