Sie sind auf Seite 1von 26

Lenguajes y Compiladores Tema 1 - Introduccin a los Compiladores

Ing. Carlos Enrique Chinga Ramos


Departamento de Sistemas e Informtica Universidad Jos Faustino Snchez Carrin

Resumen del tema


Traductores Estructura de un compilador Descripcin general de las fases de compilacin
Faces de anlisis (front - end) Faces de sntesis (back - end) Agrupamiento de las fases

Aplicaciones prcticas

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Evolucin de los Compiladores

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Traductores
Los lenguajes permiten la comunicacin.

El receptor de un mensaje debe entenderlo y actuar en consecuencia, para ello debe antes procesarlo.
Transforma un texto escrito en un lenguaje (fuente) a otro texto en un lenguaje distinto (objeto), manteniendo el significado del texto inicial.

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

La necesidad de traduccin

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Clasificacin Lenguajes de Programacin


Lenguajes mquina
Son los lenguajes de ms bajo nivel: secuencias binarias de ceros o unos. Histricamente, los primeros.

Lenguajes Ensambladores
Segunda generacin de lenguajes. Versin simblica de los lenguajes maquinas (MOV,ADD, etc.).

Lenguaje de alto nivel


Lenguaje de tercera generacin (3GL)
Estructuras de Control, variables de tipo, recursividad, etc. Ej. C, Pascal, C++, Java, etc.

Lenguajes orientado a problemas


Lenguaje de cuarta generacin (4GL )
Ej. SQL
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Tipo de Traductor: intrprete


El interprete ejecuta cdigo segn lo va interpretando.
Cada vez que se escribe una lnea el programa comprueba si es correcta, si lo es, la ejecuta. La ejecucin es interactiva. Los interpretes ms puros no guardan copia del programa que se est escribiendo. Ejemplos: Procesos por lotes, CAML, etc. El interprete siempre debe estar presente.

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Tipos de traductor: compilador


El compilador es el traductor ms extendido. Realiza un anlisis y genera un programa ejecutable.

El programa ejecutable, una vez creado, no necesita el compilador para funcionar.

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Compilador vs Interprete
Compilador
Se compila una vez, se ejecuta n veces. El proceso de compilacin tiene una visin global de todo el programa, por lo cual la gestin de errores es mas eficiente. La ejecucin es mas rpida.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Intrprete
Se traduce cada vez que se ejecuta. Permite interaccionar ms con el cdigo en tiempo de ejecucin. Necesita menos memoria.

Fases de un programa
La vida de un programa, desde que se escribe hasta que se ejecuta en una plataforma, se pueden distinguir dos periodos de tiempo:
Tiempo de compilacin: Periodo en el que el programa fuente se traduce al programa objetivo equivalente. El tiempo de ejecucin: Tiempo durante el cual el programa objeto se ejecuta sobre una plataforma especifica.

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Tareas de un compilador
Comprobacin de los elementos del lenguaje: Que elementos estn presentes? Comprobacin de la combinacin de los elementos del lenguaje: Es correcta su combinacin? Comprobacin del significado de los elementos del lenguaje: El significado de lo especificado es valido ? Generacin de instrucciones para una maquina.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Aqu

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Estructura de un compilador (detalle)

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Otros elementos
Tabla de smbolos: estructura de datos que contiene todos los identificadores reconocidos por el compilador.
El gestor de la tabla de smbolos interacta con cada una de las fases del compilador, consultando, aadiendo y modificando su informacin.

El pre compilador es un modulo opcional que se ejecuta antes de invocar al compilador:


El programa fuente incluye estructuras, instrucciones o declaraciones escritas en otro lenguaje, denominado lenguaje empotrado. Todas las instrucciones del lenguaje empotrado deben ser traducidas a instrucciones del lenguaje anfitrin para que puedan ser compiladas.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Gestin de errores
Se utiliza en todas las fases, pero especialmente en las de anlisis sintctico y semntico. Es una tarea difcil:
Un error puede ocultar otros. Un error puede provocar una avalancha de otros.

