You are on page 1of 7

Grupo CUYS (Como Usted Ya Sabe) | WWW.CUYS.COM.

AR
Fac. Cs. Exactas (UNICEN) | Pg. 1


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.

You might also like