Sei sulla pagina 1di 13

UNIVERSIDAD ALFREDO PREZ GUERRERO

MATERIA: TRADUCTORES PROFESOR: ING. REN CAETE

TEMA: GENERACIN DE CDIGO OBJETO Y OPTIMIZACIN

ALUMNO: LUIS MORENO NIVEL: 7mo SISTEMAS Y NETWORKING SEMESTRE LECTIVO 2011
1

CONTENIDO
TEMA
Introduccin Generacin de cdigo Objeto y Optimizacin Lenguajes Intermedios Aplicaciones Caractersticas Diseo de un Generador de cdigo Algoritmo para la Generacin de cdigo Bibliografa

PGINA
3 4 7 8 9 10 12 13

INTRODUCCIN
Esta fase del compilador no es en realidad una parte separada del compilador, la mayora de los compiladores generan cdigo como parte del proceso de anlisis sintctico, esto es debido a que requieren del rbol de sintaxis y si este no va a ser construido fsicamente, entonces deber acompaar al analizador sintctico al barrer el rbol implcito. En lugar de generar cdigo ensamblador directamente, 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. Al no generarse cdigo ensamblador el cual es dependiente de la computadora especfica, sino cdigo intermedio, se puede reutilizar la parte del compilador que genera cdigo intermedio en otro compilador para una computadora con diferente procesador cambiando solamente el generador de cdigo ensamblador al cual llamamos back-end, la desventaja obviamente es la lentitud que esto conlleva. La tarea de sntesis suele comenzar generando un cdigo intermedio. El cdigo intermedio no es el lenguaje de programacin de ninguna mquina real, sino que corresponde a una mquina abstracta, que se debe de definir lo ms general posible, de forma que sea posible traducir este cdigo intermedio a cualquier mquina real. 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. Supngase que se tienen n lenguajes, y se desea construir traductores entre ellos. Sera necesario construir n*(n-1) traductores. Sin embargo si se construye un lenguaje intermedio, tan slo son necesarios 2*n traductores.

GENERACIN DE CDIGO OBJETO Y OPTIMIZACIN


La generacin de cdigo data desde la existencia de los primeros compiladores. Hasta la aparicin de los primeros generadores de cdigo comercial u orientado a "usuarios finales"; la generacin de cdigo era exclusividad de programas compiladores especializados. En tiempos ms recientes la generacin de cdigo, gracias al avance de la ingeniera del software, se ha llevado a un nivel diferente; donde se encuentran programas generadores de pantallas, reportes y consultas, estas son herramientas de gran utilidad; pero se debe, en la mayora de los casos, Pagar una gran cantidad de dinero por ellos.

GENERACION DE CDIGO Aqu se hablar de las herramientas generadoras automticas de cdigo para un compilador. Estas herramientas trabajan basadas en un conjunto de reglas; estas reglas definen la traduccin de las instrucciones del lenguaje intermedio al lenguaje de mquina. Para la generacin de cdigo, se busca en las reglas establecidas la proposicin que coincida con la entrada actual; la entrada actual proviene de un rbol. Un ejemplo de esto seria Entonces el compilador recibe una entrada de caracteres, por lo general escrita por el programador; el compilador realiza los anlisis: lxico, sintctico y semntico, para generar seguidamente el cdigo intermedio, el cdigo intermedio se genera con principios de bsqueda de patrones y aplicacin de reglas. Despus se hace la optimizacin del cdigo intermedio; seguidamente se realiza la generacin de cdigo objeto en lenguaje de mquina.

Al colocar un esquema general, en donde se muestre la ubicacin del generador de cdigo construido por el usuario, con respecto a un compilador, el resultado sera el que se muestra en el siguiente cuadro

