Está en la página 1de 6

Tipos de compiladores

Enviado por Aliss0n, mayo 2011 | 10 Pginas (2367 Palabras) | 102 Visitas
|
4.5
1
2
3
4
5
|
Denunciar
|
Espero
tu
llamada...
Enviar



TIPOS DE COMPILADORES

INDICE

1. Introduccin 2. Tipos de compiladores 3. Caractersticas principales * Compiladores
cruzados * Compiladores JIT * Compiladores optimizadores * Compiladores de una
sola pasada * Compiladores de varias pasadas * Compiladores Incrementales *
Autocompilador * Metacompilador * Descompilador * HotSpot 4. Referencias |
Pag.223345568889910 |

1. Introduccin
Los primeros compiladores se realizaron programndolos directamente en lenguaje
mquina o en ensamblador. Una vez que se dispone de un compilador, se pueden
escribir nuevas versiones del compilador (u otros compiladores distintos) en el lenguaje
que compila ese compilador.
Actualmente existen herramientas que facilitan la tarea de escribir compiladores
intrpretes informticos. Estas herramientas permiten generar el esqueleto del
analizador sintctico a partir de una definicin formal del lenguaje de partida,
especificada normalmente mediante una gramtica formal y barata, dejando nicamente
al programador del compilador la tarea de programar las acciones semnticas asociadas.
2. Tipos de compiladores
Esta clasificacin de los tipos de compiladores no es excluyente, por lo que puede haber
compiladores que se adscriban a varias categoras:
* Compiladores cruzados: generan cdigo para un sistema distinto del que estn
funcionando.
* Compiladores optimizadores: realizan cambios en el cdigo para mejorar su
eficiencia, pero manteniendo lafuncionalidad del programa original.
* Compiladores de una sola pasada: generan el cdigo mquina a partir de una nica
lectura del cdigo fuente.
* Compiladores de varias pasadas: necesitan leer el cdigo fuente varias veces antes de
poder producir el cdigo mquina.
* Compiladores JIT (Just In Time): forman parte de un intrprete y compilan partes del
cdigo segn se necesitan.
* Compiladores incrementales: generan un cdigo objeto instruccin por instruccin (en
vez de hacerlo para todo el programa) cuando el usuario teclea cada orden individual. El
otro tipo de compiladores requiere que todos los enunciados o instrucciones se compilen
conjuntamente.
* Compilador con montador: compilador que compila distintos mdulos de forma
independiente y despus es capaz de enlazarlos.
* Autocompilador: compilador que est escrito en el mismo lenguaje que va a compilar.
Evidentemente, no se puede ejecutar la primera vez. Sirve para hacer ampliaciones al
lenguaje, mejorar el cdigo generado, etc.
* Metacompilador: es sinnimo 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.
* Descompilador: Realiza el proceso inverso a la compilacin, es decir pasa de lenguaje
objeto a fuente.
* HotSpot: herramienta que incluye un compilador dinmico y una mquina virtual para
interpretar los ByteCodes.
3. Caractersticas principales3.1. Compiladores cruzados.
Un compilador cruzado (cross compiler) es aquel que genera cdigo ejecutable para una
plataforma diferente a aquella en la que se ejecuta.
Esta herramienta es til cuando quiere compilarse cdigo para una plataforma a la que
no se tiene acceso, o cuando es incmodo o imposible compilar en dicha plataforma
(como en el caso de los sistemas empotrados).
Por ejemplo, supongamos que queremos desarrollar aplicaciones para un telfono
mvil, una PDA o una consola de videojuegos. Normalmente ser ms cmodo realizar
el desarrollo en un PC y luego volcar el cdigo objeto en el dispositivo de destino. En
estas situaciones, el compilador que usaremos en el PC es un caso de compilador
cruzado.
El sistema operativo Nachos se ejecuta sobre una mquina virtual basada en el
procesador MIPS. Los programas de usuario deben estar escritos en cdigo mquina del
MIPS. Afortunadamente, no necesitas escribir los programas de usuario en cdigo
mquina o en ensamblador, sino que lo puedes hacer en lenguaje C. El compilador
cruzado que viene con la instalacin de Nachos es capaz de traducir de C a cdigo del
MIPS.
El compilador cruzado que se distribuye con el Nachos es una versin del popular
compilador GCC. Funciona sobre prcticamente cualquier versin de Linux. Si quieres
trabajar en tu propio ordenador, necesitas instalar este compilador.
Otro ejemplo de un compilador con estas posibilidades es el NASM, que puede
ensamblar, entre otro formatos, ELF (para sistemas UNIX) y COM (para DOS).
El NetwideAssembler o NASM, es un ensamblador libre para la plataforma Intel x86.
Puede ser usado para escribir programas tanto de 16 bits como de 32 bits (IA-32). En el
NASM, si se usan las bibliotecas correctas, los programas de 32 bits se pueden escribir
de una manera tal para que sean portables entre cualquier sistema operativo x86 de 32
bits. El paquete tambin incluye un desensamblador, el NDISASM.
3.2. Compiladores JIT (Just In Time).

