Sunteți pe pagina 1din 10

Universidad Nacional del Santa

Curso: Teora de Compiladores

INTRODUCCION
La computadora es la mquina ms verstil concebida por el hombre. Aunque inicialmente es construida como un mecanismo de clculo de prestaciones superiores a los primeros dispositivos mecnicos y electromecnicos, con el paso del tiempo se le incorporaron capacidades para la realizacin de operaciones lgicas y para la manipulacin de datos no numricos. Un largo proceso evolutivo ha llevado a este dispositivo calculador de la aritmtica de cifras a la generacin de informacin, teniendo como meta inmediata la manipulacin del conocimiento y como objetivo futuro la generacin de conciencia. Las actuales computadoras son capaces de realizar los ms complejos clculos aritmticos, lgicos y simblicos, de emular los ms elaborados mecanismos (incluyendo a otros computadores), de simular eventos naturales y de crear mundos virtuales. Las crecientes capacidades con que se presentan generacin tras generacin acercan a los nuevos computadores cada vez ms a la realizacin de tareas mucho ms complejas y que se antojan imposibles, como pueden ser la emulacin de la mente y el pensamiento. Todo esto se sustenta, por supuesto, en la electrnica y en la capacidad de programacin del computador. Sabemos que la electrnica del computador se denomina digital y que funciona con base en valores discretos. Sabemos que es a travs de cdigos y estrategias de representacin de datos como podemos alimentar al computador con nuestras ideas y las expresiones con que identificamos a los objetos en nuestro mundo anlogo y tridimensional. Tambin sabemos que mediante reglas de operacin perfectamente definidas podemos instruir al computador en la manipulacin de dichos datos que llevarn a la generacin de otros y a la obtencin de informacin en la resolucin de problemas. La forma de expresar dicha instruccin y la manera de llevar a cabo su traduccin a lo que el computador es realmente capaz de procesar son el tema de este curso. El tema del diseo de compiladores es usualmente visto como uno de los ms complejos, ridos y abstractos. Adicionalmente suele considerarse que estos temas no dejan de ser de un inters meramente acadmico, a menos que se trate de una enorme compaa de software dedicada a la creacin de herramientas de desarrollo. Tales creencias han dado lugar a una enorme variedad de mitos, algunos de estos por ejemplo son: "Para competir con productos de calidad en un mercado tan dinmico, amplio e internacional como es el de la informtica y computacin, se requiere de una enorme cantidad de recursos humanos, materiales y econmicos. El desarrollo de herramientas de programacin como intrpretes y compiladores, ya sea para uso propio o comercializacin, est reservado para las empresas que disponen de dichos recursos. La mediana y pequea empresa no cuenta con los recursos necesarios para desarrollos internos de esta naturaleza, adems de que no los necesita; si se trata de empresas dedicadas al desarrollo de programas su mercado o est nicamente en el campo de la consultora y el desarrollo de sistemas a la medida o programacin por contrato." "El conocimiento terico asociado con el diseo y creacin de compiladores y lenguajes de programacin no son necesarios para un gerente de sistemas o lder de proyecto, esto es slo para el acadmico, lo importante es estar al da en lo que a tendencias y productos de hardware y software se refiere."

Docente: Ing. Mirko Manrique Ronceros

~1~

Universidad Nacional del Santa

Curso: Teora de Compiladores

"Las actividades en informtica y computacin en nuestro pas estn dedicadas al desarrollo de software administrativo en su mayora. Es poco probable que los profesionistas en estas reas se enfrenten al reto del desarrollo de un compilador o de un lenguaje de programacin."

"Es ms barato comprar software que desarrollarlo. Desarrollar software es lento y caro, es ms rpido comprar algo hecho." "El diseo de compiladores y lenguajes de programacin es una actividad reservada para investigadores y catedrticos en ciencias computacionales." "Siempre hay que usar un compilador, el cdigo fuente queda seguro y la ejecucin es ms rpida. Los intrpretes no son adecuados para el desarrollo de sistemas de informacin, estos son slo un recurso para la programacin de computadoras pequeas y para el usuario final."

"Los compiladores son hechos por nerds o gurs de la computacin que dominan obscuros lenguajes de programacin, programan en lenguaje mquina y tienen un profundo conocimiento de la arquitectura del computador."

Aunque al final del curso se darn cuenta el porqu las aseveraciones anteriores deben ser consideradas como falsas o imprecisas.

Lenguaje C++, Fortran, COBOL, Pascal Java


AWK, Basic, SQL, Lisp, Forth

Modelo Compilado

Pseudo Compilado Interpretado

Caractersticas Sintaxis especfica para tipos de datos. Ideal para el desarrollo de programas veloces o de tamao reducido. Permiten la explotacin de instrucciones especiales del microprocesador. Mayor seguridad para evitar alteracin o robo de cdigo fuente. Transportabilidad absoluta. Requiere de una mquina virtual para ser ejecutado. Mejor desempeo que un programa interpretado pero ms lento que uno compilado. Lenguajes de sintaxis rigurosa. Requiere del intrprete para su ejecucin. Desempeo lento. Ideal para desarrollos rpidos (prototipos), operaciones no planeadas y programas pequeos y simples. Lenguajes de sintaxis ms relajadas y mayor libertad para la conversin de datos.

