P. 1
Tipos de compiladores

Tipos de compiladores

|Views: 3.459|Likes:
Publicado porAlison Swift

More info:

Published by: Alison Swift on May 19, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

08/21/2013

pdf

text

original

TIPOS DE COMPILADORES

INDICE

Pag. 1. Introducción 2. Tipos de compiladores 3. Características principales Compiladores cruzados Compiladores JIT Compiladores optimizadores Compiladores de una sola pasada Compiladores de varias pasadas Compiladores Incrementales Autocompilador Metacompilador Descompilador HotSpot 4. Referencias 2 2 3 3 4 5 5 6 8 8 8 9 9 10

por lo que puede haber compiladores que se adscriban a varias categorías: y Compiladores cruzados: generan código para un sistema distinto del que están funcionando. Actualmente existen herramientas que facilitan la tarea de escribir compiladores ó intérpretes informáticos. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente. Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia. Sirve para hacer ampliaciones al lenguaje. Tipos de compiladores Esta clasificación de los tipos de compiladores no es excluyente. 2. se pueden escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje que compila ese compilador. Estas herramientas permiten generar el esqueleto del analizador sintáctico a partir de una definición formal del lenguaje de partida. Autocompilador: compilador que está escrito en el mismo lenguaje que va a compilar. Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina. Compilador con montador: compilador que compila distintos módulos de forma independiente y después es capaz de enlazarlos. dejando únicamente al programador del compilador la tarea de programar las acciones semánticas asociadas. Compiladores incrementales: generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. Compiladores de una sola pasada: generan el código máquina a partir de una única lectura del código fuente.Ingeniería de Sistemas Compiladores 1. Una vez que se dispone de un compilador. mejorar el código generado. no se puede ejecutar la primera vez. especificada normalmente mediante una gramática formal y barata. Introducción Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador. y y y y y y y 2 . etc. Evidentemente. Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan. pero manteniendo la funcionalidad del programa original.

necesitas instalar este compilador. Características principales 3. Otro ejemplo de un compilador con estas posibilidades es el NASM. Esta herramienta es útil cuando quiere compilarse código para una plataforma a la que no se tiene acceso. es decir pasa de lenguaje objeto a fuente.Ingeniería de Sistemas y Compiladores Metacompilador: es sinónimo de compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. los programas de 32 bits se pueden escribir de una manera tal para que sean portables entre cualquier sistema 3 . si se usan las bibliotecas correctas. Los programas de usuario deben estar escritos en código máquina del MIPS. es un ensamblador libre para la plataforma Intel x86. y y 3. El Netwide Assembler o NASM. El sistema operativo Nachos se ejecuta sobre una máquina virtual basada en el procesador MIPS. Compiladores cruzados. sino que lo puedes hacer en lenguaje C. El compilador cruzado que se distribuye con el Nachos es una versión del popular compilador GCC. no necesitas escribir los programas de usuario en código máquina o en ensamblador. Funciona sobre prácticamente cualquier versión de Linux. Un compilador cruzado (cross compiler) es aquel que genera código ejecutable para una plataforma diferente a aquella en la que se ejecuta. o cuando es incómodo o imposible compilar en dicha plataforma (como en el caso de los sistemas empotrados). que puede ensamblar. En estas situaciones. Puede ser usado para escribir programas tanto de 16 bits como de 32 bits (IA32). HotSpot: herramienta que incluye un compilador dinámico y una máquina virtual para interpretar los ByteCodes. Por ejemplo.1. una PDA o una consola de videojuegos. Descompilador: Realiza el proceso inverso a la compilación. Normalmente será más cómodo realizar el desarrollo en un PC y luego volcar el código objeto en el dispositivo de destino. el compilador que usaremos en el PC es un caso de compilador cruzado. ELF (para sistemas UNIX) y COM (para DOS). Si quieres trabajar en tu propio ordenador. entre otro formatos. El compilador cruzado que viene con la instalación de Nachos es capaz de traducir de C a código del MIPS. En el NASM. Afortunadamente. supongamos que queremos desarrollar aplicaciones para un teléfono móvil.

