Você está na página 1de 7

Aunque es equivocado, es comn encontrar referencias en documentacin de productos, publicidad y textos (e inclusive escuchar a la gente del medio informtico)

utilizando los trminos traductor, compilador e intrprete de una forma libre e indistinta. Estas palabras no se utilizan para identificar de manera genrica a un programa que nos permitira poder programar una computadora. Debemos ser precisos al emplear estas palabras, ya que se refieren a programas de distinta naturaleza que realizan labores encaminadas a un objetivo especfico y particular. Aunque la conducta manifestada pueda ser similar, su comportamiento interno definitivamente es diferente. Genricamente hablando, en ciencias de la computacin, los procesadores de lenguajes son aquellos programas destinados a trabajar sobre una entrada que, por la forma como ha sido elaborada, pertenece a un lenguaje en particular reconocido o aceptado por el programa en cuestin. Los procesadores de lenguajes se clasifican como traductores o intrpretes. Un traductor es un programa que recibe una entrada escrita en un lenguaje (el lenguaje fuente) a una salida perteneciente a otro lenguaje (el lenguaje objeto), conservando su significado. En trminos computacionales esto significa que tanto la entrada como la salida sean capaces de producir los mismos resultados. Un intrprete, por otra parte, no lleva a cabo tal transformacin; en su lugar obtiene los resultados conforme va analizando la entrada. Los traductores son clasificados en compiladores, ensambladores y preprocesadores. Un compilador es un programa que recibe como entrada un programa escrito en un lenguaje de nivel medio o superior (el programa fuente) y lo transforma a su equivalente en lenguaje ensamblador (el programa objeto), e inclusive hasta lenguaje mquina (el programa ejecutable) pero sin ejecutarlo. Un compilador es un traductor. La forma de como llevar a cabo tal traduccin es el objetivo central en el diseo de un compilador. Un ensamblador es el programa encargado de llevar a cabo un proceso denominado de ensamble o ensamblado. Este proceso consiste en que, a partir de un programa escrito en lenguaje ensamblador, se produzca el correspondiente programa en lenguaje mquina (sin ejecutarlo), realizando: La integracin de los diversos mdulos que conforman al programa. La resolucin de las direcciones de memoria designadas en el rea de datos para el almacenamiento de variables, constantes y estructuras complejas; as como la determinacin del tamao de stas. La identificacin de las direcciones de memoria en la seccin de cdigo correspondientes a los puntos de entrada en saltos condicionales e incondicionales junto con los puntos de arranque de las subrutinas. La resolucin de los diversos llamados a los servicios o rutinas del sistema operativo, cdigo dinmico y bibliotecas de tiempo de ejecucin. La especificacin de la cantidad de memoria destinadas para las reas de datos, cdigo, pila y montculo necesarias y otorgadas para su ejecucin. La incorporacin de datos y cdigo necesarios para la carga del programa y su ejecucin. Un precompilador, tambin llamado preprocesador, es un programa que se ejecuta antes de invocar al compilador. Este programa es utilizado cuando el programa fuente, escrito en el lenguaje que el compilador es capaz de reconocer (de aqu en adelante denominado lenguaje anfitrin-- en ingls host language), incluye estructuras, instrucciones o declaraciones escritas en otro lenguaje (el lenguaje empotrado-- en ingls embeded language). El lenguaje empotrado es siempre un lenguaje de nivel superior o especializado (e.g. de consulta, de cuarta generacin, simulacin, clculo numrico o estadstico, etctera). Siendo que el nico lenguaje que el compilador puede trabajar es quel para el cual ha sido escrito, todas las instrucciones del lenguaje empotrado deben ser traducidas a instrucciones del lenguaje anfitrin para que puedan ser compiladas. As pu es un precompilador tambin es un traductor.