Un JIT es un generador de cdigo que convierte los bytecodes Java en cdigo nativo de
la mquina. Los programas Java invocados con un JIT generalmente se ejecutan ms
rpido que cuando se ejecutan en bytecodes por el intrprete.

Un paso adelante en el rendimiento del cdigo Java lo han representado los
compiladores Just-In-Time, que compilan el cdigo convirtindolo a cdigo mquina
antes de ejecutarlo. Es decir, un compilador JIT va trasladando los ByteCodes al cdigo
mquina de la plataforma segn los va leyendo, realizando un cierto grado de
optimizacin.

Fig.1 Proceso de compilacin en Java
El resultado es que cuando el programa se ejecute, habr partes que no se ejecuten y que
no sern compiladas, y el compilador JIT no perder el tiempo en optimizar cdigo que
nunca se va a ejecutar. No obstante, los compiladores JIT no pueden realizar
demasiadas optimizaciones, ya que hay cdigo que ellos no ven, as que aunque siempre
son capaces de optimizar la parte de cdigo de inicializacin de un programa, hay otras
partes que deben ser optimizadas, segn se van cargando, con locual, hay una cierta
cantidad de tiempo que inevitablemente ha de perderse.

Cmo Funcionan los Compiladores JIT?

Los compiladores JIT se suministran como libreras nativas dependientes de la
plataforma. Si existe la librera del compilador JIT, la JVM inicializa el JNI (Java
Native Interface) para llamar a las funciones JIT disponibles en la librera en lugar de su
funcin equivalente del intrprete. Se usa la clase java.lang.Compiler para cargar la
librera nativa y empezar la inicializacin dentro del compilador JIT.
Cuando la JVM llama a un mtodo Java, usa un mtodo llamante como especificado en
el bloque mtodo del objeto class cargado. El compilador JIT usa su propio llamante.
Las versin de Sun chequea el bit de acceso al mtodo por un valor
ACC_MACHINE_COMPILED para notificarle al intrprete que el cdigo de este
mtodo ya est compilado y almacenado en las clases cargadas.

Fig.2 Compilacin y Ejecucin de un programa en Java

3.3. Compiladores optimizadores

Realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la
funcionalidad del programa original. Este tipo de compiladores mejora la eficiencia del
programa objeto en ocupacin de memoria o en tiempo de ejecucin, realiza
modificaciones sobre el cdigo intermedio para mejorar la eficiencia en velocidad y
tamao. Entre las funciones que realiza se puede citar:

* Eliminacin de saltos consecutivos
* Eliminar el clculo de expresiones cuyo valor no se usa.
* Fundir en uno solo el clculo repetido de lamisma expresin.
* Sacar de los lazos las expresiones cuyo valor no cambia en el lazo.
* Reducir el uso de memoria local reutilizando el espacio de una variable muerta.

3.4. Compiladores de una sola pasada

Generan el cdigo mquina a partir de una nica lectura del cdigo fuente, es decir
examina el cdigo fuente una vez, generando el cdigo o programa objeto.
Una aproximacin al manejo de las TS se presenta en la Figura 3, donde el anlisis
lxico, sintctico, semntico y la generacin de cdigo se realizan en una pasada, es
decir, se explora el texto fuente sentencia a sentencia (o bloques de sentencias)
realizndose los tres anlisis y la generacin de cdigo.

Fig. 3 Compilador de una sola pasada

Ventajas del compilador de una pasada
* Fue fcil de implementar
* Generaba poca actividad de entrada/salida
* El cdigo de un procedimiento se compila en memoria y se escribe como una unidad a
la memoria secundaria
Desventajas
* Limitaciones en la calidad del cdigo generado
* Mucha necesidad de memoria

3.5. Compiladores de varias pasadas

En un compilador de varias pasadas, tal como el de la Figura 4, la tabla de smbolos
(TS) se crea durante el anlisis lxico y sintctico (pasada 1). En los compiladores
modernos la TS se crea durante el primer recorrido del rbol AST, una vez creado ste
mediante el analizador sintctico (pasada 2). Cuando un compilador comienza a traducir
un programa fuente, la TS est vaca o contiene unas pocas entradas para las
funcionesincorporadas (las palabras reservadas habitualmente son almacenadas en una
tabla aparte y usadas exclusivamente por el analizador lxico).
El analizador lxico separa el programa fuente en tokens que compara con las palabras
reservadas. Si el token comparado no es una palabra reservada se asume que es un
identificador y durante el sintctico (fase sintctica) se aade a ella. Si el token
comparado se encuentra en la TS, el analizador sintctico accede directamente al ndice
que identifica a dicho identificador reconocido anteriormente, en caso contrario, el
analizador sintctico introduce dicho smbolo en la TS.
Segn avanza la compilacin, slo se aade una entrada para cada identificador nuevo,
pero se explora la Tabla una vez por cada nueva aparicin de un identificador.

Fig.4 Compilador de varias pasadas
3.6. Compiladores incrementales

