You are on page 1of 4

1.- Qu es un compilador? Los compiladores son programas de computadora que traducen un lenguaje a otro.

Un compilador toma como su entrada un programa escrito en su lenguaje fuente y produce un programa equivalente escrito en su lenguaje objetivo. Por lo regular, el lenguaje fuente es un lenguaje de alto nivel, tal como C o C++, mientras que el lenguaje objetivo es cdigo objeto (tambin llamado en ocasiones cdigo de mquina) para la mquina objetivo, es decir, cdigo escrito en las instrucciones de mquina correspondientes a la computadora en la cual se ejecutar.

Un compilador es un programa muy complejo con un nmero de lneas de cdigo que puede variar de i 0,000 a 1,000,000. Escribir un programa de esta naturaleza, o incluso comprenderlo, no es una tarea fcil, y la mayora de los cientficos y profesionales de la computacin nunca escribirn un compilador completo. No obstante, los compiladores se utilizan en casi todas las formas de la computacin, y cualquiera que est involucrado profesionalmente con las computadoras debera conocer la organizacin y el funcionamiento bsicos de un compilador. El estudio de las tcnicas de codificacin prctica en s mismo requiere de una cuidadosa planeacin, ya que incluso con buenos fundamentos tericos los detalles de la codificacin pueden ser complejos y abrumadores.

2.- Por qu compiladores? Una breve historia Con el advenimiento de la computadora con programa almacenado, iniciado por John von Neumann a finales de la dcada de 1940, se hizo necesario escribir secuencias de cdigos, o programas, que daran como resultado que estas computadoras realizaran los clculos deseados. Al principio estos programas se escriban en lenguaje de mquina: cdigos numericos que representaban las operaciones reales de la Mquina que iban a efectuarse. Por Ejemplo: C7 06 0000 0002 Representa la instruccin para mover el nmero 2 a la ubicacin 0000 {en sistema hexadecimal} en los procesadores Intel 8x86 que se utilizan en las PC de IBM. Por supuesto, la escritura de tales cdigos es muy tediosa u consume mucho tiempo, por lo que esta forma de codificacin pronto fue remplazada por el Lenguaje ensamblador, en el cual las instrucciones y las localidades de memoria son formas simblicas dadas. Por ejemplo, la instruccin en lenguajes ensamblador. MOV x,2 Es equivalente a la instruccin de mquina anterior (suponiendo que la localidad de memoria simblica x es 0000). Un ensamblador traduce los cdigos simblicos y las localidades de memoria de lenguaje ensamblador a los cdigo numricos correspondientes del lenguaje de maquina. El lenguaje ensamblador mejor enormemente la velocidad y exactitud con la que podan Escribirse los programas, y en la actualidad todava se encuentra en uno especia Cuando se necesita una gran velocidad o brevedad en el cdigo. Sin embargo, el lenguaje ensamblador tiene varios defectos: an no es fcil de escribir y es difcil de leer y comprender, adems, el lenguaje ensamblador depende en extremo de la mquina en particular para la cual se haya escrito, de manera que el cdigo escrito para una computadora debe volver a escribirse por completo para otra mquina. Como es evidente, el siguiente paso fundamental en la tecnologa de programacin fue escribir las operaciones de un programa de una manera concisa que se pareciera mucho a la notacin matemtica o lenguaje natural de manera que fueran independientes de cualquier mquina en particular y todava se pudiera traducir mediante un programa para convertirlas en cdigo ejecutable. Por ejemplo, el anterior cdigo del lenguaje ensamblador se puede escribir de manera concisa e independiente de una mquina en particular como X = 2

