una representacin intermedia del programa fuente y produce como salida un programa objeto equivalente; Es posible producir o no una fase de optimizacin antes de la generacin de cdigo. Dicha fase intente transformar el cdigo intermedio en una forma de la que se pueda producir cdigo objeto ms eficiente. El cdigo intermedio es un cdigo abstracto independiente de la mquina para la que se generar el cdigo objeto
El cdigo intermedio ha de cumplir dos requisitos importantes: ser fcil de producir a partir del anlisis sintctico
ser fcil de traducir al lenguaje objeto. (Esta fase puede no existir si se genera directamente cdigo mquina, pero suele ser conveniente emplearla.) Ventajas: Permite abstraer la mquina, separar operaciones de alto nivel de su implementacin a bajo nivel. Permite la reutilizacin de los front-ends y back-ends. Permite optimizaciones generales El cdigo objeto es abstrado para una maquina virtual. esta abstraccin ayuda a separar operaciones de alto nivel y realizar dependientes de la maquina. Desventajas: Implica una pasada ms para el compilador (no se puede utilizar el modelo de una pasada, conceptualmente simple). Dificulta llevar a cabo optimizaciones especficas de la arquitectura destino. Suele ser ortogonal a la mquina destino, la traduccin a una arquitectura especfica ser ms larga e ineficiente Hay muchos tipos y estilos de cdigo intermedio:
Formas de cdigo intermedio:
rbol sintctico Notacin Postfija Cdigo de tres direcciones
Permite demostrar que una secuencia de caracteres es una determinada categora sintctica
EJEMPLO t1=2*a t2=b-3 t3=t1+t2 2*a+(b-3) EJEMPLO: 2a*b3-+ La notacin postfija pone el operador al final de los dos operandos Resultado :AB + 5 -
Es una especie de cdigo maquina de la forma general:
x:=y op z
No se permite ninguna expresin aritmtica compuesta, pues solo hay operadores del lado derecho de la proposicin. Expresiones compuestas se descomponen en una secuencia generando elementos temporales.
Consideremos, por ejemplo, un cdigo intermedio de tercetos, llamado as porque en cada una de sus instrucciones aparecen como mximo tres operandos. La sentencia traducida a este cdigo intermedio quedara2: temp1 := inttoreal (2)temp2 := id3 * temp1temp3 := id2 + temp2id1 := temp3 Ejemplo: