You are on page 1of 21

UNIVERSIDAD CATLICA SEDES SAPIENTIAE

FACULTAD

DE

INGENIERA
DE

ESCUELA ACADMICA PROFESIONAL INGENIERA INFORMTICA GENERACIN

DE CDIGO INTERMEDIO Y OPTIMIZACIN

Monografa que como parte de la asignatura de Lenguaje de Compiladores presentan los alumnos: CERQUIN DAZ, JEAN CARLOS FLORES ROMERO, JOS EDUARDO PAMPA VARA, ELVIS ROMERO VARGAS, BRYAN ANDERSON

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

JULIO, 2011

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Resumen
En esta monografa veremos como traducir las construcciones de los lenguajes de programacin como: las declaraciones, asignaciones y proposiciones de flujo de control a una representacin intermedia. La mayor parte de las traducciones de estas proposiciones se pueden implantar durante el anlisis sintctico utilizando las tcnicas de traduccin vistas en el diseo de esquemas de traduccin dirigido por sintaxis (ETDS).

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

NDICE
INTRODUCCIN.........................................................................................................................................5 1. TIPOS DE REPRESENTACIONES INTERMEDIAS: CDIGO DE 3-DIRECCIONES.......................6 2. CDIGO INTERMEDIO COMO UN ATRIBUTO SINTETIZADO........................................................8 3. GENERACIN DE CDIGO PARA EXPRESIONES Y SENTENCIAS DE CONTROL ..................11 4. OPTIMIZACIN DE CDIGO...................................................................................................................11 CONCLUSIONES.............................................................................................................................................20 5. BIBLIOGRAFA............................................................................................................................................21 5.1. REFERENCIAS BIBLIOGRFICAS.........................................................................................................................21 5.2. REFERENCIAS ELECTRNICAS...........................................................................................................................21

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Introduccin
El proceso de compilacin se compone de dos partes: La parte que depende solo del lenguaje fuente (etapa inicial o frontend): Corresponde con la parte del anlisis (lxico, sintctico y semntico). La parte que depende solo del lenguaje objeto (etapa inicial o backend): Corresponde con la parte de sntesis (generacin de cdigo). En la parte inicial se traduce un programa fuente a una representacin intermedia a partir de la cual la etapa final genera un cdigo objeto. De tal manera que los detalles que tienen que ver con las caractersticas del lenguaje objeto (cdigo ensamblador, cdigo mquina, etc.), la arquitectura de la maquina (nmero de registros, tamao de los tipos de datos, memoria cache, etc.) el entorno de ejecucin (estructura de registros y memoria de la maquina) y el sistema operativo se engloban en la etapa final y se aslan del resto. La generacin de cdigo es la tarea ms complicada de un compilador. Las ventajas de utilizar esta representacin intermedia, independiente de la maquina son: - Se puede crear un compilador para una nueva mquina distinta uniendo la etapa final de la nueva mquina a una etapa inicial ya existente, facilitando la re destinacin. - Se puede aplicar, a la representacin intermedia, un optimizador de cdigo independiente de la mquina. En el siguiente grafico se muestran las dos etapas y como se relacionan entre s a travs de la representacin intermedia.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

1.

Tipos de representaciones intermedias: Cdigo de 3-direcciones