El desarrollo del lenguaje FORTRAN y su compilador, llevado a cabo por un equipo en IBM dirigido por John Backus entre 1954 y 1957 demostr que estos temores eran infundados. No obstante, el xito de este proyecto se debi slo a un gran esfuerzo. Ya que la mayora de los procesos involucrados n la traduccin de lenguajes de programacin no fueron bien comprendidos en el momento. Ms o menos al mismo tiempo en que el primero compilador se estaba desarrollando, Noam Chomsky comenz a estudiar la estructura del lenguaje natural. Sus hallazgos finalmente hicieron que la construccin de compiladores se volviera mucho ms fcil e incluso pudiera ser automatizado hasta cierto punto. Los estudios de Chomsky condujeron a la clasificacin de los lenguajes de acuerdo con la complejidad de sus gramticas (las reglas que especifican su estructura) y la potencia de los algoritmos necesarios para reconocerlas. Las jerarquas de Chomsky, como ahora se le conoce, se compone de cuatro niveles de gramticas, denominadas gramticas tipo 0, tipo 1, tipo 2 y tipo 3, cada una de las cuales es una especializacin de sus predecesora. Las gramticas de tipo 2 o gramticas libres de contexto, demostraron ser las ms tiles para lenguajes de programacin, en la actualidad son la manera estndar para representar la estructura de los lenguajes de programacin. El estudio del problema del anlisis sintctico (la determinacin de algoritmos eficientes para el reconocimiento de lenguajes libres de contexto) se llev a cabo en las dcadas de los 60 y 70 y condujo a una solucin muy completa de este problema, que en la actualidad se ha vuelto una parte estndar de la teora de compiladores. Los autmatas finitos y las expresiones regulares, que corresponden a las gramticas de tipo 3 de Chomsky, se encuentran estrechamente relacionados con las gramticas libres de contexto. Al comenzar a generarse casi al mismo tiempo que el trabajo de Chomsky, su estudio condujo a mtodos simblicos para expresar la estructura de las palabras, o tokens, de un lenguaje de programacin. 3.- Programas relacionados con los compiladores INTRPRETES Un intrprete es un traductor de lenguaje, igual que un compilador, pero difiere de ste en que ejecuta el programa fuente inmediatamente, en vez de generar un cdigo objeto que se ejecuta despus de que se completa la traduccin. En principio, cualquier lenguaje de programacin se puede interpretar o compilar, pero se puede preferir un intrprete a un compilador dependiendo del lenguaje que se est usando y de la situacin en la cual se presenta la traduccin. Por ejemplo, BASIC es un lenguaje que por lo regular es interpretado en vez de compilado. De manera similar, los lenguajes funcionales, corno LISP, tienden a ser interpretados. Los intrpretes tambin se utilizan con frecuencia en situaciones relacionadas con la enseanza o con el desarrollo de software, donde los programas son probablemente traducidos y vueltos a traducir muchas veces. ENSAMBLADORES Un ensamblador es un traductor para el lenguaje ensamblador de una computadora en Particular. Como ya lo advertimos, el lenguaje ensamblador es una forma simblica del Lenguaje de mquina de la computadora y es particularmente fcil de traducir. En ocasiones un compilador generar lenguaje ensamblador como su lenguaje objetivo y depender entonces de un ensamblador para terminar la traduccin a cdigo objeto. LIGADORES Tanto los compiladores como los ensambladores a menudo dependen de un programa conocido como ligador, el cual recopila el cdigo que se compila o ensambla por separado en diferentes archivos objeto, a un archivo que es directamente ejecutable. En este sentido, puede hacerse una distincin entre cdigo objeto (cdigo de mquina que todava no se ha ligado) y cdigo de mquina ejecutable. Un ligador tambin conecta un programa objeto con el cdigo de funciones de libreras estndar, as como con recursos suministrados por el sistema operativo de la computadora, tales como asignados de memoria y dispositivos de entrada y salida. Es interesante advertir que los ligadores ahora realizan la tarea que originalmente era una de las principales actividades de un compilador (de aqu el uso de la palabra compilador: construir mediante la recopilacin o compilacin de fuentes diferentes).

CARGADORES Con frecuencia un compilador, ensamblador o ligador producir un cdigo que todava no est completamente organizado y listo para ejecutarse, pero cuyas principales referencias de memoria se hacen relativas a una localidad de arranque indeterminada que puede estar en cualquier sitio de la memoria. Se dice que tal cdigo es re localizable y un cargador resolver todas las direcciones re localizables relativas a una direccin base, o de inicio, dada. El uso de un cargador hace ms flexible el cdigo ejecutable, pero el proceso de carga con frecuencia ocurre en segundo plano (como parte del entorno operacional) o conjuntamente con el ligado. Rara vez un cargador es en realidad un programa por separado. PREPROCESADORES Un preprocesador es un programa separado que es invocado por el compilador antes de que comience la traduccin real. Un preprocesador de este tipo puede eliminar los comentarios, incluir otros archivos y ejecutar sustituciones de macro (una macro es una descripcin abreviada de una secuencia repetida de texto). Los preprocesadoras pueden ser requeridos por el lenguaje (como en C) o pueden ser :agregados posteriores que proporcionen facilidades adicionales (como el preprocesador Ratfor para FORTRAN). EDITORES Los compiladores por lo regular aceptan programas fuente escritos utilizando cualquier Editor que pueda producir un archivo estndar, tal como un archivo ASCII. Mis recientemente, los compiladores han sido integrados junto con editores y otros programas en un ambiente de desarrollo interactivo o IDE. En un caso as, un editor, mientras que an produce archivos estndar, puede ser orientado hacia el formato o estructura del lenguaje de programacin en cuestin. Tales editores se denominan basados en estructura y ya incluyen algunas de las operaciones de un compilador, de manera que, por ejemplo, pueda informarse al programador de los errores a medida que el programa se vaya escribiendo en lugar de hacerlo cuando est compilado. El compilador y sus programas acompaantes tambin pueden llamarse desde el editor, de modo que el programador pueda ejecutar el programa sin tener que abandonar el editor. DEPURADORES Un depurador es un programa que puede utilizarse para determinar los errores de ejecucinen un programa compilado. A menudo est integrado con un compilador en un IDE. La ejecucin de un programa con un depurador se diferencia de la ejecucin directa en que el depurador se mantiene al tanto de la mayora o la totalidad dc la informacin sobre el cdigo fuente, tal como los nmeros de lnea y los nombres de las variables y procedimientos. Tambin puede detener la ejecucin en ubicaciones previamente especificadas denominadas puntos de ruptura, adems de proporcionar informacin decules funciones se han invocado y cuales son Los valores actuales de las variables. Para efectuar estas funciones el compilador debe suministrar al depurador la informacin simblica apropiada, lo cual en ocasiones puede ser difcil, en especial en un compilador que intente optimizar el cdigo objeto. De este modo, la depuracin se convierte en una cuestin de compilacin, la que, sin embargo, rebasa el alcance de este libro. PERFILADORES Un perfilador es un programa que recolecta estadsticas sobre el comportamiento de un programa objeto durante la ejecucin. Las estadsticas tpicas que pueden ser de inters para el programador son el nmero de veces que se llama cada procedimiento y el porcentaje de tiempo de ejecucin que se ocupa en cada uno de ellos. Tales estadsticas pueden ser muy tiles para ayudar al programador a mejorar la velocidad de ejecucin del programa. A veces el compilador utilizar incluso la salida del perfilador para mejorar de manera automtica el cdigo objeto sin la intervencin del programador. ADMINISTRADORES DE PROYECTO Los modernos proyectos de software por lo general son tan grandes que tienen que ser emprendidos por grupos de programadores en lugar de por un solo programador. En tales casos es importante que los archivos que se estn trabajando por personas distintas se encuentren coordinados, y este es el trabajo de

un programa de administracin de proyectos. Por ejemplo, un administrador de proyecto debera coordinar la mezcla de diferentes versiones del mismo archivo producido por programadores diferentes. Tambin debera mantener una historia de las modificaciones par+ cada uno de los grupos de archivos, de modo que puedan mantenerse versiones coherentes de un programa en desarrollo (esto es algo que tambin puede ser til en un proyecto que lleva a cabo un solo programador). Un administrador de proyecto puede escribirse en una forma independiente del lenguaje, pero cuando se integra junto con un compilador, puede mantener informacin acerca del compilador especfico y las operaciones de ligado necesarias para construir un programa ejecutable completo. Dos programas populares de administracin de proyectos en sistemas Unix son sccs y rcs (source code control system, sistemas de control para cdigo fuente") y (revision control system, "sistema de control para revisin).

You might also like