Construyendo el compilador Parte VI: Generación de código intermedio

 HOLA!

Hoy, veremos un poquito de teoría.

En el blog pasado, les comenté que terminé mi análisis semántico.

Pues, noticias noticias. Tuve errores, y ya fueron corregidos.


El codigo intermedio

Esta etapa es "opcional". 
Primero, el código intermedio es una forma más sencilla de pasar del análisis semántico al lenguaje target (el lenguaje assembler que usaremos). Al estar en una etapa media entre estos dos bloques, permite que mediante un estándar, podamos transformar nuestro análisis semántico en algo que sea más facil de traducir a assembler.
El lenguaje escogido para esta fase será: ARM

Acá una imagen de en que parte del compilador vamos.



Otra cosa interesante, es q ue esta es parte del "front end". Por lo tanto, al tener varios lenguajes de fornt end y uno de back end, es posible pasar de muchos apocos, para propósitos de escalamiento esto es bueno. 
Es como babel.

Ya tenido nuestro lenguaje tarjet (ARM) ahora es de considera cómo el código intermedio se representa.

Representación del código intermedio 

Esto se hace mediante un término llamado: código de tres direcciones

Adjunto imagen

Tiene la siguiente estructura:
<addr> = <addr>  <op> <addr>


Donde <addr> puede ser una variable, una constante o temporales.
Mediante el código de tres direcciones, es posible representar TODO tipo de expresiones que podamos toparnos en un lenguaje de programación.

Una vez entendido esto, debemos ver QUÉ vamos a traducir con este codigo de tres direcciones. 

Instrucciones que se traducirán a código intermedio

Algunas son



Cada una tiene una forma distinta de representarse a nivel de codigo, por ende será de suma importancia conocer de antemano distintos algoritmos basados en producciones y reglas semánticas que faciliten la transición del codigo que manejamos en DECAF al de tres direcciones.



Finalmente. Debemos ver si vamos a trabajar con labels symbolicas o con posiciones de números.




Esto es decisión personal, yo usaré POSITION NUMBERS. Me gustan más en lo personal. 


Hasta acá llegaremos en teoría el dia de hoy.
La siguiente vez que nos veamos, seguramente será cuando ya esté implementando esta parte del código intermedio a nivel de código. 


ADIOS!

















Comentarios

Entradas populares de este blog

Construyendo el compilador Parte I: ANTLR V4 (ya van 4 versiones, increible), café y una miradita a los parser y lexer generados con Java

Construyendo el compilador Parte V: Finalizando el analizar Semántico

Construyendo el compilador Parte III: ANTLR V4, Listener vs Visitor y la tabla de Símbolos