Representacion de codigo 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 en la figura 2.7 consiste en la
secuencia de código de tres direcciones.
t1 = inttofloat(60)
t2 = id3 * t1
(2.3)
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 (2.1). 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 (2.3) anterior, tienen menos de tres operandos.
Comentarios
Publicar un comentario