You are on page 1of 12

Compiladores e intrpretes Introduccin

Profesor: Eridan Otto

Introduccin
Perspectiva histrica
Motivacin Definiciones Componentes y fases de un compilador

Compiladores e intrpretes Introduccin


Definicines bsicas
Traductor: desde un punto de vista general, es un proceso que convierte un programa escrito o texto en un lenguaje fuente a un texto o programa escrito en un lenguaje de destino.Incluyen tanto a los compiladores como a los intrpretes. Compilador: Proceso de traducin que convierte un programa fuente escrito en un lenguaje de alto nivel, a un programa objeto en cdigo de mquina, listo por tanto para su ejecucin en el computador. Programa Fuente

Compilador

Programa Objeto

Mensajes de Error

Compiladores e intrpretes Introduccin


Definicines bsicas Intrprete : Ejecuta una a una las instrucciones de un programa de alto nivel. La entrada es un archivo en un lenguaje de alto nivel, la diferencia con un compilador es que la salida es una ejecucin Ej:Basic, LISP, PROLOG son interpretados Ventaja: fcil depuracin Desventaja:lentitud y consumo de recursos (pues el intrprete ocupa tiempo y memoria)

Compiladores e intrpretes

Introduccin
Perspectiva histrica:
Aos 40-50

Aos 50-60

Aos 60-

Compiladores e intrpretes

Introduccin. Perspectiva histrica:


En los 50 los compiladores eran considerados programas muy difciles de construir Ejemplo: Fortran evolucion durante 18 aos de trabajo en grupo. Hoy en da se han desarrollado tcnicas sistemticas,entornos de programacin y herramientas de software que facilitan la tarea de desarrollo de compiladores, intrpretes y traductores

Compiladores e intrpretes

Introduccin. Perspectiva histrica:


Los primeros compiladores traducan frmulas aritmticas a cdigo de mquina No puede darse una fecha exacta del primer desarrollo Varios grupos en forma independiente desarrollaron tcnicas de anlisis y diseo de compiladores. Hoy en da hay gran variedad de compiladores para mltiples lenguajes de alto nivel , disponibles para muchas plataformas, es decir cubren gran variedad de cdigos de mquina

Compiladores e intrpretes

Introduccin.
Conceptos Relacionados
Lenguajes de programacin

Arquitectura de computadores Teora de lenguajes

Compiladores Ingeniera de software

Teora de algoritmos

Compiladores e intrpretes

Introduccin.
Motivacin: el conocimiento de estos tpicos permite
Saber ms sobre correccin y eficiencia del cdigo Profundizar ms sobre lenguajes: Tipos:clases, estticos, dinmicos, polimorfismo, sobrecarga de operadores, conversiones Estructura de bloques, mbitos Paso de parmetros Gestin de memoria, punteros

Compiladores e intrpretes

Introduccin.
Motivacin: el conocimiento de estos tpicos permite
Aplicacin de la teora a la prctica Antes de el uso de teora de autmatas y lenguajes formales, tcnicas de programacin, los compiladores eran muy malos. Aplicar teora y herramientas a otros campos: Intrpretes de comandos y consultas en interfases usuarias Formateadores de textos (latex) Lenguajes de simulacin (GPSS) Editores de texto

Compiladores e intrpretes

Introduccin.
Compilador, definiciones I:
Ensamblador Compilador de bajo nivel, el lenguaje fuente tiene una estructura simple que permite una traduccin , una a una de una sentencia fuente a una en cdigo de mquina. Compilador cruzado: Compilador que toma un lenguaje fuente y genera un cdigo objeto, este objeto es para una plataforma o computador distinto en el que se compila.Ejemplo uso: fase de desarrollo de nuevos computadores.

Compiladores e intrpretes

Introduccin.
Compilador, definiciones II:
Compilar- linkear-ejecutar versus compilar-ejecutar: La primera opcin permite la modularizacin, compilando por separado las partes y luego enlazndolas. La segunda opcin es la ms simple. El compilador deja en memoria directamente un mdulo cargable que se ejecuta a continuacin. Compilador de una o varias pasadas: pasada:es el recorrido total de todo el fuente, con algn objetivo especfico. Por ejemplo, recursin indirecta: a()-?b() y b()--?a(), se pueden hacer dos pasadas.

Compiladores e intrpretes

Introduccin.
Compilador, definiciones III:
Compilador incremental (interactivo o conversacional): Si se descubren errores, luego de modificado el fuente, se compilan slo las modificaciones. Autocompilador: Compilador escrito en el propio lenguaje que compila Facilita la portabilidad, ejemplo C. Metacompilador: Es un programa que tiene como entrada una gramtica y genera el compilador del lenguaje definido por la misma, en realidad genera el cdigo del autmata, se debe aadir cdigo para lograr un compilador. Ej: Lex,Yacc

Compiladores e intrpretes

Introduccin.
Compilador, definiciones IV:
Decompilador Es un programa que tiene como entrada cdigo de mquina y lo traduce a un lenguaje de alto nivel. En la prctica es muy difcil volver atrs, en la prctica existen desensambladores, sirven para opciones de depuracin. Preprocesador Es un proceso anterior a la compilacin que permite modificar el programa fuente usando macroinstrucciones y directivas. Por ejemplo en C: #define constante 100. #include modulo.c

