2.2 Representaciones de código Intermedio
2.2 Representaciones de código Intermedio
En el proceso de traducir un programa fuente a código destino, un
compilador puede construir una o más representaciones intermedias, las cuales
pueden tener una variedad de formas. Los árboles sintácticos son una forma de
representación intermedia; por lo general, se utilizan durante el análisis
sintáctico y semántico.
Después del análisis
sintáctico y semántico del programa fuente, muchos compiladores generan un
nivel bajo explícito, o una representación intermedia similar al código
máquina, que podemos considerar como un programa para una máquina abstracta.
Esta representación intermedia debe tener dos propiedades importantes: debe ser
fácil de producir y fácil de traducir en la máquina destino.
Existe una forma
intermedia llamada código de tres direcciones, que consiste en una secuencia de
instrucciones similares a ensamblador, con tres operandos por instrucción. Cada
operando puede actuar como un registro. La salida del generador de código
intermedio consiste en la secuencia de código de tres
direcciones.
t1 = inttofloat(60)
t2 = id3 *
t1
t3 = id2 + t2
id1 = t3
Hay varios puntos que vale la pena mencionar sobre las
instrucciones de tres direcciones. En primer lugar, cada instrucción de
asignación de tres direcciones tiene, por lo menos, un operador del lado
derecho. Por ende, estas instrucciones corrigen el orden en el que se van a
realizar las operaciones; la multiplicación va antes que la suma en el programa
fuente. En segundo lugar, el compilador debe generar un nombre temporal para
guardar el valor calculado por una instrucción de tres direcciones. En tercer
lugar, algunas "instrucciones de tres direcciones" como la primera y la
última en la secuencia anterior, tienen menos de tres operandos.
Comentarios
Publicar un comentario