Generan un cdigo objeto instruccin por instruccin (en vez de hacerlo para todo el
programa) cuando el usuario teclea cada orden individual. El otro tipo de compiladores
requiere que todos los enunciados o instrucciones se compilen conjuntamente.

Es aquel que compila un programa en el que si despus se descubren errores, en vez de
corregir el programa fuente y compilarlo por completo, se compilan solo las
modificaciones. Lo ideal es que solo se recompilen aquellas partes que contenan los
errores, y que el cdigo generado se reinserte con cuidado en el OBJ generado cuando
se encontraron los errores. Sin embargo esto es muy difcil. En general puede hacer a
muchosniveles, por ejemplo, si se nos olvida un ; se genera un OBJ transitorio. Si se
pone el ; que falta y se recompila, un compilador incremental puede funcionar a varios
niveles:

* A nivel de carcter : Se recompila el ;
* A nivel de sentencia: Si el ; faltaba en la lnea 100 slo se compila la lnea 100.
* A nivel de bloque: Si el ; faltaba en un procedimiento o bloque solo se compila ese
bloque.
* A nivel de Fichero: Si tenemos 15 ficheros y solo se modifica 1(al que le faltaba el
;), compilo ese fichero y luego se enlazan todos juntos.

Lo ideal es que se hiciese a nivel de instruccin, pero lo normal es encontrarlo a nivel de
fichero.

3.7. Autocompilador

Compilador que est escrito en el mismo lenguaje que va a compilar. Evidentemente, no
se puede ejecutar la primera vez. Sirve para hacer ampliaciones al lenguaje, mejorar el
cdigo generado, etc.

Cuando se extiende entre muchas mquinas diferentes el uso de un compilador, y ste se
desea mejorar, el nuevo compilador se escribe con el antiguo, de manera que pueda ser
compilado por todas esas mquinas diferentes, y d como resultado un compilador ms
potente de ese mismo lenguaje.


3.8. 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.

Un metacompilador o generador de parsers es una herramienta que, a partir de la
especificacin de unlenguaje, construye un programa o analizador que es capaz de
reconocer secuencias o elementos de dicho lenguaje. En general, la especificacin del
lenguaje abarca tanto el aspecto lxico como el sintctico, y son los que permiten la
construccin del parser, mientras que el aspecto semntico del lenguaje se deja en
manos del usuario, para que lo ensamble una vez obtenido el parser.

El desarrollo de los metacompiladores se encuentra con la dificultad de unir la
generacin de cdigo con la parte de anlisis. Lo que s se han desarrollado son
generadores de analizadores lxicos y sintcticos. Por ejemplo, los conocidos:LEX:
generador de analizadores lxicos YACC: generador de analizadores sintcticos,
desarrollados para UNIX. Los inconvenientes que tienen son que los analizadores que
generan no son muy eficientes.

3.9. Descompilador

Pasa de un cdigo mquina (o programa de salida) al lenguaje que lo gener (programa
fuente). Cada descompilador trabaja con un lenguaje de alto nivel concreto. Es una
operacin casi imposible, porque al cdigo mquina casi siempre se le aplica una
optimizacin. Por eso lo que hay suelen ser desensambladores, ya que existe una
biseccin entre cada instruccin mquina y cada instruccin ensamblador.

Se utilizan especialmente cuando el cdigo mquina ha sido generado con opciones de
depuracin, y contiene informacin adicional de ayuda a la depuracin de errores
(puntos de ruptura, opciones de visualizacin de variables, etc). Tambin se emplea
cuando el compilador original nogener cdigo mquina puro, sino pseudocdigo (para
ejecutarlo a travs de un pseudointrprete).

3.10. HotSpot

La ltima tendencia en lo que a compilacin e intrpretes se refiere. Lo ltimo en que
trabaja Sun es HotSpot, una herramienta que incluye un compilador dinmico y una
mquina virtual para interpretar los ByteCodes, tal como se muestra en la figura
siguiente, situada a la izquierda de la pgina. Cuando se cargan los ByteCodes
producidos por el compilador por primera vez, stos son interpretados en la mquina
virtual. Cuando ya estn en ejecucin, el profiler mantiene informacin sobre el
rendimiento y selecciona el mtodo sobre el que se va a realizar la compilacin. Los
mtodos ya compilados se almacenan en un cach en cdigo mquina nativo.

Cuando un mtodo es invocado, esta versin en cdigo mquina nativo es la que se
utiliza, en caso de que exista; en caso contrario, los ByteCodes son reinterpretados. La
funcin control que muestra el diagrama es como un salto indirecto a travs de la
memoria que apunta tanto al cdigo mquina como al interpretado, aunque Sun no ha
proporcionado muchos detalles sobre este extremo.

Fig. 5 Estructura del HotSpot

Referencias

Compiladores, principios, tcnicas y herramientas. Autores: Alfred V. Aho, Ravi Sethi
y Jeffrey D. Ullman.

Compiladores, traductores e intrpretes. Autores: Ana M Corrales Barrios, Jess Prez
Garca

http://sopa.dis.ulpgc.es/wiki/index.php/Compilador_cruzado

También podría gustarte