You are on page 1of 29

CONDICIONES DE LA

MATERIA
Universidad Nacional de Jujuy
Facultad de Ingeniería
COMPILADORES
Elizabeth Reinoso
edrreinoso@fi.unju.edu.ar
DOCENTES DE LA MATERIA
 PROFESOR A CARGO
 ING. ELIZABETH REINOSO
 CORREO: edrreinoso@fi.unju.edu.ar
eliro30@arnet.com.ar
 PROFESORA DE PRACTICAS
 ING. FABIANA ARAGON
 CORREO: fraragon@fi.unju.edu.ar



Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
HORARIOS DE CLASES
 TEORIAS
 ING. ELIZABETH REINOSO
 LUNES DE : 11:00 A 14:00
 AULA 17
 CONSULTA: MARTES DE 16:00 A 18:00 GAB. 18
 PRACTICAS
 ING. FABIANA ARAGON
 MIERCOLES DE : 10:00 A 13:00
 AULA 17
 CONSULTA: JUEVES DE 15:00 A 16:00 GAB. 18



Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
CONDICIONES DE LA
MATERIA
 CUATRIMESTRAL
 2 PARCIALES
 UN RECUPERATORIO
 ENTREGA DE TRABAJOS PRACTICOS ANTES
DE CADA PARCIAL
 ENTREGA DE TRABAJO FINAL.

Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
CONDICIONES DE
EVALUACION
REGIMEN DE REGULARIDAD
 Para regularizar la materia los alumnos deberán aprobar
 Los prácticos de programación propuestos (fuente y
ejecutable) incluyendo un informe del trabajo realizado.
 Dos exámenes parciales 1 teórico y 1 práctico o sus
respectivas recuperaciones. Setenta por ciento (50%) es
el porcentaje mínimo, de los ejercicios y/o preguntas a
resolver, necesario para aprobar cada parcial
 La entrega del trabajo final dado (fuente y ejecutable)

Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
CONDICIONES DE
EVALUACION
REGIMEN DE PROMOCION
 Para promocionar la materia los alumnos deberán
aprobar:
1. Los prácticos de programación propuestos (fuente y
ejecutable) incluyendo un informe del trabajo realizado.
2. Dos exámenes parciales 1 teórico y 1 práctico o sus
respectivas recuperaciones. Setenta por ciento (70%) es
el porcentaje mínimo, de los ejercicios y/o preguntas a
resolver, necesario para aprobar cada parcial.
3. La entrega del trabajo final dado (fuente y ejecutable)
 La nota final se computará promediando las notas
obtenidas en los puntos 1 , 2 y 3.
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
FECHAS TENTATIVAS DE
PARCIALES
 1° PARCIAL: 07 DE MAYO DE 2012
 2° PARCIAL : 18 DE JUNIO DE 2012
 RECUPERATORIO 1° Y 2° PARCIAL: 25
DE JUNIO
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
INTRODUCCION
Universidad Nacional de Jujuy
Facultad de Ingeniería
COMPILADORES
Elizabeth Reinoso
edrreinoso@fi.unju.edu.ar
Objetivos Generales
 Aprender qué es un compilador
 Conocer los tipos de compiladores que existen
 Conocer la diferencia entre compilador e interprete
 Familiarizarse con el contexto de un compilador
 Aprender la estructura y fases de un compilador
Eliz9abeth Reinoso: edrreinoso@fi.unju.edu.ar
Índice General
 ¿Qué es un compilador?
 Compiladores e interpretes
 Contexto de un compilador
 Tipos de compiladores
 Estructura de un compilador
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
¿Qué es un Compilador?
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Lenguaje
Fuente
TRADUCTOR
Lenguaje
Objeto
Lenguaje
Fuente
Alto Nivel
Bajo Nivel
Traductor
Compilador
Un compilador es un programa que lee un programa escrito
en lenguaje fuente, y lo traduce a un lenguaje objeto de bajo
nivel. Además generará una lista de los posibles errores que
tenga el programa fuente
Compiladores e Interpretes
 Compiladores
 Una única compilación
 Mayor velocidad ejecución
 Mayor detalle de errores
 Mayor consumo de memoria
 Interpretes
 Interpretación en ejecución
 Menor velocidad ejecución
 Menor detalle de errores
 Menor consumo de memoria
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Contexto de un Compilador
 Contexto
 Precompilador
 Compilador
 Enlazador (montador)
 Depurador
 Ensamblador
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
.C .H
Precompilador
.C
Compilador
.ASM
Ensamblador
.OBJ .OBJ .OBJ
Enlazador
.ASM .EXE
.LIB
Ensamblador
.DLL
WIN.EXE
.EXE
Tipos de Compiladores
 Tipos de compiladores
 Ensamblador
 Compilador cruzado
 Compilador con montador
 Autocompilador
 Metacompilador
 Descompilador
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Estructura de un Compilador
Análisis Léxico
Prog. Fuente
Análisis Sintáctico
Análisis Semántico
Generación de Código
Intermedio
Optimización de Código
Intermedio
Generación de Código
Objeto
Prog. Objeto
Tabla de
Símbolos
Gestión de
Errores
Independencia
Física
Dependencia
Física
Análisis Léxico
 Tipos de tokens
 Específicos
 Palabras reservadas
 Separadores
 Operadores
 No específicos
 Identificadores
 Constantes
 Etiquetas
 Estructura
 Tipo
 Lexema

