1.3.5. Generador de Código Intermedio

Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explicita del programa fuente.

 

Figura 1.10 Traducción de una proposición

Se puede considerar esta representación intermedia 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 al programa objeto.

La representación intermedia puede tener diversas formas. Una forma intermedia es la llamada “código de tres direcciones”, que es como el lenguaje ensamblador para una máquina en la que cada posición de memoria puede actuar como un registro. El código de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como máximo tres operandos. El programa fuente de (1.1) puede aparecer en código de tres direcciones como

temp1:= entareal (60)

                                    temp2:= id3 * tempi1                                    

temp3:= id2 + temp2

id1:= temp3

 (1.3)

Esta representación intermedia tiene varias propiedades. Primera, cada instrucción de tres direcciones tiene a lo sumo un operador, además de la asignación. Por tanto, cuando se generan esas instrucciones, el compilador tiene que decidir el orden en que deben efectuarse las operaciones; la multiplicación precede a la adición en el programa fuente de (1. 1). Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instrucción. Tercera, algunas instrucciones de ‘tres direcciones” tienen menos de tres operandos, por ejemplo, la primera y la última instrucciones de (1.3).