La ingeniera del software evoluciona cada da; esta evolucin conlleva a la creacin de mtodos mucho ms cmodos, precisos, confiables y rpidos para la creacin de software. Para la creacin de generadores de cdigo se deben considerar los siguientes aspectos: La arquitectura de software para la cual se va ha desarrollar el generador Las caractersticas especficas del lenguaje de programacin para el cual se har el generador. El lenguaje con el que se desarrollar el propio generador Responder los interrogantes: La generacin de cdigo se realizar a partir de modelos como Uml1? La generacin de cdigo se har a partir de las tablas de una base de datos?,Se realizar un generador de cdigo que su resultado sea fragmentos de cdigo que son de uso ms frecuente en el software? Se crear un generador genrico que "genere" cdigo para diferentes lenguajes. Las reglas de utilizacin del generador, en otras palabras, la forma adecuada para que los usuarios del generador obtengan el mayor provecho. En sntesis para crear un generador de cdigo se deben hacer muchas de las tareas que realizan los compiladores; algunas de estas tareas son: la bsqueda de patrones, la escritura de cdigo, el anlisis sintctico, el anlisis lxico y la optimizacin de cdigo. Estas tareas las realiza el desarrollador una vez para una arquitectura especfica. 1 UML. (Unified Modeling Planguage) Lenguaje Unificado de Modelado. Lenguaje grfico, basado en la teora de objetos, para la representacin grfica de un sistema

Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto. La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada "cdigo de tres direcciones" que es como el lenguaje ensamblador de una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. Esta representacin intermedia tiene varias propiedades:

Primera.- Cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones. Segunda.- El traductor debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Tercera.- Algunas instrucciones de "tres direcciones" tienen menos de tres operandos, por ejemplo, la asignacin. Optimizacin de cdigo La fase de optimizacin de cdigo consiste en mejorar el cdigo intermedio, de modo que resulte un cdigo mquina ms rpido de ejecutar. Esta fase de la etapa de sntesis es posible sobre todo si el traductor es un compilador (difcilmente un interprete puede optimizar el cdigo objeto). Hay mucha variacin en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En los que hacen mucha optimizacin, llamados "compiladores optimizadores", una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecucin del programa objeto sin retardar demasiado la compilacin.

LENGUAJES INTERMEDIOS
El trmino viene de su uso en los compiladores, donde un compilador primero traduce el cdigo fuente de un programa, en una forma ms apropiada para las transformaciones de mejora del cdigo (forma usualmente llamada bytecode), como un paso intermedio antes de generar el archivo objeto o el cdigo mquina para una mquina especfica. Una variante del significado de "lenguaje intermedio" se da en esos lenguajes de alto nivel que no soportan o no generan un archivo objeto o cdigo mquina, pero s generan un lenguaje intermedio. Luego ese lenguaje intermedio se transfiere a un compilador que termina de realizar el archivo objeto o el cdigo mquina. Esto se emplea generalmente por cuestiones de optimizacin y portabilidad. Por ejemplo, el compilador de C de GNU que se distribuye con Linux es una versin de una familia de compiladores de C para diferentes mquinas o sistemas operativos: Alpha, AIX, Sun, HP, MS-DOS, etc.. Adems, GNU ha desarrollado un compilador de FORTRAN y otro de Pascal que, al utilizar el mismo lenguaje intermedio, pueden ser portados a todos los sistemas y mquinas en las que ya existe un compilador de C de GNU con relativamente poco esfuerzo. La generacin de cdigo intermedio transforma un rbol de anlisis sintctico (semntico) en una representacin en un lenguaje intermedio, que suele ser cdigo suficientemente sencillo para poder luego generar cdigo mquina. Una forma de hacer esto es mediante el llamado cdigo de tres direcciones. Una sentencia en cdigo de tres direcciones es: A := B op C, donde A, B y C son operandos y op es un operador binario. Tambin permite condiciones simples y saltos. Por ejemplo, para la siguiente sentencia:

WHILE (A > B) AND (A < = 2 * B 5) DO A : = A + B

el cdigo intermedio generado ( cdigo en tres direcciones) ser:


L1 : L2 : IF A > B GOTO L3 T1 : = 2 * B T2 IF L4 : L3 : : = T1 5 A < T2 GOTO L4 (*nivel ms alto que ensamblador*) (*pero ms sencillo que Pascal*) GOTO L2

GOTO L3 A : = A + B GOTO L1 . . . . . . .

APLICACIONES
La importancia practica de lenguaje en la informtica se manifiesta principalmente en el uso cotidiano que hace el profesional informtico de compiladores e intrpretes, consustancial al la gestin y programacin de los sistemas informticos. As pues, un conocimiento acerca del funcionamiento interno de estas herramientas bsicas resulta fundamental. Pero los conocimientos adquiridos en su estudio encuentren aplicacin fuera del campo de la compilacin. Es probable que ocas personas realice o mantenga un compilador para un lenguaje de programacin, pero mucha gente puede obtener provecho del uso de un gran nmero de sus tcnicas para el diseo de software en general. En efecto, entre los campos de la informtica en los que encuentra aplicacin las tcnicas aprendidas en COMPILADORES e INTRPRETES se puede citar lo siguiente: Tratamiento de ficheros de texto con informacin estructurada. Lenguaje como Perl y TEL, o comandos como el sed o egrep de UNIX, incorpora tratamiento de expresiones regulares para la deteccin y/o modificacin de patrones sin texto. Procesadores de texto. Procesadores como vi o Emacs incorporan tambin la posibilidad de efectuar bsquedas y sustituciones mediante expresiones regulares. Existen tambin procesadores (entre ellos los Emacs) capaces de analizar y tratar ficheros de texto de organizacin compleja. Diseo e interpretacin de lenguaje para formateo y texto y descripcin de grficos. Sistema de formateo de texto (como el HTML o el TEX) o para la especificacin de tablas (tbl), ecuaciones (eqn), grficos (postscript), etc. requieren sofisticados microprocesadores. Gestin de base de datos. Las tcnicas que estamos considerando pueden explotarse tanto en la exploracin y proceso de ficheros de informacin como en la realizacin de la interface de usuario. Traduccin de formato de fichero. Calculo simblico. Reconocimiento de formas. Las tcnicas de anlisis sintctico son ampliamente utilizadas en la deteccin de patrones en texto, el reconocimiento automtico del habla o la visin por computador.

CARACTERSTICAS
Su principal ventaja es la portabilidad, pues el mismo cdigo puede ser ejecutado en diferentes plataformas y arquitecturas. Esta ventaja la tiene tambin los lenguajes interpretados, aunque generalmente con mejor rendimiento. Por esto, muchos lenguajes interpretados se compilan a bytecode y despus son ejecutados por un intrprete de bytecode. En Java generalmente se transmite el bytecode a la mquina receptora y esta se encarga de utilizar un compilador just-in-time para traducirlo a cdigo mquina antes de su ejecucin.

Lenguaje de nivel intermedio Caractersticas de los lenguajes mquina: - Acceso Directo a posiciones de memoria - Almacenar variables en registros del procesador Caractersticas de lenguajes de alto nivel: - Manejo de estructuras de control - Manejo de datos Ejemplo lenguaje C Lenguaje de alto nivel - Caractersticas superiores a los lenguajes ensambladores - No acceso directo al sistema - Estructura de datos complejas - Utilizacin de bloques, procedimientos o subrutinas Ejemplos: Ada, ALGOL, Basic, C, C++, C#, Clipper, Cobol, Fortran, Java, Lexico, Logo, Object Pascal, Pascal, Perl, PHP, PL/SQL, Phyton, Modula 2. Lenguajes funcionales: Haskell, Lisp

Lenguaje orientado a problemas concretos - Resolucin de problemas en un campo especco. Ejemplos: SQL, XBASE, Postscript

DISEO DE UN GENERADOR DE CDIGO