Es una manera linear de representar un grafo de subexpresiones en donde los nombres explcitos corresponden a los nodos interiores del grafo, muy til principalmente a la hora de optimizar. Las instrucciones se representan utilizando cuando mucho un solo operador en la parte derecha de la expresin, es decir, una expresin del tipo "x+y*z" se representara de la manera "t1=y*z y t2=x+t1". El cdigo de tres direcciones se basa en 2 conceptos principalmente en 2 conceptos: direcciones e instrucciones. No se permite ninguna expresin aritmtica compuesta, pues slo hay un operador en el lado derecho. Por ejemplo, x+y*z se debe traducir a una secuencia, donde t1, t2 son variables temporales generadas por el compilador. t1 = yz t2 = x+t1 Las expresiones compuestas y las proposiciones de ujo de control se han de descomponer en proposiciones de este tipo, deniendo un conjunto sucientemente amplio de operadores. Se le llama cdigo de 3-direcciones porque cada proposicin contiene, en el caso general, tres direcciones, dos para los operandos y una para el resultado. (Aunque aparece el nombre de la variable, realmente corresponde al puntero a la entrada de la tabla de smbolos de dicho nombre). El cdigo de tres direcciones es una representacin linealizada (de izquierda a derecha) del rbol sintctico en la que los nombres temporales corresponden a los nodos internos. Como estos nombres temporales se representan en la memoria no se especica ms informacin sobre ellos en este tipo de cdigo. Normalmente se asignarn directamente a registros o se almacenarn en la tabla de smbolos.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Tipos de proposiciones de 3-direcciones


La forma de cdigo de 3-direcciones que hemos visto hasta ahora es insuciente para representar todas las construcciones de un lenguaje de programacin (saltos condicionales, saltos incondicionales, llamadas a funciones, bucles, etc), por tanto es necesario introducir nuevos operadores. El conjunto de proposiciones (operadores) debe ser lo sucientemente rico como para poder implantar las operaciones del lenguaje fuente. Las proposiciones de 3-direcciones van a ser en cierta manera anlogas al cdigo ensamblador. Las proposiciones pueden tener etiquetas simblicas y existen instrucciones para el ujo de control (goto). Una etiqueta simblica representa el ndice de una proposicin de 3-direcciones en la lista de instrucciones. Las proposiciones de 3-direcciones ms comunes que se utilizan son: Nombres: los nombres que se usan en el programa puede aparecer tambin en el cdigo de 3-direcciones, aunque a la hora de implementar se usara un puntero o su entrada en la tabla de smbolos. Una constante: el compilador tiene que poder interactuar con muchos tipos de constantes. Las instrucciones ms bsicas pueden definirse de la siguiente manera: x=y'op'z, donde 'op' es un operador binario aritmtico o una expresin lgica. x='op'y, donde 'op' es una operacin unaria. x=y, donde a x se le asigna el valor de y Goto L, la instruccin con la etiqueta L se ejecutara. If x goto L o if false goto L, se ejecutara la instruccin con la etiqueta L dependiendo de si x es verdadero o falso. If x relop y goto L, se ejecutara la instruccin L dependiendo del operador relacional que se le aplique a x y y Param x y call p, n, donde param x indica que x es un parmetro. Call llama un procedimiento p con un nmero de parmetros n. En el diseo del cdigo intermedio, es necesario escoger un buen conjunto de operadores. Usando el cdigo de 3 direcciones, el compilador puede representar cdigo intermedio y ayudarse en la implementacin mas optima del cdigo final. Las direcciones se pueden definir como: deben tener los suficientes operadores para satisfacer las instrucciones del lenguaje, y que a su vez sean cercanos al lenguaje de mquina. Sin embargo, si se crean demasiadas instrucciones, el optimizados y el generador de cdigo tendrn que trabajar ms para generar el cdigo final. Una proposicin de cdigo de 3-direcciones se puede implantar como una estructura tipo registro con campos para el operador, los operandos y el resultado. La representacin final ser entonces una lista enlazada o un vector de proposiciones. Hay dos formas principales de implementar el cdigo de tres direcciones:

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Implementacin mediante Cudruplas


Una cudrupla es una estructura tipo registro con cuatro campos que se llaman (op, result, arg1, arg2). El campo op contiene un cdigo interno para el operador. Por ejemplo, la proposicin de tres direcciones x = y + z se podra representar mediante la cudrupla (ADD, x, y, z). Las proposiciones con operadores unarios no usan el arg2. Los campos que no se usan se dejan vacos o un valor NULL. Como se necesitan cuatro campos se le llama representacin mediante cudruplas.

Implementacin mediante Tripletas


