Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comp Clase1 PDF
Comp Clase1 PDF
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
Compiladores e intrpretes
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
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;
..................
Analizador
Lxico
(op,*)
(op, c)
(op,+)
(id,b)
(punt,;)
(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