El analizador léxico o scanner, transforma
el texto fuente en una secuencia ordenada
de elemento léxicamente válidos (tokens)
G. Errores
Tabla de
Simbolo
Análisis Léxico
w
h
i
l
e
[WORDRESERVED, WHILE]
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Análisis Léxico
 Tipos de tokens
 Específicos
 Palabras reservadas
 Separadores
 Operadores
 No específicos
 Identificadores
 Constantes
 Etiquetas
 Estructura
 Tipo
 Lexema

El analizador léxico o scanner, transforma
el texto fuente en una secuencia ordenada
de elemento léxicamente válidos (tokens)
G. Errores
Tabla de
Simbolo
Análisis Léxico
w
h
i
l
e
[WORDRESERVED, WHILE]
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Los errores léxicos son
difíciles de detectar y
suelen delegarse en el
análisis sintáctico
Error
Análisis Léxico
 Tipos de tokens
 Específicos
 Palabras reservadas
 Separadores
 Operadores
 No específicos
 Identificadores
 Constantes
 Etiquetas
 Estructura
 Tipo
 Lexema

El analizador léxico o scanner, transforma
el texto fuente en una secuencia ordenada
de elemento léxicamente válidos (tokens)
G. Errores
Tabla de
Símbolo
Análisis Léxico

d
a
d
e
[ID, “edad”]
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
ID
Análisis Sintáctico
 Definición


 Funciones
 Guiar la traducción
 Gestión de errores
 prelación de operadores
 A/B*C = A/(B*C)
 A/B*C = (A/B) * C
El analizador sintáctico o parser recibe los
tokens y comprueba su ordenación correcta.
Genera un árbol sintáctico
A:= B + C
Análisis Sintáctico
:=
A +
B C
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Análisis Sintáctico
 Definición


 Funciones
 Guiar la traducción
 Gestión de errores
 prelación de operadores
 A/B*C = A/(B*C)
 A/B*C = (A/B) * C
El analizador sintáctico o parser recibe los
tokens y comprueba su ordenación correcta.
Genera un árbol sintáctico
A:= B + C
Análisis Sintáctico
G. Errores
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Análisis Semántico
 Definición


 Validación
 Tipo de resultados
intermedios
 Conversiones implícitas de
tipos
 Sobrecarga de operadores
El analizador semántico comprueba que el árbol
sintáctico es semánticamente válido. Genera un
árbol semántico o etiquetado
:=
A +
B C
Análisis Semántico
:=
A +
B C
Real
Integer
Real
Tabla de Símbolos
Tipo A, B, C?
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Análisis Semántico
 Definición


 Validación
 Tipo de resultados
intermedios
 Conversiones implícitas de
tipos
 Sobrecarga de operadores
El analizador semántico comprueba que el árbol
sintáctico es semánticamente válido. Genera un
árbol semántico o etiquetado
:=
A +
B C
Análisis Semántico
:=
A +
B C
Real
Char
Real
Tabla de Símbolos
Tipo A, B, C?
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
G. de Errores
B (is char)
Generación de Código Intermedio
 Definición


 Lenguajes sencillos
 Tercetos
 Cuartetos
El generador de código intermedio transforma un
árbol semántico de una representación en un
lenguaje intermedio cercano al código objeto
WHILE (A>B) AND (A<2*B-5) DO
A:=A+B
Generación de Código
Intermedio
L1: IF A>B GOTO L2
GOTO L3
L2: T1 := 2*B
T2 := T1 – 5
IF A< T2 GOTO L4
GOTO L3
L4: A := A + B
GOTO L1
L3: …
Optimizacion de Código
 Definición

 Fases
 Independiente de la máquina
 Dependiente de la máquina
 Eliminación de saltos consecutivos
El optimizador de código realiza modificaciones sobre el código
intermedio para mejorar la eficiencia en velocidad y tamaño.
L1: IF A>B GOTO L2
GOTO L3
L2: T1 := 2*B
T2 := T1 – 5
IF A< T2 GOTO L4
GOTO L3
L4: A := A + B
GOTO L1
L3: …
L1: IF A<=B GOTO L2
T1 := 2*B
T2 := T1 – 5
IF A>= T2 GOTO L2
A := A + B
GOTO L1
L2: …
Optimizador
Optimizacion de Código
 Factorizacion de Expresiones Comunes


 Extracción de Invariantes
REPEAT
B := 1
A := A – B
UNTIL A = 0
B := 1
REPEAT
A := A – B
UNTIL A = 0
Optimizador
A := B + C + D
E := B + C + F
T1 := B + C
A := T1 + D
E := T1 + F
Optimizador
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Generación de Código Objeto
 Definición

 Lenguaje objeto
 Ensamblador
 Código máquina
El generador de código objeto transforma el código
intermedio optimizado en código objeto de bajo nivel
LD AX, B
LD BX, C
ADD AX, BX
ST AX, A
A := B + C
Generador de código
intermedio
Generador de código
objeto
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Tabla de Simbolos
 Almacena estructuras de datos
 Variables
 Constantes
 Etiquetas
 Tipos
 Valores
 Signatura de funciones
 Operaciones
 Insertar símbolo
 Consultar símbolo
 Borrar símbolo
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
Gestión de Errores
 Detección de errores
 Léxicos (se delegan al sintáctico)
 Sintácticos
 Semánticos
 Recuperación de errores
 Parar al primer error
 Recuperar volviendo a un contexto fiable
Elizabeth Reinoso: edrreinoso@fi.unju.edu.ar
 [AHO] AHO, SETHI, ULLMAN:
Compiladores: Principios, técnicas y
herramientas,: Addison-Wesley
Iberoamericana, 1990
 [GARRIDO] A. Garrido, J. Iñesta, F.
Moreno y J. Pérez. 2002. Diseño de
compiladores. Universidad de Alicante.