Para evitar tener que introducir nombres temporales en la tabla de smbolos, se hace referencia a un valor temporal segn la posicin de la proposicin que lo calcula. Las propias instrucciones representan el valor del nombre temporal. La implementacin se hace mediante registros de solo tres campos (op, arg1, arg2). En la notacin de tripletes se necesita menor espacio y el compilador no necesita generar los nombres temporales. Sin embargo, en esta notacin, trasladar una proposicin que defina un valor temporal exige que se modifiquen todas las referencias a esa proposicin. Lo cual supone un inconveniente a la hora de optimizar el cdigo, pues a menudo es necesario cambiar proposiciones de lugar. Una forma de solucionar esto consiste en listar las posiciones a las tripletas en lugar de listar las tripletas mismas. De esta manera, un optimizador podra mover una instruccin reordenando la lista, sin tener que mover las tripletas en s.

2. Cdigo Intermedio sintetizado

como

un

atributo

El cdigo intermedio puede ser considerado como un atributo sintetizado. El cdigo intermedio es visto como una cadena de caracteres y se puede disear un esquema de traduccin dirigido por la sintaxis (ETDS) que genere dicho cdigo al recorrer el rbol de anlisis sintctico en orden postfijo. Consideremos como ejemplo la siguiente gramtica simplificada que genera expresiones aritmticas. Dada la expresin E E1 +E2 se calcula el valor del no-terminal E en un nombre temporal t. Por el momento, se crea un nuevo nombre cada vez que se necesita. Ms tarde veremos un sencillo mtodo para reutilizar los nombres temporales. Cada no-terminal tiene dos atributos: E.lugar, nombre temporal que contendr el valor de E, (t1; t2; : : :). E.cod, serie de todas las proposiciones de cdigo de 3-direcciones que calculan E.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Ambos atributos son sintetizados. La funcin nuevotemp() genera nombres distintos t1, t2, ... cada vez que es llamada. Las llaves indican una instruccin de cdigo de 3-direcciones. El smbolo // representa la concatenacin de los trozos de cdigo.

ETDS para expresiones aritmticas Veamos el ejemplo x = x + 3 + 4. La figura muestra el rbol sintctico. El cdigo de 3-direcciones correspondiente es:

t1 = x + 3 t2 = t1 + 4 x = t2

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Reutilizacin de los nombres temporales


Hasta ahora se ha supuesto que la funcin nuevotemp() genera un nombre temporal cada vez que se necesita un temporal . Sin embargo, los nombres temporales utilizados para guardar valores intermedios de los clculos de expresiones tienen que ser introducidos en la tabla de smbolos para guardar sus valores con el consiguiente aumento de espacio. Los nombres temporales se pueden reutilizar mediante un sencillo mtodo que consiste en llevar una cuenta c, iniciada a cero, de variables temporales. Cuando se utilice un nombre temporal como operando hay que decrementar el valor de c en 1. Siempre que se genere un nuevo nombre temporal se usa el valor del contador (sprintf(simbolo,t %d,c)) y se incrementa el valor de c en 1. Consideremos el ejemplo: x = a * b + c * d - e * f

rbol sintctico para el ejemplo x = a * b + c * d e * f

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 1 0

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

NOTA: este mtodo no es aplicable para temporales que se utilizan ms de una vez. Por ejemplo, al evaluar una expresin en una proposicin condicional. A estos valores hay que asignarles nombres temporales creados con un nombre propio.

3.

Generacin de Cdigo para expresiones y sentencias de control

4.

Optimizacin de cdigo
La optimizacin de cdigo intermedio se puede realizar a: a) Nivel Local: Solo se utiliza la informacin de un bloque bsico para realizar la optimizacin.