Los precompiladores son una solucin rpida y barata a la necesidad de llevar las instrucciones de nuevos paradigmas de programacin (e.g. los lenguajes de cuarta generacin), extensiones a lenguajes ya existentes (como el caso de C y C++) y soluciones de nivel conceptual superior (por ejemplo paquetes de simulacin o clculo numrico) a cdigo mquina utilizando la tecnologa existente, probada, optimizada y confiable (lo que evita el desarrollo de nuevos compiladores). Facilitan la incorporacin de las nuevas herramientas de desarrollo en sistemas ya elaborados (por ejemplo, la consulta a bases de datos relacionales substituyendo las instrucciones de acceso a archivos por consultas en SQL). Resulta comn encontrar que el flujo de proceso en los lenguajes de cuarta generacin o de propsito especial puede resultar demasiado inflexible para su implantacin en los procesos de una empresa, flujos de negocio o interaccin con otros elementos de software y hardware, de aqu que se recurra o prefiera la creacin de sistemas hbridos soportados en programas elaborados en lenguajes de tercera generacin con instrucciones empotradas de nivel superior o propsito especial. Un pseudocompilador es un programa que actua como un compilador, salvo que su producto no es ejecutable en ninguna mquina real sino en una mquina virtual. Un pseudocompilador toma de entrada un programa escrito en un lenguaje determinado y lo transforma a una codificacin especial llamada cdigo de byte. Este cdigo no tendra nada de especial o diferente al cdigo mquina de cualquier microprocesador salvo por el hecho de ser el cdigo mquina de un microprocesador ficticio. Tal procesador no existe, en su lugar existe un programa que emula a dicho procesador, de aqu el nombre de mquina virtual. La ventaja de los pseudocompiladores que permite tener tantos emuladores como microprocesadores reales existan, pero slo se requiere un compilador para producir cdigo que se ejecutar en todos estos emuladores. Este mtodo es una de las respuestas ms aceptadas para el problema del tan ansiado lenguaje universal o cdigo portable independiente de plataforma. Un intrprete es un programa que ejecuta cada una de las instrucciones y declaraciones que encuentra conforme va analizando el programa que le ha sido dado de entrada (sin producir un programa objeto o ejecutable). La ejecucin consiste en llamar a rutinas ya escritas en cdigo mquina cuyos resultados u operaciones estn asociados de manera unvoca al significado de la instrucciones o declaraciones identificadas. Los intrpretes son tiles para el desarrollo de prototipos y pequeos programas para labores no previstas. Presentan la facilidad de probar el cdigo casi de manera inmediata, sin tener que recurrir a la declaracin previa de secciones de datos o cdigo, y poder hallar errores de programacin rpidamente. Resultan inadecuados para el desarrollo de complejos o grandes sistemas de informacin por ser ms lentos en su ejecucin.

4. Visin general del proceso de compilacin.


La figura 1 presenta un diagrama que ilustra de forma general las dos fases que componen al proceso de compilacin y cada fase desglosada en sus etapas componentes. En una primera fase 1 de anlisis el programa es descompuesto en sus elementos fundamentales. En la posterior fase 2 de sntesis es construido el programa ejecutable correspondiente a los elementos identificados en la fase previa. El proceso es irreversible e inclusive puede considerarse destructivo, ya que no hay 3 forma de reconstituir el programa fuente a partir del ejecutable . nicamente por facilidad descriptiva, el proceso es presentado con las etapas que componen a cada fase perfectamente diferenciadas y separadas; en la prctica se ha demostrado que productos muy rpidos y eficientes pueden ser desarrollados alterando el orden de algunas etapas o entremezclndolas.

Figura 1.- Etapas del proceso de compilacin. La entrada a este proceso es por supuesto el programa fuente. Por lo general ste es un archivo que es creado por el usuario como un texto ASCII con o sin un formato especfico aunque tambin puede ser el resultado de algn otro proceso. A partir de este archivo diversos pasos pueden ser llevados a cabo: Preprocesamiento.- Un preprocesador es la estrategia generalmente adoptada como solucin a lenguajes huspedes, extensiones, lenguajes 4GL, o lenguajes de dominio especfico. El preprocesador es un traductor encargado de transformar dichas instrucciones a instrucciones del lenguaje anfitrin (generalmente un tradicional 3GL) sobre las cuales finalmente trabajar el compilador. Esta etapa es definitivamente opcional. Anlisis Lxico.- En esta fase, la cadena de caracteres que conforma al programa fuente es despojada de comentarios, espacios en blanco y otros elementos superfluos. El programa encargado de hacer esto es conocido como un scanner, y de aqu que al proceso se le refiera comunmente como scanning (exploracin). Durante esta fase se identifican los elementos gramaticales usados en la creacin del programa. Cada elemento identificado es substituido por un cdigo numrico conocido como token.

Anlisis Sintctico.- La cadena de tokens resultante es alimentada a un programa conocido como parser. El parser es el encargado de verificar que la secuencia y disposicin de los tokens corresponda con la sintaxis del lenguaje. Este proceso de verificacin sintctica es conocido como parsing y es completamente guiado por la gramtica del lenguaje. Anlisis Semntico y Generacin de Cdigo.- Una vez que la secuencia de tokens ha sido validada, sta es utilizada para identificar el sentido de la accin a realizar y generar el correspondiente cdigo en lenguaje mquina. Algunos compiladores recurren a la creacin de cdigo intermedio para posteriormente generar la secuencia de instrucciones mquina necesarias, mientras que algunos otros proceden a la generacin directa del cdigo mquina. Optimizacin de Cdigo.- Esta es otra etapa opcional. La optimizacin de cdigo es una actividad que raya en un arte dominado solamente por un experimentado programador de ensamblador y conocedor de la arquitectura del computador. Existen algunas tcnicas desarrolladas al respecto pero nada supera a la experiencia de un hbil programador. En esta etapa, ya sea posteriormente o trabajando al unsono con el generador de cdigo, secuencias de instrucciones y estructuras de datos son examinadas buscando su substitucin con secuencias, instrucciones o estructuras ms cortas, rpidas o eficientes. Ligado.- Como paso final, todas las referencias pendientes de resolver sobre rutinas, mdulos, bibliotecas y dems porciones de cdigo necesarias para el funcionamiento del programa son cubiertas en esta parte. La resolucin puede consistir desde el proporcionar meramente una direccin o llamado a una funcin hasta la inclusin de enormes porciones de cdigo. Al final, como producto de todo este proceso, lo que se obtiene es un programa escrito en cdigo mquina que puede ser cargado en memoria y ejecutado. El proceso seguido por un intrprete es ligeramente diferente, ya que mientras que cubre todas las etapas de anlisis no cuenta con una fase sntesis. Un intrprete no genera cdigo, se limita a invocar rutinas ya escritas (proceso muchas veces llamado de interpretacin). La siguiente figura ilustra esto.

Figura 2.- Etapas del proceso de interpretacin. En el caso de un pseudo-compilador, cuyo caso mejor conocido es el de Java, la diferencia consiste en el cdigo generado. Mientras que todas las etapas de un compilador son cubiertas, el programa ejecutable no es creado para ser ejecutado en un procesador "real" sino para uno "hipottico" o "imaginario" y conocido generalmente como mquina virtual. La mquina virtual es otro programa cuyo funcionamiento simula al de un procesador. Este procesador recibe de entrada el pseudo-cdigo creado por el compilador y procede a la ejecucin de las instrucciones contenidas en ste; puede verse que no se trata mas que de un intrprete muy sencillo.

Figura 3.- Etapas del proceso de pseudo-compilacin. La siguiente figura ilustra con mayor detalle lo que pasa en cada una de las etapas del proceso de compilacin. El procesamiento de instrucciones de un lenguaje huesped (como puede ser SQL) correra a cargo del pre-procesador, siendo transformadas instrucciones del lenguaje anfitrin. Durante la fase de anlisis lxico el scanner se encarga de identificar cada uno de los elementos usados para escribir el programa fuente, substituyendo a cada uno de estos por un cdigo numrico nico (tokens). En este proceso se eliminan comentarios y espacios en blanco. Los tokens son alimentados al analizador sintctico que valida que su disposicin est acorde a las reglas del lenguaje. Validado este el analizador semntico procede a identificar el propsito de las diversas secuencias de tokens y buscar generar representaciones intermedias de cada accin o directamente cdigo mquina. Este posteriormente es optimizado.

Figura 4.- Detalle del flujo de datos y acciones en el proceso de compilacin.

Você também pode gostar