Está en la página 1de 7

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (UNICEN) | Pg.

Diseo de Compiladores I Teora 1


Temas a tratar
Compilacin Interpretacin ............................................................................................................................................. 2 Autocompiladores ............................................................................................................................................................... 2 Cross compilers ................................................................................................................................................................... 2 Compiladores incrementales .............................................................................................................................................. 2 Metacompiladores .............................................................................................................................................................. 3 Maquinas objeto ................................................................................................................................................................. 3 Salidas de un Compilador.................................................................................................................................................... 3 Diagramas T......................................................................................................................................................................... 4 Proceso de compilar un compilador: .............................................................................................................................. 4 Autocimpilador ............................................................................................................................................................... 6 Migrar un compilador ..................................................................................................................................................... 7

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (UNICEN) | Pg. 2

Compilacin Interpretacin
Ambos son modelos ideales que realmente no se alcanzan completamente. La compilacin es una traduccin total del texto fuente a un lenguaje diferente, que puede ser el lenguaje de otro compilador o un ejecutable. Esto quiere decir que no queda residuo del programa original en la salida. (No estn los nombres de las variables, no estn los comentarios) El intrprete lo ejecuta directamente, sin generar un cdigo equivalente y conservando el programa original. La ventaja principal de los lenguajes interpretados es la portabilidad (capacidad de ejecutar en diferentes plataformas). La ventaja principal de los lenguajes compilados es la velocidad de ejecucin.

Por ejemplo C tiene formatos dinmicos, tengo una variable X que la voy a mostrar, %f X, el formato que utilizo en este momento es dinmico. Entonces ese pedazo, es interpretado.

Autocompiladores
Son algo as como el cuento del huevo y la gallina. Es un compilador que est escrito en el mismo lenguaje que compila, introducida por IBM con pascal-vs. Casi todos los compiladores modernos estn escritos en el mismo lenguaje que compilan debido a las ventajas.

Cross compilers
Es un compilador capaz de crear un cdigo ejecutable para una plataforma distinta a la que dicho compilador est corriendo. Por ejemplo el software de un telfono no es compilado y testeado en un telfono, sino en otra mquina preparada para eso.

Compiladores incrementales
Aprovechando el tiempo que tarda un humano en escribir, el compilador, va compilando a medida que este va tapeando, aunque no fue muy til debido a que el programador quiz va por la lnea 700 y se le ocurre cambiar el tipo a una variable declarada en la lnea 2, entonces lo compilado hasta el momento no sirve de nada. Pero a esta idea se le ha dado otra utilidad como los correctores de sintaxis.

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (UNICEN) | Pg. 3

Metacompiladores
Un metacompilador es un compilador de compiladores. Se trata de un programa que acepta como entrada la descripcin de un lenguaje y produce el compilador de dicho lenguaje. Es decir, se acepta como entrada una gramtica y se genera un autmata que reconoce cualquier sentencia del lenguaje.

En teora es posible hacerlo pero no es prctico. Pero quedan programas que producen una parte del compilador de forma automtica, el ms conocido es YACC.

Originalmente hecho para UNIX, C. Entre el 96 y el 2005 se extendi YACC para otros sistemas operativos y otros lenguajes.

Maquinas objeto
Surge en un contexto en el que empezaron a aparecer muchas fbricas de computadores y haba una carencia total de gente capacitada para hacer compiladores en el mundo. Entonces a alguien se le ocurri escribir una maquina abstracta en ese momento se construy la P-Machine y se defini un P-Code. Y se construyeron compiladores de lenguajes para esa mquina y todos los fabricantes de computadoras hacan un intrprete de la mquina virtual. Esto funcion durante 3 o 4 aos. Porque las propagandas de las empresas ofrecan compiladores nativos que andaban ms rpidos. Idea retomada con la mquina virtual de java, no por falta de gente para hacer compiladores sino para proveer portabilidad.

Salidas de un Compilador
Un compilador lee un programa fuente y provee una salida. Esa salida puede ser otro lenguaje, ejemplo el compilador de ADA de Linux compila de ADA a C++. Casi todos los compiladores de Linux compilan a C++ en lugar de compilar a mquina, luego C++ compila a mquina.

Muchos compiladores compilan en assembler porque es ms fcil revisar los errores que las salidas en binario. Las salidas en binario requieren reunirse entre varios binarios para ser ejecutados, necesitan la existencia de un linker.

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (UNICEN) | Pg. 4

Diagramas T
La idea es que en un compilador hay siempre involucrado 3 lenguajes y no 2. 1. El lenguaje que el compilador entiende y que es escrito por el programador (fuente). 2. El cdigo en el que el compilador escribe, resultado de la compilacin (salida). 3. El lenguaje en el que est escrito el compilador.

Ejemplo: Un compilador de lenguaje Pascal, escrito en C que genere una salida en Assembler se representa con el siguiente diagrama:

Ejemplos:
Proceso de compilar un compilador:

Inicialmente se necesita el cdigo fuente del compilador, al igual que cualquier otro programa. Entonces supongamos un compilador de Pascal a Assembler Pentium escrito en C.

Para compilar este cdigo fuente se requiere un compilador de C, que entienda el lenguaje en el que escrib el cdigo fuente anterior.

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (UNICEN) | Pg. 5

Supongamos que se quiere que ese compilador que escribimos funcione en una PC con LINUX. Entonces necesitamos un compilador de C a PC con LINUX que corra sobre una maquina X cualquiera.

Una vez compilado el texto fuente con este compilador, lo que se obtiene es un compilador en formato ejecutable de Pascal a Assembler Pentium que corre en una PC con LINUX.

La diferencia entre este ltimo y el primero, es que el primero es el texto fuente, y ste es un programa ejecutable. Resumiendo el proceso de compilar un compilador es el siguiente:

Tener en cuenta que:

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (UNICEN) | Pg. 6

Autocimpilador

Supongamos que ya tenemos un compilador de C++, que corre en una PC con Windows y genera una salida para PC con Windows.

Entonces escribimos en C++ un compilador que interpreta C++ y genera salida para PC con Windows* (*significa mejorada), y luego lo compilamos con el compilador de C++ mostrado anteriormente. Dando como resultado un nuevo compilador de C++.

De ac se puede ver que el nuevo compilador ejecutable, es un hbrido, ya que genera una salida mejorada del cdigo de entrada, pero en s mismo el ejecutable no est mejorado. Entonces se necesita una segunda compilacin del fuente inicial con el compilador hbrido para obtener el nuevo compilador final.

Como conclusin se obtiene que toda modificacin a un autocompilador, requiere de dos compilaciones.

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.AR Fac. Cs. Exactas (UNICEN) | Pg. 7

Migrar un compilador

Supongamos que tenemos el compilador de C++ que corre en PC con Windows mostrado en el ejemplo anterior y lo queremos migrar para que corra en una PC con Mac OS. Lo que tenemos que hacer es escribir un compilador en C++, que interprete C++ pero su salida corra en Mac OS. Y luego compilarlo con el compilador de C++ que tenemos.

Este nuevo compilador que corre en PC con Windows y genera salida para un PC con Mac Os, se lo denomina cross compiler.

También podría gustarte