b) Nivel Global: Usan informacin de varios bloques bsicos. El termino optimizacin de cdigo es inadecuado ya que no se garantiza el obtener, en sentido matemtico, el mejor cdigo posible atendiendo a maximizar o minimizar una funcin objetivo (tiempo de ejecucin y espacio). El trmino de mejora de cdigo sera el ms apropiado que el de optimizacin. Ahora bien nos enfocaremos bsicamente en la optimizacin de cdigo de tres direcciones, pues son siempre transportables en la etapa final, son optimizaciones independientes de la mquina, por otro lado las optimizaciones a nivel de mquina, como la asignacin de registros y la utilizacin de instrucciones especficas de la mquina, se salen del contexto de este tema. La mayora de los programas emplean el 90 % del tiempo de ejecucin en el 10 % de su cdigo, es por eso que se recomienda identificar las partes de los programas que se ejecutan eficientemente, en la prctica son los lazos internos los mejores candidatos para realizar dichas transformaciones. Adems de la optimizacin a nivel de cdigo intermedio, se puede reducir el tiempo de ejecucin de un programa actuando a otros niveles: A nivel de cdigo fuente y a nivel de cdigo objeto.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 1 1

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Un bloque bsico es una unidad fundamental de cdigo. Es una secuencia de proposiciones donde el flujo de control entra en el principio del bloque y sale al final del bloque. Los bloques bsicos pueden recibir el control desde mas de un punto de programa (Se puede llegar desde varios sitios a una etiqueta) y el control puede salir desde mas de una proposicin (se podra ir a una etiqueta o seguir con la siguiente instruccin. Cuando aplicamos optimizacin dentro de un bloque bsico, solo nos tenemos que preocupar sobre los efectos de optimizacin en los valores de las variables a la entrada del bloque y los valores que tienen a la salida del bloque, que han de ser los mismos que en el cdigo original sin transformar. El algoritmo para particionar un programa se describe a continuacin: 1 Encontrar todas las proposiciones que comienzan el principio de un bloque Bsico: La primera sentencia del programa. Cualquier proposicin del programa que es el objetivo de un salto. Cualquier proposicin que sigue a una bifurcacin. 2 Para cualquier proposicin que comienza un bloque bsico, el bloque Consiste de esa proposicin y de todas las siguientes hasta el principio del siguiente bloque o el final del programa. El flujo de control de un programa puede visualizarse como un grafo dirigido de bloques bsicos, al cual se le llama grafo de flujo. Como ejemplo consideraremos este trozo de cdigo escrito en pseudocdigo que suma los diez primeros nmeros que se muestra en la tabla (a).

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 1 2

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Algunas definiciones previas: Dada una proposicin de 3-direcciones de la forma a = b op c decimos que la proposicin referencia b y c y que define a. Se dice que un nombre en un bloque bsico vive al final del bloque si su valor es referenciado en otro bloque bsico en el programa. Se dice que un nombre est muerto si no es referenciado en el resto del programa. Se presentan algunas transformaciones ms tiles para mejorar el cdigo, las cuales son locales, y se pueden realizar observando solo las proposiciones de un bloque bsico.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 1 3

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Eliminacin de Subexpresiones Comunes:


Si una expresin se calcula ms de una vez, se puede remplazar el valor de la segunda por la primera expresin. Consideremos el siguiente ejemplo:

Observamos (a) que la expresin t3* t1 se calcula 2 veces, por lo tanto podemos escribir el cdigo de la figura (b). Esto solo es posible si los operandos que estn implicados en el clculo de la expresin no han modificado su valor en el intermedio.

Propagacin de Copias:
La propagacin de copias considera las proposiciones de la forma a = b. Despus de esta sentencia sabemos que a y b tienen el mismo valor, por tanto, podemos remplazar cada vez que aparezca a por b, con la esperanza de que podamos remplazar todas las ocurrencias de a hasta que se convierta en un nombre muerto y se pueda entonces eliminar la proposicin de copia. A partir del cdigo anterior podemos eliminar la proposicin de copia t6 = t4. Sustituimos t6 por t4 (vase la figura (a)). Ahora se aprecia de nuevo que hay una subexpresion comn que puede ser eliminada, obteniendo el cdigo que se muestra en la figura (b) y finalmente realizando otra vez la propagacin de copias obtenemos (c).

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 1 4

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Vemos que despus de haber hecho una optimizacin es posible dar paso a aplicar nuevas optimizaciones.

Eliminacin de Cdigo Muerto:


Podemos tener proposiciones que definen un nombre que nunca mas es referenciado, esta muerto. Estas proposiciones pueden entonces ser eliminadas. Dada las proposicin a = b op c, se dice que es cdigo muerto o inactivo si no es referenciada. En general, el cdigo muerto aparece como consecuencia de la propagacin de copias y es esto lo que hace que la tcnica de propagacin de copias sea tan til. Veamos como aplicar esta tcnica al ejemplo anterior en la figura 7.8 (c). Vemos que t6 y t7 no poseen ninguna referencia a partir de su definicin por tanto pueden ser eliminadas. Obtenemos el cdigo que aparece en la figura 7.9. Se ha supuesto que todas las variables no temporales estn vivas, se hace referencia a ellas en el resto del programa.

Transformaciones Aritmticas:
Se pueden hacer uso de transformaciones algebraicas simples para reducir la cantidad de computacin transformando operaciones mas costosas por otras menos costosas. Existen tres tipos de transformaciones algebraicas bsicas:

Calculo Previo de Constantes:


Se trata de calcular a nivel de compilacin el valor previo de constantes en vez de hacerlo en tiempo de ejecucin que retardara la ejecucin de un programa. A esta
F a c u l t a d d e I n f o r m t i c a I n g e n i e r a I n g e n i e r a

P g i n a 1 5

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

optimizacin se le llama calculo previo de constantes (Ing. constant folding). El cdigo de la figura 7.9 puede ser mejorado, dando cabida a la figura 7.10 (a). Haciendo una propagacin de copias y eliminacin de cdigo muerto, tenemos el cdigo de la figura 7.10 (b). Realizando de nuevo un calculo previo de constantes obtenemos 7.10 (c). Y finalmente podemos hacer de nuevo la propagacin de copias y la eliminacin de cdigo muerto para obtener el cdigo de la figura 7.10 (d).

Hemos pasado de 6 preposiciones a 4, eliminando una resta y una divisin en el proceso.

Transformaciones Algebraicas:
Podemos hacer uso de las identidades algebraicas para simplificar el cdigo. Las principales identidades son:

Partiendo de la figura 7.10 (d) podemos obtener el cdigo de la figura 7.11 (a). De nuevo si usamos propagacin de copias y eliminacin de cdigo muerto, obtenemos el cdigo de la figura 7.11 (b).

Reduccin de Intensidad:
En la mayora de las maquinas las operaciones de multiplicacin y divisin, son substancialmente mas costosas que las operaciones de suma y resta, y a su vez las potencias son mas costosas que las multiplicaciones y divisiones, por tanto siempre que sea posible se debe sustituir un operador mas costoso por uno menos
F a c u l t a d d e I n f o r m t i c a I n g e n i e r a I n g e n i e r a

P g i n a 1 6

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

costoso. A esto se le conoce como reduccin de intensidad, las identidades mas comunes son:

Otra transformacin tpica es usar desplazamiento de bits cuando se divide o multiplica por potencias de 2

Empaqueta miento de Temporales:


Se trata de reutilizar los temporales con el fin de ahorrar espacio. Despus de haber optimizado el cdigo es normal pensar que se pueden usar menos temporales y seria conveniente entonces renombrar estos temporales. Supongamos que tenemos una tabla de temporales disponibles, de manera que marcamos si un temporal vive en un cierto punto del bloque bsico. En general, es posible remplazar dos temporales por uno nico si no existe ningn punto donde los dos temporales estn vivos a la vez. Para cada temporal lo remplazamos por el primero en la tabla que esta muerto en todos los lugares en el que el temporal esta vivo. Revisemos el ejemplo de la figura, t4 se define en la primera preposicin y esta vivo en la segunda, entonces lo remplazamos por el primer terminal muerto de la tabla, t1, obteniendo el cdigo de la figura (a). Por otro lado t5, es definido en la segunda preposicin y vivo en la preposicin 3. Esto no interacciona con el temporal t1, que esta vivo solo en la segunda preposicin, por tanto t5 puede ser sustituido por t1. Obteniendo el cdigo (b)

Comparando este cdigo con el original que tenia ocho preposiciones, siete temporales, dos adiciones, una substraccin, cuatro multiplicaciones y una divisin, lo hemos reducido a tres preposiciones que implican dos adiciones y una multiplicacin.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 1 7

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Mejoramiento de los lazos: Traslado de cdigo:


Una modificacin importante que reduce la cantidad de cdigo en un lazo, es el traslado de cdigo. Esta transformacin toma una expresin que produce el mismo resultado independientemente del nmero de veces que se ejecute un lazo y la coloca antes del lazo. Por ejemplo:

Variables de induccin:
Se trata de identificar las variables que permanecen ligadas entre si en la ejecucin, estn relacionadas entre si de forma que conocido el valor de una, se puede obtener la otra. Supongamos el siguiente fragmento de cdigo donde se ha supuesto que los elementos de la matriz ocupan 4 bytes y ya se ha realizado cierta optimizacin.

En este fragmento se aprecia que a [2] en la tabla (b), significa la direccin de a mas un desplazamiento t2. Sabemos que t2 no cambia en ningn momento salvo en t4 = 4*j, por tanto justo despus de la proposicin j = j + 1 se cumple que t2 = 4 * j + 4, y se puede sustituir la asignacin t2 = 4 * j por t2 = t2 + 4, debiendo inicializar el valor de t2 = 0.
F a c u l t a d d e I n f o r m t i c a I n g e n i e r a I n g e n i e r a

P g i n a 1 8

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Siempre que haya variables de induccin se pueden hacer sustituciones de este tipo y eliminar todos menos una.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 1 9

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

Conclusiones

El objetivo del cdigo intermedio es reducir el nmero de programas necesarios para construir traductores, y permitir ms fcilmente la transportabilidad de unas mquinas a otras. Los compiladores generan un cdigo intermedio que es ms parecido al cdigo ensamblador, las operaciones por ejemplo nunca se hacen con ms de dos operandos. El cdigo intermedio es un cdigo abstracto independiente de la mquina para la que se genera el cdigo objeto. Ha de cumplir dos requisitos importantes: ser fcil de producir a partir del anlisis sintctico, y ser fcil de traducir al lenguaje objeto. Hay muchas variaciones en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En lo que hacen mucha optimizacin llamados Compiladores optimizadores , una parte significativa del tiempo del compilador se ocupa en esta fase. Las limitaciones de memoria son un problema mucho menor, y es posible requerir que una unidad de compilacin entera se mantenga en memoria, en especial si se dispone de la compilacin por separado en el lenguaje.

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 2 0

GENERACIN

DE

CDIGO

INTERMEDIO

OPTIMIZACIN

5.

Bibliografa

5.1. Referencias bibliogrficas


Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores:

principios, tcnicas y herramientas, Tema 8, 9, 10 (pag. 478666). Practice, Tema 8, paginas: 398-481. Cdigo Intermedio. Pginas 39-45

Louden, K.C. (1997), Compiler construction: Principles and

Rodrguez Zamora, F., Caldern Varela, J. Generacin de

5.2. Referencias electrnicas.

http://pisuerga.inf.ubu.es/cgosorio/Docencia/PLFolder/UD5/GenCod.pdf http://www.escet.urjc.es/~ci/material/gci.pdf http://antares.itmorelia.edu.mx/~jcolivar/courses/ps207a/ps2_u6.pdf

F a c u l t a d d e I n f o r m t i c a

I n g e n i e r a

I n g e n i e r a

P g i n a 2 1

You might also like