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
<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
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.
Comentarios
Publicar un comentario