y el compilador JIT no perderá el tiempo en optimizar código que nunca se va a ejecutar. Fig. 4 . Es decir. los compiladores JIT no pueden realizar demasiadas optimizaciones. según se van cargando. habrá partes que no se ejecuten y que no serán compiladas. Compiladores JIT (Just In Time). Se usa la clase java. realizando un cierto grado de optimización. un compilador JIT va trasladando los ByteCodes al código máquina de la plataforma según los va leyendo.Compiler para cargar la librería nativa y empezar la inicialización dentro del compilador JIT. ya que hay código que ellos no ven. hay una cierta cantidad de tiempo que inevitablemente ha de perderse. hay otras partes que deben ser optimizadas. con lo cual. 3. Un JIT es un generador de código que convierte los bytecodes Java en código nativo de la máquina. No obstante. el NDISASM.2. que compilan el código convirtiéndolo a código máquina antes de ejecutarlo. así que aunque siempre son capaces de optimizar la parte de código de inicialización de un programa. Si existe la librería del compilador JIT. El paquete también incluye un desensamblador.lang. Un paso adelante en el rendimiento del código Java lo han representado los compiladores Just-In-Time.Ingeniería de Sistemas Compiladores operativo x86 de 32 bits.1 Proceso de compilación en Java ¿Cómo Funcionan los Compiladores JIT? Los compiladores JIT se suministran como librerías nativas dependientes de la plataforma. Los programas Java invocados con un JIT generalmente se ejecutan más rápido que cuando se ejecutan en bytecodes por el intérprete. la JVM inicializa el JNI (Java Native Interface) para llamar a las funciones JIT disponibles en la librería en lugar de su función equivalente del intérprete. El resultado es que cuando el programa se ejecute.

2 Compilación y Ejecución de un programa en Java 3. El compilador JIT usa su propio llamante. usa un método llamante como especificado en el bloque método del objeto class cargado. 5 . es decir examina el código fuente una vez. Este tipo de compiladores mejora la eficiencia del programa objeto en ocupación de memoria o en tiempo de ejecución. Sacar de los lazos las expresiones cuyo valor no cambia en el lazo. donde el análisis léxico. pero manteniendo la funcionalidad del programa original. semántico y la generación de código se realizan en una pasada. generando el código o programa objeto.Ingeniería de Sistemas Compiladores Cuando la JVM llama a un método Java. sintáctico. realiza modificaciones sobre el código intermedio para mejorar la eficiencia en velocidad y tamaño. 3. Fundir en uno solo el cálculo repetido de la misma expresión. Una aproximación al manejo de las TS se presenta en la Figura 3. Entre las funciones que realiza se puede citar: Eliminación de saltos consecutivos Eliminar el cálculo de expresiones cuyo valor no se usa. Fig. Compiladores optimizadores Realizan cambios en el código para mejorar su eficiencia.3. Reducir el uso de memoria local reutilizando el espacio de una variable muerta. se explora el texto fuente sentencia a sentencia (o bloques de sentencias) realizándose los tres análisis y la generación de código. es decir. Compiladores de una sola pasada Generan el código máquina a partir de una única lectura del código fuente. Las versión de Sun chequea el bit de acceso al método por un valor ACC_MACHINE_COMPILED para notificarle al intérprete que el código de este método ya está compilado y almacenado en las clases cargadas.4.

3 Compilador de una sola pasada Ventajas del compilador de una pasada Fue fácil de implementar Generaba poca actividad de entrada/salida El código de un procedimiento se compila en memoria y se escribe como una unidad a la memoria secundaria Desventajas Limitaciones en la calidad del código generado Mucha necesidad de memoria 3. Compiladores de varias pasadas En un compilador de varias pasadas. Cuando un compilador comienza a 6 .Ingeniería de Sistemas Compiladores Fig. En los compiladores modernos la TS se crea durante el primer recorrido del árbol AST.5. tal como el de la Figura 4. la tabla de símbolos (TS) se crea durante el análisis léxico y sintáctico (pasada 1). una vez creado éste mediante el analizador sintáctico (pasada 2).

sólo se añade una entrada para cada identificador nuevo. el analizador sintáctico introduce dicho símbolo en la TS. Si el token comparado se encuentra en la TS. el analizador sintáctico accede directamente al índice que identifica a dicho identificador reconocido anteriormente.Ingeniería de Sistemas Compiladores traducir un programa fuente. Fig. Según avanza la compilación. El analizador léxico separa el programa fuente en tokens que compara con las palabras reservadas. pero se explora la Tabla una vez por cada nueva aparición de un identificador.4 Compilador de varias pasadas 7 . Si el token comparado no es una palabra reservada se asume que es un identificador y durante el sintáctico (fase sintáctica) se añade a ella. en caso contrario. la TS está vacía o contiene unas pocas entradas para las funciones incorporadas (las palabras reservadas habitualmente son almacenadas en una tabla aparte y usadas exclusivamente por el analizador léxico).