Con el paso del tiempo los diversos lenguajes de programacin han madurado. Hoy en da es posible categorizarlos por las caractersticas que han venido exhibiendo con dicha maduracin. De manera que tenemos: 1GL o lenguajes de primera generacin.- Esta fue (y continua siendo) aquella a la que pertenece el

Lenguaje Mquina, el nivel en el que datos instrucciones son dados como una serie de cdigos
(binarios, octales, decimales o hexadecimales). 2GL o lenguajes de segunda generacin.- Todos aquellos lenguajes ensambladores. 3GL o lenguajes de tercera generacin.- Tambin conocidos como lenguajes de nivel alto. 4GL o lenguajes de cuarta generacin.- Generalmente un lenguaje 4GL es un lenguaje de propsito especfico, que proveen un lenguaje muy cercano al lenguaje natural o simblico manejado en un mbito especfico. Muchos lenguages son llamados 4GL cuando en realidad slo son una mezcla de 3GL y 4GL o 3GL con extensiones de de dominio especcifico. Por ejemplo, el comando list en dBASE es un comando propio de un 4GL pero las aplicaciones programadas en dBASE son 3GL. El siguiente

Docente: Ing. Mirko Manrique Ronceros

~2~

Universidad Nacional del Santa


contenido en pantalla.

Curso: Teora de Compiladores

ejemplo ilustra la diferencia de una sintaxis 3GL y 4GL para abrir un registro de clientes y mostrar su 5GL o lenguajes de quinta generacin.- Estos lenguajes comienzan a ser identificados como aquellos que hacen uso de los ambientes grficos para llevar a cabo la programacin del computador a travs de iconos o elementos grficos similares.

COMPILADORES Y PROGRAMAS RELACIONADOS: DEFINICIONES Y CONCEPTOS


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.

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

INTERPRETE
Un intrprete, por otra parte, no lleva a cabo tal transformacin; en su lugar obtiene los resultados conforme va analizando la entrada. 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. Los traductores son clasificados en compiladores, ensambladores y preprocesadores.

Compiladores
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

Docente: Ing. Mirko Manrique Ronceros

~3~

Universidad Nacional del Santa


compilador.

Curso: Teora de Compiladores

un traductor. La forma de como llevar a cabo tal traduccin es el objetivo central en el diseo de un

Programa Fuente

Compilador

Programa Objeto

Un compilador es un programa muy complejo con un nmero de lneas de cdigo que puede variar de 10,000 a 1,000.000. Escribir un programa de esta naturaleza o incluso comprenderlo, no es tarea fcil, y la mayora de los cientficos y profesionales de la computacin nunca escribirn un compilador completo.

Ensamblador
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 destinada para las reas de datos, cdigo, pila y montculo necesarios y otorgados para su ejecucin. La incorporacin de datos y cdigo necesarios para la carga del programa y su ejecucin.

Precompilador
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

Docente: Ing. Mirko Manrique Ronceros

~4~

Universidad Nacional del Santa

Curso: Teora de Compiladores

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.

Pseudocompilador
Un pseudocompilador es un programa que acta 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.

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 objetos, a un archivo que es directamente ejecutable. En este sentido, puede hacerse una distincin entre cdigo objeto (cdigo 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 asignadotes 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 estas en cualquier sitio de la memoria. Se

Docente: Ing. Mirko Manrique Ronceros

~5~

Universidad Nacional del Santa


una direccin base, o de inicio, dada.

Curso: Teora de Compiladores

dice que tal cdigo es relocalizable y un cargador resolver todas las direcciones relocalizables relativas a El uso de un cargador hace mas 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.

Editores
Los compiladores por lo regular aceptan programas fuente escritos utilizando cualquier editor que pueda producir un archivo estndar, tal como un archivo ASCII. Ms recientemente, los compiladores han sido integrados junto con los 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 denominaban 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 ejecucin en un programa compilado. A menudo est integrado 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 de 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 de cules funciones se ha invocado y cules 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.

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

Docente: Ing. Mirko Manrique Ronceros

~6~

Universidad Nacional del Santa

Curso: Teora de Compiladores

PROCESO DE COMPILACION
Un compilador se compone internamente de varias etapas, o fases que realizan distintas operaciones lgicas. Es til pensar en estas fases como piezas separadas dentro del compilador, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la prctica a menudo se integren juntas.

Figura 1.- Etapas del proceso de compilacin.

Docente: Ing. Mirko Manrique Ronceros

~7~

Universidad Nacional del Santa

Curso: Teora de Compiladores

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 comnmente 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 mquinas 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.

Docente: Ing. Mirko Manrique Ronceros

~8~

Universidad Nacional del Santa

Curso: Teora de Compiladores

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 ms que de un intrprete muy sencillo.

Figura 3.- Etapas del proceso de pseudo-compilacin.

Docente: Ing. Mirko Manrique Ronceros

~9~

Universidad Nacional del Santa

Curso: Teora de Compiladores

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.

Docente: Ing. Mirko Manrique Ronceros

~ 10 ~

S-ar putea să vă placă și