Importante tener un buen manejo de errores:


Que detecte todos los errores. Que no deje de compilar al detectar el primer error.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Estructura de un Compilador
El desarrollo de un compilador es complejo, generalmente, se simplifica si se divide en dos fases enlazadas por el cdigo intermedio. Problema: m lenguajes fuente y n lenguajes objeto, m x n compiladores diferentes o bloques. Solucin: dividir el compilador en 2 fases.
Fases de Anlisis (frontend): depende del lenguaje fuente, independiente del lenguaje objeto. Fases de Sntesis (Back-end): depende del lenguaje objeto y es independiente del lenguaje fuente. De esta manera, tenemos m fases de anlisis y n fases de sintesis -> m+n bloques
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Estructura de un Compilador

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Fases de anlisis
En esta fase el programa es descompuesto en sus elementos fundamentales. Abarca el anlisis lxico, el anlisis sintctico y el anlisis semntico.

Esta Fase verifica si el programa en lenguaje fuente es correcto, y recoge la informacin necesaria en la tabla de smbolos para el modulo de sntesis.
Si detecta la existencia de errores, se notifican por medio del gestor de errores.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Fases de Sntesis
Esta fase se lleva a cavo una vez que el modulo de anlisis ha verificado que el cdigo fuente es correcto. La informacin recogida en el modulo de anlisis y almacenada en la tabla de smbolos se emplea en la fase de sntesis para la generacin de cdigo objeto.

Abarca la generacin de cdigo intermedio, y en el caso de los compiladores, la generacin de cdigo y la optimizacin del mismo.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Agrupamiento de fases
Un compilador real no sigue la estructura descrita, pues seria poco eficiente. En la practica, todas las funciones sobre la gramtica se agrupan en un solo modulo (sintctico + semntico + cdigo intermedio) que analiza la sintaxis a la vez que la semntica y va generando cdigo intermedio al mismo tiempo. Para unir la generacin de cdigo intermedio, se asocia a cada regla gramatical las instrucciones para generar el cdigo intermedio. De esta forma se consigue un compilador mas rpido y sencillo: compilador dirigido por la sintaxis.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Agrupamiento de fases
Front-end: depende del lenguaje fuente, independiente del lenguaje objeto. Back-end: depende del lenguaje objeto y es independiente del lenguaje fuente.

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Un primer vistazo al proceso

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Tipos de compilador
Cruzado: genera cdigo en lenguaje objeto para una plataforma diferente de la que se est utilizando para compilar. De una o varias pasadas, segn el nmero de veces que lea el programa fuente.

Auto compilador: compilador escrito en el mismo lenguaje que va a compilar (el lenguaje fuente y el de implementacin coinciden)
Compilador con montador: compila distintos mdulos de forma independiente y despus es capaz de enlazarlos. Descompilador: pasa de lenguaje objeto a fuente.
Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Aplicacin de estas tcnicas


Diseo de un compilador (poco probable) Tratamiento de ficheros de texto con informacin estructurada. Procesadores de texto. Traduccin de formatos de ficheros Gestin de Base de Datos Procesamiento de lenguaje natural: Calculo simblico.
En anlisis lxico y sintctico.

En exploracin y proceso de ficheros e interfaz de usuario.

Reconocimiento de formas.

Manejo simblico de formulas.


En deteccin de patrones de texto, reconocimiento automtico de habla o la visin por computador.

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Bibliografa bsica
Compilers: Principles, Techniques, and Tools, 2nd Ed. A.V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Addison Wesley, 2007

Compiladores: principios, tcnicas y herramientas. A.V. Aho, R Sethi, J.D. Ullman. Addison-Wesley Iberoamerica.1990

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos

Bibliografa complementaria
K.C. Louden, Compiler Contruction: Principles and Practice. Broks/Cole Publishing. 1997. Muchnick, S., Advanced Compiler Design Implementation. Morgan Kaufmann Pulishers, 1997. Wirth, N. Compiladores. Editorial Rueda, 1990.

Lenguajes y Compiladores Ing. Carlos Enrique Chinga Ramos