¶ se genera un OBJ transitorio. Compiladores incrementales Compiladores Generan un código objeto instrucción por instrucción (en vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. Si se pone el µ. Lo ideal es que se hiciese a nivel de instrucción.Ingeniería de Sistemas 3. Es aquel que compila un programa en el que si después se descubren errores. Evidentemente. Metacompilador Es un compilador de compiladores y se refiere a un programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener un compilador y genera como salida el compilador para ese lenguaje. 3. en vez de corregir el programa fuente y compilarlo por completo.6. de manera que pueda ser compilado por todas esas máquinas diferentes. por ejemplo.¶ que falta y se recompila. etc. el nuevo compilador se escribe con el antiguo. Sirve para hacer ampliaciones al lenguaje. A nivel de bloque: Si el µ. no se puede ejecutar la primera vez. Lo ideal es que solo se recompilen aquellas partes que contenían los errores. se compilan solo las modificaciones. En general puede hacer a muchos niveles.¶ faltaba en un procedimiento o bloque solo se compila ese bloque. y éste se desea mejorar.7. y dé como resultado un compilador más potente de ese mismo lenguaje. 3. pero lo normal es encontrarlo a nivel de fichero. si se nos olvida un µ. y que el código generado se reinserte con cuidado en el OBJ generado cuando se encontraron los errores.¶). Sin embargo esto es muy difícil.¶ faltaba en la línea 100 sólo se compila la línea 100. El otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen conjuntamente. Autocompilador Compilador que está escrito en el mismo lenguaje que va a compilar. compilo ese fichero y luego se enlazan todos juntos. mejorar el código generado. 8 . un compilador incremental puede funcionar a varios niveles: A nivel de carácter : Se recompila el µ.¶ A nivel de sentencia: Si el µ. A nivel de Fichero: Si tenemos 15 ficheros y solo se modifica 1(al que le faltaba el µ. Cuando se extiende entre muchas máquinas diferentes el uso de un compilador.8.

aunque Sun no ha proporcionado muchos detalles sobre este extremo. el profiler mantiene información sobre el rendimiento y selecciona el método sobre el que se va a realizar la compilación. etc). La función control que muestra el diagrama es como un salto indirecto a través de la memoria que apunta tanto al código máquina como al interpretado.10. en caso de que exista. En general. porque al código máquina casi siempre se le aplica una optimización. Cuando un método es invocado. Los métodos ya compilados se almacenan en un caché en código máquina nativo. HotSpot La última tendencia en lo que a compilación e intérpretes se refiere. Es una operación casi imposible. tal como se muestra en la figura siguiente. mientras que el aspecto semántico del lenguaje se deja en manos del usuario. Descompilador Pasa de un código máquina (o programa de salida) al lenguaje que lo generó (programa fuente). Se utilizan especialmente cuando el código máquina ha sido generado con opciones de depuración. esta versión en código máquina nativo es la que se utiliza. los ByteCodes son reinterpretados. Por eso lo que hay suelen ser desensambladores. situada a la izquierda de la página. y contiene información adicional de ayuda a la depuración de errores (puntos de ruptura. También se emplea cuando el compilador original no generó código máquina puro. la especificación del lenguaje abarca tanto el aspecto léxico como el sintáctico. 3. y son los que permiten la construcción del parser. Cuando se cargan los ByteCodes producidos por el compilador por primera vez. para que lo ensamble una vez obtenido el parser. El desarrollo de los metacompiladores se encuentra con la dificultad de unir la generación de código con la parte de análisis. 9 . Los inconvenientes que tienen son que los analizadores que generan no son muy eficientes. Cuando ya están en ejecución. una herramienta que incluye un compilador dinámico y una máquina virtual para interpretar los ByteCodes. construye un programa o analizador que es capaz de reconocer secuencias o elementos de dicho lenguaje. Lo que sí se han desarrollado son generadores de analizadores léxicos y sintácticos. 3. sino pseudocódigo (para ejecutarlo a través de un pseudointérprete). desarrollados para UNIX. Cada descompilador trabaja con un lenguaje de alto nivel concreto.9. éstos son interpretados en la máquina virtual. Por ejemplo. en caso contrario. a partir de la especificación de un lenguaje. Lo último en que trabaja Sun es HotSpot.Ingeniería de Sistemas Compiladores Un metacompilador o generador de parsers es una herramienta que. opciones de visualización de variables. ya que existe una bisección entre cada instrucción máquina y cada instrucción ensamblador. los conocidos:LEX: generador de analizadores léxicos YACC: generador de analizadores sintácticos.

es/wiki/index. Ullman. técnicas y herramientas. principios. traductores e intérpretes. Autores: Alfred V. Jesús Pérez García http://sopa.ulpgc.php/Compilador_cruzado http://www.Ingeniería de Sistemas Compiladores Fig.itapizaco.mx/paginas/JavaTut/froufe/parte2/cap2-5.edu. 5 Estructura del HotSpot Referencias Compiladores. Compiladores. Autores: Ana Mª Corrales Barrios. Ravi Sethi y Jeffrey D.html 10 . Aho.dis.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->