7

Estoy tratando de aprender a construir un compilador simple como hobby. Me estoy dirigiendo a la máquina virtual de Java.Convertir el árbol de sintaxis abstracto en código de bytes

He escrito una gramática simple usando el plugin ANTLR para Eclipse.

Alguien me dijo que hay algo conocido como un nodo de método en el AST generado por Antlr, y que tiene que ser llamado. Estoy planeando usar ASM para generar el bytecode. Entonces, ¿cuál es el nodo de método y cómo lo llamo desde ASM y lo hago visitar las instrucciones del método?

También sobre el analizador semántico de un compilador. ¿Debería escribirse manualmente o hay generadores para ello?

Respuesta

3

Hace muchas preguntas no relacionadas aquí. Dependiendo del idioma que defina, puede haber un nodo de método en su idioma o no habrá ninguno, por ejemplo, si su lenguaje se compila en un método main(String[]) incondicionalmente.

Existen múltiples enfoques para transformar un AST a un idioma de destino. En general, no se generaría código directamente, sino que se generaría un AST para su plataforma de destino y se generaría un código de impresora bonito a partir de él, utilizando un treewalker.

El análisis semántico es la programación de un compilador. Leer y entender la entrada en un nivel sintáctico es el análisis sintáctico. Tendrá que escribir el analizador semántico por su cuenta o no habría escrito ningún compilador. ;-)

Supongo que usa Jasmin para compilar el código de ensamblaje? Un muy buen comienzo sería escribir gramáticas para su lenguaje de entrada y el idioma de destino (Jasmin) y pensar en qué estructuras de entrada rendirían la salida. ¿Cómo se podría escribir un loop for i := 1 to 10 en Jasmin? Solucione pequeños problemas y amplíe su compilador según sea necesario, pero lentamente, probando las transformaciones recién implementadas de manera temprana y exhaustiva.

A muy buena lectura: Let's Build a Compiler, by Jack Crenshaw.

+1

Muchas gracias, me ha dado casi la misma respuesta [stephen chin] (http://steveonjava.com/) recientemente, construyamos un compilador, por Jack Crenshaw parece muy bueno, comenzaré a leerlo. – Gautam

Cuestiones relacionadas