Compiladores e intrpretes Introduccin. Esquema de compilacin


fuente

compilacin

compilador Listado Diagnsticos Correccin de errores

objeto si Error? no

ejecucin
datos

Programa objeto

Resultados

Compiladores e intrpretes Introduccin. Esquema de compilador


Estructura de Programa Fuente Biblioteca de Archivos Relocalizable Cdigo de Mquina Absoluto

Preprocesador

Compilador Programa Fuente Programa Objeto

Ensamblador

Editor de carga Cdigo de Mquina Relocalizable

Compiladores e intrpretes Introduccin. Fases de un compilador


Un compilador se divide en dos fases principales
Anlisis y Generacin. Tabla de Smbolos

Anlisis
Analizador Analizador Analizador Lxico Sintctico Semntico Generador Cdigo Intermedio

Generacin
Optimizador Generador de Cdigo

Entrada Salida

Tratamiento de errores

Compiladores e intrpretes Introduccin. Fases de un compilador


Analizador Lxico (scanner)
Realiza un anlisis lineal del archivo. La cadena de entrada se lee de izquierda a derecha y se va agrupando en componentes lxicos (TOKENS), que son secuencias de caracteres con un significado colectivo. Por ejemplo:nmeros, identificadores (variables, constantes, tipos, nombres de funciones...), palabras reservadas, signos de final de instruccin. Cada componente es asociada a la categora que pertenece. Trozo de programa Tokens ................ resX:= a + b * c; resY:= 3 + b * c; ..................
(id,resX) (op,:=) (id,a) (op,+) (id,b)

Analizador Lxico

(op,*)

(op, c)

(punt,;)

(id,resY) (op,:=) (num,3) (op,+) (id,b) (op,*) (op, c) (punt,;)

Compiladores e intrpretes Introduccin. Fases de un compilador


Analizador sintctico (parser)
Realiza un anlisis jerrquico agrupando los componentes lxicos en frases gramaticales que el compilador utiliza. Genera un rbol de derivacin. El ejemplo anterior se deriva de la siguiente gramtica:
sentencias ::= sentencia ; sentencias | sentencia sentencia ::= asignacion | condicional | iterativa asignacion ::= id := exp condicional ::= if condicion then sentencias else sentencias; iteretiva ::= while condicion do sentencias; exp ::= id | num | id op exp | num op exp op := + | - | * | / id ::= [A-Za-z] [A-Za-z0-9]* num ::= [0-9]*

Compiladores e intrpretes Introduccin. Fases de un compilador


Analizador semntico
Busca errores semnticos, rene informacin sobre los tipos; identifica operadores y operandos en base al rbol sintctico producido en el anlisis anterior. Ejemplos de error: operacin entre tipos de datos incompatibles, rangos permitidos, existencia de variables. En cualquiera de estos tres anlisis pueden producirce errores.

:=
corX a b + * c corY

:=
+ * b c

10

Compiladores e intrpretes Introduccin. Fases de un compilador


Generador de cdigo intermedio
Algunos compiladores generan una representacin explcita del programa fuente. Este cdigo es independiente de la mquina y a veces se usa en conjunto con intrpretes, en lenguajes independientes de la plataforma como JAVA. Esta representacin debe ser fcil de producir, ayudar a la optimizacin y fcil de traducir al programa objeto. Ejemplo: cdigo de tres direcciones, donde cada instruccin tiene como mximo tres operandos, supone una CPU en la que cada posicin de memoria puede actuar como un registro de la CPU. Reglas: Cada instruccin de tres direcciones tiene a lo sumo un operador (adems de la asignacin). Puede tener menos. El compilador debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Ejemplo para la segunda instruccin: t1 = b*c t2 = int-to-real(3) corX = t1 + t2

Compiladores e intrpretes Introduccin. Fases de un compilador


Optimizacin
Esta fase trata de mejorar el cdigo intermedio, o las estructuras que generarn el cdigo definitivo, de modo de que resulte un cdigo de mquina ms rpido de ejecutar. Ejemplo: en las dos asignaciones se puede apreciar que b*c es ocupado an ambas sentencias por lo que:

:=
corX a b + * c corY

:=
+ 3

11

Compiladores e intrpretes Introduccin. Fases de un compilador


Generador de cdigo
Esta fase final de un compilador. Genera el cdigo objeto, que por lo general consiste en cdigo de mquina relocalizable o cdigo ensamblador.Las posiciones de memoria relativas se seleccionan para cada variable. El uso de los registros de la CPU es relevante.

:=
corX a b + * c corY

:=
+ 3

Push a a ->pila Push b b->pila Load ( c), R1 c->R1 Mult S, R1 b*c->R1 Store R1, R2 R1->R2 Add S, R1 a+b*c->R1 Store R1,(corX) R1 ->CorxX Add #3, R2 3+b*c->R2 Store R2,(corY) R1 ->corY

Compiladores e intrpretes Introduccin. Fases de un compilador


Agrupacin lgica de un compilador
Fase de anlisis, dependen del lenguaje fuente y son independientes de la mquina. Controla la correccin del programa fuente, manejando errores en cada etapa. Produce las estructuras necesarias para la generacin de cdigo. Fase de generacin, depende de la mquina y del lenguaje intermedio.Hace uso intensivo de la tabla de smbolos.

12

You might also like