El generador de cdigo objeto puede considerarse como la penltima fase de un compilador, la cual se encarga de tomar como entrada el cdigo intermedio generado por el front-end, y producir cdigo objeto de la arquitectura target para luego entrar en la fase de optimizacin de cdigo. Para el generador de cdigo objeto, se puede asumir que el front-end ha hecho los anlisis lxico y sintctico, y ha traducido a una representacin intermedia suficientemente detallada (LLVM?), en la que los valores de los nombres que aparecen en cdigo intermedio pueden ser representados por cantidades que la mquina objeto puede manejar directamente. Adems, se supone que se hecho el chequeo de tipos necesario y se han detectado los errores semnticos. Por lo tanto, la fase de generacin de cdigo trabaja bajo el supuesto que su entrada no contiene errores. La salida del generador de cdigo consiste en el programa objeto. Existe un variedad de formas para el cdigo objeto : lenguaje de mquina absoluto (imagen de memoria), lenguaje de mquina relocalizable (.OBJ en Intel Relocatable Format, ELF, etc.), lenguaje ensamblador o incluso otro lenguaje de programacin. La naturaleza del conjunto de instrucciones de la mquina objeto determina la dificultad de la seleccin de instrucciones. Es importante que el conjunto de instrucciones sea uniforme y completo, para generar reglas fciles de traduccin, por ejemplo: una arquitectura como la de Intel x86 permite que los compiladores tengan reglas bien definidas y cortas para casi todas las operaciones, mientras que una mquina RISC como el SPARC no posee un conjunto de instrucciones completo (desventaja para el constructor de compiladores, ventaja para los usuarios) y hace que la generacin de cdigo sea muy compleja. Otras arquitecturas, como la de MIPS, presenta un problema aparte, puesto que requiere que se reordene el cdigo de ciertas maneras y se evite el uso de ciertas instrucciones para evitar hazards en el pipeline. Otra de las consideraciones a tener para el generador de cdigo consiste en la asignacin de registros. Los registros son los elementos ms valiosos y escasos en la fase de generacin de cdigo, puesto que el CPU solamente puede procesar datos que se encuentren en registros. Adems, las instrucciones que implican operandos en registros son ms cortas y rpidas que las de operandos en memoria. El uso de registros se divide generalmente en dos subproblemas : 1) Durante la asignacin de registros, se selecciona el conjunto de variables y/o constantes que residirn en los registros en un momento del programa. 2) Durante una fase posterior a la anterior, se escoje el registro especfico en el que residir una variable.

10

Es muy difcil encontrar una asignacin ptima de registros a variables. Matemticamente, el problema es NP-completo. Este problema se complica todava ms debido a restricciones de hardware, de sistema operativo o ambos. Puede ser que el conjunto de instrucciones de la mquina no sea ortogonal (problema que existe en los x86 pero no en los Power por ejemplo). Algunas mquinas adems requieren para ciertas operaciones el uso de un conjunto de registros para algunos operandos y resultados.

OTRO CONCEPTO Un compilador o compilador generador es una herramienta que crea un programa de anlisis, intrprete o compilador de algn tipo de descripcin formal de un lenguaje y una mquina. La ms antigua y an ms comn forma de compilador de compilador es un generador de analizadores sintcticos, cuya entrada es una gramtica de un lenguaje de programacin, y cuya salida se genera el cdigo fuente de un analizador utiliza a menudo como un componente de un compilador. Un programa de anlisis tpico asociado generador de cdigo ejecutable con cada una de las reglas de la gramtica que debe ser ejecutado cuando estas normas sea aplicado por el analizador. Se refieren a veces como las rutinas de accin semntica ya que definen la semntica de la estructura sintctica que se analiza por el intrprete. Compiladores experimentales toma como entrada una descripcin formal de la semntica del lenguaje de programacin, por lo general utilizando semntica denotativa. Compilador de compiladores existen en diferentes formas, incluida la de abajo hacia arriba reescribir generadores mquina utilizado para los rboles de sintaxis baldosas en funcin de una reescritura de la gramtica . ANTLR puede ser utilizado para la comprobacin de tipos simultnea, constante propagacin, y ms durante la fase de anlisis. ANTLR es un software desarrollado en JAVA El uso de una sola herramienta para todos los niveles tiene varias ventajas La ms importante es la estandarizacin: con ANTLR basta con comprender el paradigma de anlisis una vez para poder implementar todas las fases de anlisis. flex est basado en autmatas finitos deterministas y bison en un analizador LALR), adems de necesitar de otras herramientas para realizar el anlisis semntico.

