Está en la página 1de 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

Arquitectura de
computadores
Teora de
lenguajes

Lenguajes de
programacin

Compiladores

Teora de
algoritmos

Ingeniera de
software

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

Cdigo de
Mquina Absoluto
Biblioteca de
Archivos
Relocalizable

Preprocesador

Compilador
Programa
Fuente

Ensamblador
Programa
Objeto

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

Generacin

Analizador Analizador Analizador


Lxico
Sintctico Semntico

Entrada
Salida

Generador
Cdigo
Intermedio

Optimizador Generador
de Cdigo

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)

Analizador
Lxico

(op,*)

(op, c)

(op,+)

(id,b)

(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

corY
*

3
c

*
b

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

*
b

corY

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

*
b

corY

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

También podría gustarte