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.
No hay comentarios:
Publicar un comentario