11

ALGORITMO PARA LA GENERACIN DE CDIGO


El algoritmo de generacin de cdigo objeto que se propone aqu toma como entrada una secuencia de proposiciones de tres direcciones que constituyen un bloque bsico (se ejecutan secuencialmente). Para cada proposicin de tres direcciones de la forma x: = y op z se realizan las siguientes operaciones: 1. Se invoca la funcin obtenreg (que se describe ms adelante) para determinar la posicin L donde se debe guardar el resultado de calcular y op z. Generalmente L ser un registro, pero tambin puede ser una posicin de memoria. 2. Se consulta el descriptor de direcciones para determinar y', (una de) la(s) posicin(es) en curso de y. Si el valor de y est en ese momento en memoria y en un registro, se prefiere como y' el registro. Si el valor de y no est todava en L, se genera la instruccin MOV y', L para colocar una copia de y en L. 3. Se genera la instruccin op z', L donde z' es una posicin en curso de z. De nuevo, se prefiere un registro a una posicin de memoria si z se encuentra en ambos. Se actualiza el descriptor de direcciones para indicar que x est en la posicin L. Si L es un registro, se actualiza su descriptor para indicar que contiene el valor de x, y se elimina x de todos los otros descriptores de registros. 4. Si los valores en curso de y o z, o ambos, no se van a usar ms tarde, no estn activos a la salida del bloque, y estn en registros, se altera el descriptor de registros para indicar que despus de la ejecucin de x:= y op z dichos registros ya no contendrn y o z, o ambos, respectivamente. Una vez que se hayan procesado todas las proposiciones de tres direcciones del bloque bsico, mediante instrucciones MOV se almacenan en memoria aquellos nombres que estn activos a la salida del bloque y que estn slo en registros. Para ello se necesita consultar: el descriptor de registros, para determinar qu nombres han quedado en los registros; el descriptor de direcciones, para determinar que el mismo nombre no est ya en su posicin de memoria; y la informacin sobre variables activas para determinar si se necesita almacenar el nombre. Si no se ha calculado la informacin sobre variables activas mediante el anlisis del flujo de datos entre los bloques bsicos, se debe asumir que todos los nombres definidos por el usuario estn activos al final del bloque. Puesto que este algoritmo recibe como entrada un so lo bloque bsico, habra que repetir el mismo proceso para cada uno de los bloques bsicos hasta terminar el programa.

12

BIBLIOGRAFA
http://nereida.deioc.ull.es/~cleon/icii/prct/p0/p0.pdf http://www.wikilearning.com/curso_gratis/generadores_de_codigo-compiladores_y_generacion_de_codigo/10114-2

http://es.scribd.com/doc/44986075/Lenguajes-Intermedios http://es.wikipedia.org/wiki/Compilador http://www.escet.urjc.es/~ci/material/gci.pdf http://sistemas.ing.ula.ve/~wladimir/Compiladores/CompiladoresClase2.pdf http://www.mitecnologico.com/Main/EsquemasDeGeneracionLenguajesIntermedios http://efutch.blogspot.com/2010/09/diseno-de-un-generador-de-codigo-objeto.html http://www-lt.ls.fi.upm.es/compiladores/Documentos/algoritmo-GCO.pdf

13

Potrebbero piacerti anche