SlideShare una empresa de Scribd logo
1 de 31
INTRODUCCIÓN A LOS
COMPILADORES
Capítulo 1
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
1
CJAO
INTRODUCCIÓN
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
2
 Pueden ser usados
para describir
cualquier acción.
 Hay muchas formas
de describir la misma
acción.
 ¿Por qué no con lenguajes
naturales?
 ¿Español?
 “Dame la clave, Hal“.
 "Lo siento, temo que no
puedo hacer eso".
 Lenguajes Naturales:
 La misma expresión
describe muchas acciones
posibles.
 Ambiguas.
 Usamos un lenguaje de
programación
 Ejemplos: Java, C, C++,
Pascal, BASIC, Scheme.
Lenguajes Instrucciones a una PC
CJAO
LENGUAJE DE MÁQUINA
 En 1946 se desarrolló la primera computadora digital.
 En un principio, estas máquinas ejecutaban instrucciones
consistentes en códigos numéricos que señalaban a los
circuitos de la máquina los estados correspondientes a cada
operación.
 Esta expresión mediante códigos numéricos se llamó Lenguaje
Máquina, interpretado por un secuenciador cableado o por un
microprograma.
 Pero los códigos numéricos de las máquinas son engorrosos.
 Pronto los primeros usuarios de estas computadoras
descubrieron la ventaja de escribir sus programas
mediante claves más fáciles de recordar que esos códigos
numéricos.
 Al final, todas esas claves juntas se traducían manualmente a
Lenguaje Máquina.
 Estas claves constituyen los llamados Lenguajes
Ensambladores, que se generalizaron en cuanto se dio el paso
decisivo de hacer que las propias máquinas realizaran el
proceso mecánico de la traducción.
 A este trabajo se le llama ensamblar el programa.
3
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
LENGUAJES ENSAMBLADORES
 Dada su correspondencia estrecha con las operaciones
elementales de las máquinas, las instrucciones de los
lenguajes ensambladores obligan a programar
cualquier función de una manera minuciosa e
iterativa.
 Cuanto menor es el nivel de expresión de un lenguaje de
programación, mayor rendimiento se obtiene en el uso de
los recursos físicos (hardware).
 A pesar de todo, el Lenguaje Ensamblador seguía
siendo el de una Máquina, pero más fácil de manejar.
 Los trabajos de investigación se orientaron entonces hacia
la creación de un lenguaje que expresara las distintas
acciones a realizar de una manera lo más sencilla posible
para el hombre.
 Así, en 1950, John Backus dirigió una investigación en
I.B.M. en un lenguaje algebraico.
4
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
LENGUAJES DE ALTO NIVEL
 En 1954 se empezó a desarrollar un lenguaje que
permitía escribir fórmulas matemáticas de manera
traducible por una computadora.
 Le llamaron FORTRAN (FORmule TRANslator).
 Fue el primer lenguaje considerado de Alto Nivel.
 Se introdujo en 1957 para el uso de la computadora IBM
modelo 704.
 Permitía una programación más cómoda y breve que lo
existente hasta ese momento, lo que suponía un
considerable ahorro de trabajo.
 Surgió así por primera vez el concepto de un traductor,
como un programa que traducía un lenguaje a otro
lenguaje.
En el caso particular de que el lenguaje a traducir es un
lenguaje de alto nivel y el lenguaje traducido de bajo
nivel, se emplea el término compilador.
5
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
FORTRAN
 La tarea de realizar un compilador no fue fácil.
El primer compilador de FORTRAN tardó 18 años en
realizarse y era muy sencillo.
 Este desarrollo del FORTRAN estaba muy influenciado por
la máquina objeto en la que iba a ser implementado.
 Como un ejemplo de ello tenemos el hecho de que los espacios
en blanco fuesen ignorados, debido a que el periférico que se
utilizaba como entrada de programas (una lectora de tarjetas
perforadas) no contaba correctamente los espacios en blanco.
 Paralelamente al desarrollo de FORTRAN en América, en
Europa surgió una corriente más universitaria:
 Pretendía que la definición de un lenguaje fuese independiente
de la máquina y en donde los algoritmos se pudieran expresar
de forma más simple.
6
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
ALGOL
 Esta corriente estuvo muy influida por los trabajos sobre
gramáticas de contexto libre publicados por Chomsky dentro
de su estudio de lenguajes naturales.
 Con estas ideas surgió un grupo europeo encabezado por el
profesor F.L.Bauer (de la Universidad de Munich).
 Este grupo definió un lenguaje de usos múltiples
independiente de una realización concreta sobre una máquina.
 Pidieron colaboración a la asociación americana A.C.M.
(Association for Computing Machinery) y se formó un comité
en el que participó J. Backus que colaboraba en esta
investigación.
 De esa unión surgió un informe definiendo la International
Algebraic Language (I.A.L.), publicado en Zurich en 1958.
 Posteriormente este lenguaje se llamó ALGOL 58
(ALGOritmic Language).
 En 1969, el lenguaje fue revisado y llevó a una nueva versión
que se llamó ALGOL 60.
 La siguiente versión fue ALGOL 68, un lenguaje modular
estructurado en bloques.
7
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
CONCEPTOS DE LOS LENGUAJES
ALGORÍTMICOS
 En el ALGOL aparecen por primera vez muchos
de los conceptos de los nuevos lenguajes
algorítmicos:
 Definición de la sintaxis en notación BNF (Backus-
Naur Form).
 Formato libre.
 Declaración explícita de tipo para todos los
identificadores.
 Estructuras iterativas más generales.
 Recursividad.
 Paso de parámetros por valor y por nombre.
 Estructura de bloques, lo que determina la visibilidad
de los identificadores.
8
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
COMPILADOR
 Junto a este desarrollo en los lenguajes, también se iba avanzando en
la técnica de compilación.
 En 1958, Strong y otros proponían una solución al problema de que
un compilador fuera utilizable por varias máquinas objeto.
 Para ello, se dividía por primera vez el compilador en dos fases:
 "front end“
 La primera fase es la encargada de analizar el programa fuente.
 "back end“
 La segunda fase es la encargada de generar código para la máquina objeto.
 El puente de unión entre las dos fases era un lenguaje intermedio que
se designó con el nombre de UNCOL (UNiversal Computer Oriented
Language).
 Para que un compilador fuera utilizable por varias máquinas bastaba
únicamente modificar su back end.
 Aunque se hicieron varios intentos para definir el UNCOL, el
proyecto se ha quedado simplemente en un ejercicio teórico.
 De todas formas, la división de un compilador en front end y back end
fue un adelanto importante.
9
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
AUTÓMATAS DETERMINISTAS
 Ya en estos años se van poniendo las bases para la división
de tareas en un compilador.
 Así, en 1959 Rabin y Scott proponen el empleo de
autómatas deterministas y no deterministas para el
reconocimiento lexicográfico de los lenguajes.
 Rápidamente se aprecia que la construcción de
analizadores léxicos a partir de expresiones regulares es
muy útil en la implementación de los compiladores.
 En 1968, Johnson apunta diversas soluciones.
En 1975, con la aparición de LEX surge el concepto de
un generador automático de analizadores léxicos a
partir de expresiones regulares, basado en el sistema
operativo UNIX.
10
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
AUTÓMATAS DETERMINISTAS
 Un autómata finito o máquina de estado finito es un
modelo matemático de un sistema que recibe una cadena
constituida por símbolos de un alfabeto y determina si esa
cadena pertenece al lenguaje que el autómata reconoce.
 Un autómata finito determinista o AFD es un modelo
compuesto de un número finito de estados y transiciones
entre los estados y acciones.
 Un AFND o autómata finito no determinista es aquel que
presenta cero, una o más transiciones por el mismo
caracter del alfabeto.
Autómata: instrumento que posee mecanismos
automáticos.
11
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
SISTEMATIZACIÓN DE LOS
LENGUAJES DE PROGRAMACIÓN
 A partir de los trabajos de Chomsky ya citados, se produce una
sistematización de la sintaxis de los lenguajes de
programación, y con ello un desarrollo de diversos métodos de
análisis sintáctico.
 Con la aparición de la notación BNF - desarrollada en primer
lugar por Backus en 1960 cuando trabajaba en un borrador del
ALGOL 60, modificada en 1963 por Naur y formalizada por
Knuth en 1964 - se tiene una guía para el desarrollo del
análisis sintáctico.
 Los diversos métodos de parsers ascendentes y descendentes
se desarrollan durante la década de los 60.
 En 1959, Sheridan describe un método de parsing de
FORTRAN que introducía paréntesis adicionales alrededor de
los operandos para ser capaz de analizar las expresiones.
 Más adelante, Floyd introduce la técnica de la precedencia de
operador y el uso de las funciones de precedencia.
 A mitad de la década de los 60, Knuth define las gramáticas
LR y describe la construcción de una tabla canónica de parser
LR.
12
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
SISTEMATIZACIÓN DE LOS
LENGUAJES DE PROGRAMACIÓN
 Por otra parte, el uso por primera vez de un parsing
descendente recursivo tuvo lugar en el año 1961.
 En el año 1968 se estudian y definen las gramáticas LL así
como los parsers predictivos.
 También se estudia la eliminación de la recursión a la
izquierda de producciones que contienen acciones
semánticas sin afectar a los valores de los atributos.
 En los primeros años de la década de los 70, se describen
los métodos SLR y LALR de parser LR.
 Debido a su sencillez y a su capacidad de análisis para una
gran variedad de lenguajes, la técnica de parsing LR va a
ser la elegida para los generadores automáticos de parsers.
 A mediados de los 70, Johnson crea el generador de
analizadores sintácticos YACC para funcionar bajo un
entorno UNIX.
 Junto al análisis sintáctico, también se fue desarrollando el
análisis semántico. 13
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
BNF
 El Backus-Naur form (BNF) (también conocido como
Backus-Naur formalism, Backus normal form o Panini-
Backus Form).
Es una metasintaxis usada para expresar gramáticas libres de
contexto: es decir, una manera formal de describir lenguajes
formales.
 El BNF se utiliza extensamente como notación para las
gramáticas de los lenguajes de programación de la
computadora, de los sistemas de comando y de los
protocolos de comunicación, así como una notación para
representar partes de las gramáticas de la lengua natural.
 La mayoría de los libros de textos para la teoría y/o la
semántica del lenguaje de programación documentan el
lenguaje de programación en BNF.
 Algunas variantes, tales como la augmented Backus-Naur
form (ABNF), tienen su propia documentación.
14
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
CONSTRUCCIÓN SISTEMÁTICA DE
LAS EXPRESIONES
 En los primeros lenguajes (FORTRAN y ALGOL 60)
los tipos posibles de los datos eran muy simples, y la
comprobación de tipos era muy sencilla.
 No se permitía la coerción de tipos, pues ésta era una
cuestión difícil y era más fácil no permitirlo.
 Con la aparición del ALGOL 68 se permitía que las
expresiones de tipo fueran construidas
sistemáticamente.
 Más tarde, de ahí surgió la equivalencia de tipos por
nombre y estructural.
 El manejo de la memoria como una implementación
tipo pila se usó por primera vez en 1958 en el primer
proyecto de LISP.
 La inclusión en el ALGOL 60 de procedimientos
recursivos potenció el uso de la pila como una forma
cómoda de manejo de la memoria.
15
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
CONSTRUCCIÓN SISTEMÁTICA DE
LAS EXPRESIONES
 Dijkstra introdujo posteriormente técnicas para
acceso a variables no locales en un lenguaje de
bloques.
 También se desarrollaron estrategias para mejorar
las rutinas de entrada y de salida de un
procedimiento.
 Así mismo, y ya desde los años 60, se estudió el paso
de parámetros a un procedimiento por nombre, valor
y variable.
 Con la aparición de lenguajes que permiten la
localización dinámica de datos, se desarrolla otra
forma de manejo de la memoria, conocida por el
nombre de heap (montículo).
 Se han desarrollado varias técnicas para el manejo
del heap y los problemas que con él se presentan,
como son las referencias perdidas y la recogida de
basura.
16
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
OPTIMIZACIÓN DE CÓDIGO
 La técnica de la optimización apareció desde el desarrollo del primer
compilador de FORTRAN.
 Backus comenta cómo durante el desarrollo del FORTRAN se tenía el miedo de
que el programa resultante de la compilación fuera más lento que si se hubiera
escrito a mano.
 Para evitar esto, se introdujeron algunas optimizaciones en el cálculo de los
índices dentro de un bucle.
 Pronto se sistematizan y se recoge la división de optimizaciones independientes
de la máquina y dependientes de la máquina.
 Entre las primeras están la propagación de valores, el arreglo de expresiones, la
eliminación de redundancias, etc.
 Entre las segundas se podría encontrar la localización de registros, el uso de
instrucciones propias de la máquina y el reordenamiento de código.
 A partir de 1970 comienza el estudio sistemático de las técnicas del análisis de
flujo de datos.
 Su repercusión ha sido enorme en las técnicas de optimización global de un
programa.
 En la actualidad, el proceso de la compilación ya está muy asentado.
 Un compilador es una herramienta bien conocida, dividida en diversas fases.
 Algunas de estas fases se pueden generar automáticamente (analizador léxico
y sintáctico) y otras requieren una mayor atención por parte del escritor de
compiladores (las partes de traducción y generación de código).
17
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
NUEVOS LENGUAJES
 De todas formas, y en contra de lo que quizá pueda pensarse, todavía
se están llevando a cabo varias vías de investigación en este
fascinante campo de la compilación.
 Por una parte, se están mejorando las diversas herramientas
disponibles (por ejemplo, el generador de analizadores léxicos
Aardvark para el lenguaje PASCAL).
 También la aparición de nuevas generaciones de lenguajes:
 Se habla de la quinta generación, como de un lenguaje cercano al de los
humanos!!!
 Esto ha provocado la revisión y optimización de cada una de las fases del
compilador.
 El último lenguaje de programación de amplia aceptación que se ha
diseñado, el lenguaje Java, establece que el compilador no genera
código para una máquina determinada sino para una virtual.
 La Java Virtual Machine (JVM), que posteriormente será ejecutado por un
intérprete, normalmente incluido en un navegador de Internet.
 El gran objetivo de esta exigencia es conseguir la máxima
portabilidad de los programas escritos y compilados en Java, pues es
únicamente la segunda fase del proceso la que depende de la máquina
concreta en la que se ejecuta el intérprete. 18
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
TRADUCTORES
 Traductor
 Un traductor es cualquier programa que toma como
entrada un texto escrito en un lenguaje, llamado
fuente y da como salida otro texto en un lenguaje,
denominado objeto.
 Existen 2 tipos de traductores:
 Compiladores.
 Intérpretes.
19
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
INTÉRPRETES
 Ej: Basic, Smalltalk, PHP,
Java Script, etc.
 Un intérprete es un programa
capaz de analizar y ejecutar
otros programas, escritos en
un lenguaje de alto nivel.
 Realizan la traducción del
código a medida que sea
necesario y normalmente, no
guardan el resultado de dicha
traducción.
 No realizan compilación ni
generan el código objeto.
 Los intérpretes son conocidos
como motores de scripts ya que
permiten la traducción de
estos.
20
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
Programa fuentePrograma fuente
IntérpreteIntérprete
Traducción
y ejecución
línea a línea
Traducción
y ejecución
línea a línea
Pasos de la interpretación:
CJAO
COMPILADORES
 Ej: C++, Pascal, Fortran,
*Java (virtual machine),
*Visual Basic (runtime
library), etc.
 Un compilador es un
programa que traduce un
programa escrito en un
lenguaje de programación a
otro lenguaje de
programación, generando
un programa equivalente.
 Usualmente este segundo
lenguaje es código máquina.
 El proceso de traducción se
conoce como compilación.
21
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
Programa fuentePrograma fuente
CompiladorCompilador
Programa objetoPrograma objeto
MontadorMontador
Programa ejecutable en
lenguaje de máquina
Programa ejecutable en
lenguaje de máquina
Pasos de la compilación:
CJAO
COMPILACIÓN DE UN PROGRAMA
22
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
Programa fuentePrograma fuente
CompiladorCompilador
Programa objetoPrograma objeto
Existen
errores en la
compilación?
Existen
errores en la
compilación?
Programa ejecutablePrograma ejecutableEnlazadorEnlazador
EjecuciónEjecución
no
si
Con un editor
Ej.: C++
Verificación y corrección de
errores
Obtención del programa
objeto
El montador obtiene el
programa ejecutable
Se ejecuta el programa y
salida del mismo
CJAO
PARTES (PROGRAMAS) DEL
COMPILADOR
 Un compilador no es un programa que funciona de manera
aislada, sino que necesita de otros programas para conseguir su
objetivo:
 Obtener un programa ejecutable a partir de un programa fuente en un
lenguaje de alto nivel.
 Algunos de esos programas son el preprocesador, el linker, el
depurador y el ensamblador.
 El preprocesador :
 Se ocupa (dependiendo del lenguaje) de incluir ficheros, expandir macros, eliminar
comentarios, y otras tareas similares.
 El linker:
 Se encarga de construir el fichero ejecutable añadiendo al fichero objeto generado
por el compilador las cabeceras necesarias y las funciones de librería utilizadas por
el programa fuente.
 El depurador:
 Permite, si el compilador ha generado adecuadamente el programa objeto, seguir
paso a paso la ejecución de un programa.
 Finalmente, muchos compiladores, en vez de generar código objeto,
generan un programa en lenguaje ensamblador que debe después
convertirse en un ejecutable mediante un programa ensamblador.
23
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
INTÉRPRETES Y COMPILADORES
 Compilador
 En el caso de que el lenguaje fuente sea un lenguaje de programación de alto nivel y el
objeto sea un lenguaje de bajo nivel (ensamblador o código de máquina), a dicho
traductor se le denomina compilador.
Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje
ensamblador.
 Un intérprete no genera un programa equivalente, sino que toma una
sentencia del programa fuente en un lenguaje de alto nivel y la traduce al
código equivalente y al mismo tiempo lo ejecuta.
 Históricamente, con la escasez de memoria de las primeras computadoras, se
puso de moda el uso de intérpretes frente a los compiladores, pues el programa
fuente sin traducir y el intérprete juntos daban una ocupación de memoria
menor que la resultante de los compiladores.
 Por ello las primeras computadoras personales iban siempre acompañados de
un intérprete de BASIC (Spectrum, Commodore VIC-20, PC XT de IBM, etc.).
 La mejor información sobre los errores por parte del compilador así como una
mayor velocidad de ejecución del código resultante hizo que poco a poco se
impusieran los compiladores.
 Hoy en día, y con el problema de la memoria prácticamente resuelto, se puede
hablar de un gran predominio de los compiladores frente a los intérpretes,
aunque intérpretes como los incluidos en los navegadores de Internet para
interpretar el código JVM de Java son la gran excepción.
24
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
COMPILAR V.S. INTERPRETAR
 Ventajas de compilar frente a interpretar:
 Se compila una vez, se ejecuta n veces.
 En bucles, la compilación genera código equivalente al
bucle, pero interpretándolo se traduce tantas veces una
línea como veces se repite el bucle.
 El compilador tiene una visión global del programa, por lo
que la información de mensajes de error es mas detallada.
 Mayor velocidad de ejecución.
 Menor sobrecarga de memoria.
 Ventajas del intérprete frente al compilador:
 Un intérprete necesita menos memoria que un compilador.
 En principio eran más abundantes dado que las computadoras
tenían poca memoria.
 Permiten una mayor interactividad con el código en tiempo
de desarrollo.
 La propia ejecución puede modificar el programa.
 Las variables pueden cambiar dinámicamente de tipo.
 Facilidad de depuración.
25
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
DAR INSTRUCCIONES A LA
COMPUTADORA
 Escribimos un programa usando un
lenguaje de programación.
Descripción abstracta de alto nivel.
 Los microprocesadores hablan en lenguaje
ensamblador.
Detalles de implementación de bajo nivel
26
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
Programa
Escrito en
Lenguaje de
Programación
Programa
Escrito en
Lenguaje de
Programación
Traducción a
Lenguaje
Ensamblador
Traducción a
Lenguaje
Ensamblador
Compilador
CJAO
¿CÓMO INSTRUIR A LA
COMPUTADORA?
 Entrada/Salida:
 Input:
 Lenguaje de programación de alto nivel.
 Output:
 Instrucciones de assembler de bajo nivel.
 Compilador tiene que:
 Leer y entender el programa.
 Determinar con precisión que acciones se requieren.
 Encontrar la forma de llevar a cabo esas acciones.
 Instruir a la computadora a llevar a cabo las
acciones.
27
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
CJAO
EJECUCIÓN EFICIENTE DE LAS
ACCIONES
 Mapeo de alto a bajo nivel:
 Mapeo simple de un programa a assembler produce
una ejecución ineficiente.
 Más alto el nivel de abstracción más ineficiente.
 Si el mapeo no es eficiente:
 Las abstracciones de alto nivel son inútiles.
 Se necesita:
 Proveer un nivel alto de abstracción con rendimiento
equivalente a si usáramos Assembler.
28
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
Mapeo: trazar un camino.
Abstracción: precisar, aislando información no relevante.
CJAO
EJEMPLO
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
29
int expr(int n)
{
int d;
d = 4 * n * n * (n + 1) * (n + 1);
return d;
}
lda $30,-32($30)
stq $26,0($30)
stq $15,8($30)
bis $30,$30,$15
bis $16,$16,$1
stl $1,16($15)
lds $f1,16($15)
sts $f1,24($15)
ldl $5,24($15)
bis $5,$5,$2
s4addq $2,0,$3
ldl $4,16($15)
mull $4,$3,$2
ldl $3,16($15)
addq $3,1,$4
mull $2,$4,$2
ldl $3,16($15)
addq $3,1,$4
mull $2,$4,$2
stl $2,20($15)
ldl $0,20($15)
br $31,$33
bis $15,$15,$30
ldq $26,0($30)
ldq $15,8($30)
addq $30,32,$30
ret $31,($26),1
Programa de entrada
Assembler de salida
s4addq $16,0,$0
mull $16,$0,$0
addq $16,1,$16
mull $0,$16,$0
mull $0,$16,$0
ret $31,($26),1
Assembler de salida
Sin optimizar
Optimizado
Optimizar código: utilizar mejor la
potencia del hardware.
CJAO
FUNCIONES IMPORTANTES DE LOS
COMPILADORES
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
30
 Velocidad / rendimiento.
 Tamaño de código.
 Consumo de poder.
 Compilación rápida /
eficiente.
 Seguridad / confiabilidad
 Debugging.
 Lenguajes de
Programación
 Desde C a
lenguajes OO.
 Definiciones aún
más abstractas.
 Microprocesadores
 De simple CISC a
RISC a ...
Optimizar código para:
Incremento del nivel de
abstracción
Debugging: depuración de errores.
Mayor nivel
de
abstracción
Menor nivel
de
abstracción
CJAO
ANATOMÍA DE UN COMPILADOR
31
Materia:Compiladores
Docente:Ing.CarlosJ.ArchondoO.
Analizador Sintáctico (Parser)
Generador de Código
Optimizador de Código
Analizador Semántico
Analizador Léxico (Scanner)
Parse Tree: árbol gramatical
Program (Character Stream): flujo de programa
Token Stream: flujo de token
Intermediate Representation: representación intermedia
Optimized Intermediate Representation: representación
intermedia optimizada
Assembly Code: código en ensamblador
AnálisisSíntesis
•Léxico: perteneciente al
diccionario de una
lengua.
•Sintáctico: parte de la
gramática para
coordinar las palabras y
formar oraciones.
•Semántico: estudio del
significado de los signos.

Más contenido relacionado

La actualidad más candente

1 introducción a la programación de sistemas
1 introducción a la programación de sistemas1 introducción a la programación de sistemas
1 introducción a la programación de sistemasAlexa Esquivel
 
L I N E A D E L T I E M P O D E L E N G
L I N E A  D E L  T I E M P O  D E  L E N GL I N E A  D E L  T I E M P O  D E  L E N G
L I N E A D E L T I E M P O D E L E N Gkorii
 
1. que es programacion
1. que es programacion1. que es programacion
1. que es programacionFausto Orozco
 
franco lorentz word2
franco lorentz word2franco lorentz word2
franco lorentz word23xtremus
 
Presentación Lenguajes de Programación y Utilerias
Presentación Lenguajes de Programación y UtileriasPresentación Lenguajes de Programación y Utilerias
Presentación Lenguajes de Programación y UtileriasPetros Peña Vallejo
 
Unidad v sistemas mecanizados ii
Unidad v sistemas mecanizados iiUnidad v sistemas mecanizados ii
Unidad v sistemas mecanizados iinestorgarcia250
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacionJesús Navarro
 
Lenguajes de programacion_1
Lenguajes de programacion_1Lenguajes de programacion_1
Lenguajes de programacion_1Ricardo Paniagua
 
Lenguaje de programacion fernando hernandez
Lenguaje de programacion fernando hernandezLenguaje de programacion fernando hernandez
Lenguaje de programacion fernando hernandezRafael Hernandez
 
LENGUAJES DE PROGRAMACIÓN
LENGUAJES DE PROGRAMACIÓN LENGUAJES DE PROGRAMACIÓN
LENGUAJES DE PROGRAMACIÓN Esteban Torres
 
introducción a lenguajes de programacion
introducción a lenguajes de programacionintroducción a lenguajes de programacion
introducción a lenguajes de programacionbretorio
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programaciónAlejandra Vargas
 
Tema 01 introducción a compiladores
Tema 01   introducción a compiladoresTema 01   introducción a compiladores
Tema 01 introducción a compiladoresikky2345
 
Evolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacionEvolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacionSergio Maidana
 

La actualidad más candente (18)

Linea del Tiempo
Linea del TiempoLinea del Tiempo
Linea del Tiempo
 
El estudio de los lenguajes de programacion
El estudio de los lenguajes de programacionEl estudio de los lenguajes de programacion
El estudio de los lenguajes de programacion
 
Lenguajes De Programación
Lenguajes De ProgramaciónLenguajes De Programación
Lenguajes De Programación
 
1 introducción a la programación de sistemas
1 introducción a la programación de sistemas1 introducción a la programación de sistemas
1 introducción a la programación de sistemas
 
L I N E A D E L T I E M P O D E L E N G
L I N E A  D E L  T I E M P O  D E  L E N GL I N E A  D E L  T I E M P O  D E  L E N G
L I N E A D E L T I E M P O D E L E N G
 
1. que es programacion
1. que es programacion1. que es programacion
1. que es programacion
 
franco lorentz word2
franco lorentz word2franco lorentz word2
franco lorentz word2
 
Presentación Lenguajes de Programación y Utilerias
Presentación Lenguajes de Programación y UtileriasPresentación Lenguajes de Programación y Utilerias
Presentación Lenguajes de Programación y Utilerias
 
Unidad v sistemas mecanizados ii
Unidad v sistemas mecanizados iiUnidad v sistemas mecanizados ii
Unidad v sistemas mecanizados ii
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
Lenguajes de programacion_1
Lenguajes de programacion_1Lenguajes de programacion_1
Lenguajes de programacion_1
 
Lenguaje de programacion fernando hernandez
Lenguaje de programacion fernando hernandezLenguaje de programacion fernando hernandez
Lenguaje de programacion fernando hernandez
 
LENGUAJES DE PROGRAMACIÓN
LENGUAJES DE PROGRAMACIÓN LENGUAJES DE PROGRAMACIÓN
LENGUAJES DE PROGRAMACIÓN
 
introducción a lenguajes de programacion
introducción a lenguajes de programacionintroducción a lenguajes de programacion
introducción a lenguajes de programacion
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Tema 01 introducción a compiladores
Tema 01   introducción a compiladoresTema 01   introducción a compiladores
Tema 01 introducción a compiladores
 
1er Trabajo
1er Trabajo1er Trabajo
1er Trabajo
 
Evolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacionEvolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacion
 

Destacado

Cap5
Cap5Cap5
Cap5CJAO
 
Presentación de la montaña u nacional - montañas sagradas - abril 2012
Presentación de la montaña   u nacional - montañas sagradas - abril 2012Presentación de la montaña   u nacional - montañas sagradas - abril 2012
Presentación de la montaña u nacional - montañas sagradas - abril 2012Jorge Montana
 
Fachkräfteforum Familienfreundliches Sachsen
Fachkräfteforum Familienfreundliches SachsenFachkräfteforum Familienfreundliches Sachsen
Fachkräfteforum Familienfreundliches SachsenThomas Kujawa
 
Ihre Ideen auf dem victor Kongress 2014
Ihre Ideen auf dem victor Kongress 2014Ihre Ideen auf dem victor Kongress 2014
Ihre Ideen auf dem victor Kongress 2014emotion banking
 
victor Gala Einladung - 25. September 2014
victor Gala Einladung - 25. September 2014victor Gala Einladung - 25. September 2014
victor Gala Einladung - 25. September 2014emotion banking
 
Avispador - so lautet die Antwort!
Avispador   - so lautet die Antwort!Avispador   - so lautet die Antwort!
Avispador - so lautet die Antwort!Axel Oppermann
 
¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?
¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?
¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?guest00aa4af
 
Hypnose & mentales training power-point-für facebook
Hypnose & mentales training power-point-für facebookHypnose & mentales training power-point-für facebook
Hypnose & mentales training power-point-für facebookStephan7777
 
Zoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musik
Zoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musikZoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musik
Zoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musikDigiMediaL_musik
 
Introducción al diseño web
Introducción al diseño webIntroducción al diseño web
Introducción al diseño webOmar Sosa-Tzec
 
Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4SEAT, S.A.
 

Destacado (19)

Cap5
Cap5Cap5
Cap5
 
Doc1
Doc1Doc1
Doc1
 
Presentación de la montaña u nacional - montañas sagradas - abril 2012
Presentación de la montaña   u nacional - montañas sagradas - abril 2012Presentación de la montaña   u nacional - montañas sagradas - abril 2012
Presentación de la montaña u nacional - montañas sagradas - abril 2012
 
Tema 8.4.
Tema 8.4. Tema 8.4.
Tema 8.4.
 
Fachkräfteforum Familienfreundliches Sachsen
Fachkräfteforum Familienfreundliches SachsenFachkräfteforum Familienfreundliches Sachsen
Fachkräfteforum Familienfreundliches Sachsen
 
Radio Relaunch
Radio RelaunchRadio Relaunch
Radio Relaunch
 
Ifes Ergebnisse
Ifes ErgebnisseIfes Ergebnisse
Ifes Ergebnisse
 
U-Form Neuheiten 2012
U-Form Neuheiten 2012U-Form Neuheiten 2012
U-Form Neuheiten 2012
 
Ihre Ideen auf dem victor Kongress 2014
Ihre Ideen auf dem victor Kongress 2014Ihre Ideen auf dem victor Kongress 2014
Ihre Ideen auf dem victor Kongress 2014
 
victor Gala Einladung - 25. September 2014
victor Gala Einladung - 25. September 2014victor Gala Einladung - 25. September 2014
victor Gala Einladung - 25. September 2014
 
September English
September EnglishSeptember English
September English
 
hoja
hojahoja
hoja
 
Avispador - so lautet die Antwort!
Avispador   - so lautet die Antwort!Avispador   - so lautet die Antwort!
Avispador - so lautet die Antwort!
 
¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?
¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?
¿QUÉ COMPARTIERON AMERICA Y ESPAÑA?
 
Hypnose & mentales training power-point-für facebook
Hypnose & mentales training power-point-für facebookHypnose & mentales training power-point-für facebook
Hypnose & mentales training power-point-für facebook
 
Zoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musik
Zoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musikZoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musik
Zoe Leela: Digital erfolgreich mit Creative Commons - DigiMediaL_musik
 
Introducción al diseño web
Introducción al diseño webIntroducción al diseño web
Introducción al diseño web
 
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
Bit sosem 2016-wieners-sitzung-09_bild-i-kompressionBit sosem 2016-wieners-sitzung-09_bild-i-kompression
Bit sosem 2016-wieners-sitzung-09_bild-i-kompression
 
Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4
 

Similar a Cap1

Cap1 compiladores
Cap1 compiladoresCap1 compiladores
Cap1 compiladoresCJAO
 
Historia de los lenguajes de programación
Historia de los lenguajes de programación Historia de los lenguajes de programación
Historia de los lenguajes de programación Dariany Rodriguez
 
Historia de los lenguajes de programación escrito
Historia de los lenguajes de programación escritoHistoria de los lenguajes de programación escrito
Historia de los lenguajes de programación escritoramosmendezshura
 
Linea del tiempo de los lenguajes de programación
Linea del tiempo de los lenguajes de programaciónLinea del tiempo de los lenguajes de programación
Linea del tiempo de los lenguajes de programaciónEspitiaGiancarlo
 
Especialidad
EspecialidadEspecialidad
EspecialidadDilan19
 
HISTORIA DE LOS LENGUAJES DE PROGRAMACION
HISTORIA DE LOS LENGUAJES DE PROGRAMACIONHISTORIA DE LOS LENGUAJES DE PROGRAMACION
HISTORIA DE LOS LENGUAJES DE PROGRAMACIONJANIIER
 
Unidad 1.1 ensayo
Unidad 1.1 ensayoUnidad 1.1 ensayo
Unidad 1.1 ensayoJesuiMosco
 
Historia de los lenguajes de programacion
Historia de los lenguajes de programacionHistoria de los lenguajes de programacion
Historia de los lenguajes de programacionJANIIER
 
Historia de los lenguajes de programacion
Historia de los lenguajes de programacionHistoria de los lenguajes de programacion
Historia de los lenguajes de programacionJANIIER
 
Historia e evoluvion de los lenguaje de programcion
Historia e evoluvion de los lenguaje de programcionHistoria e evoluvion de los lenguaje de programcion
Historia e evoluvion de los lenguaje de programcionJuanMiguelCustodioMo
 
Cuestionario2
Cuestionario2Cuestionario2
Cuestionario2hoppii
 
Cuestionario2
Cuestionario2Cuestionario2
Cuestionario2hoppii
 
Informatica presentacion
Informatica presentacionInformatica presentacion
Informatica presentacionFerMoniMags
 
Lenguajes de programación saia
Lenguajes de programación saiaLenguajes de programación saia
Lenguajes de programación saiaGLORIASAVO
 

Similar a Cap1 (20)

Cap1 compiladores
Cap1 compiladoresCap1 compiladores
Cap1 compiladores
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
Historia de los lenguajes de programación
Historia de los lenguajes de programación Historia de los lenguajes de programación
Historia de los lenguajes de programación
 
Historia de los lenguajes de programación escrito
Historia de los lenguajes de programación escritoHistoria de los lenguajes de programación escrito
Historia de los lenguajes de programación escrito
 
Linea del tiempo
Linea del tiempoLinea del tiempo
Linea del tiempo
 
Trabajo de programacion 1
Trabajo de programacion 1 Trabajo de programacion 1
Trabajo de programacion 1
 
Linea del tiempo de los lenguajes de programación
Linea del tiempo de los lenguajes de programaciónLinea del tiempo de los lenguajes de programación
Linea del tiempo de los lenguajes de programación
 
Especialidad
EspecialidadEspecialidad
Especialidad
 
HISTORIA DE LOS LENGUAJES DE PROGRAMACION
HISTORIA DE LOS LENGUAJES DE PROGRAMACIONHISTORIA DE LOS LENGUAJES DE PROGRAMACION
HISTORIA DE LOS LENGUAJES DE PROGRAMACION
 
Compiladores trabajo numero 4
Compiladores trabajo numero 4Compiladores trabajo numero 4
Compiladores trabajo numero 4
 
Libro2
Libro2Libro2
Libro2
 
Unidad 1.1 ensayo
Unidad 1.1 ensayoUnidad 1.1 ensayo
Unidad 1.1 ensayo
 
Historia de los lenguajes de programacion
Historia de los lenguajes de programacionHistoria de los lenguajes de programacion
Historia de los lenguajes de programacion
 
Historia de los lenguajes de programacion
Historia de los lenguajes de programacionHistoria de los lenguajes de programacion
Historia de los lenguajes de programacion
 
Historia e evoluvion de los lenguaje de programcion
Historia e evoluvion de los lenguaje de programcionHistoria e evoluvion de los lenguaje de programcion
Historia e evoluvion de los lenguaje de programcion
 
Cuestionario2
Cuestionario2Cuestionario2
Cuestionario2
 
Cuestionario2
Cuestionario2Cuestionario2
Cuestionario2
 
Informatica presentacion
Informatica presentacionInformatica presentacion
Informatica presentacion
 
Lenguajes de programación saia
Lenguajes de programación saiaLenguajes de programación saia
Lenguajes de programación saia
 
INTRODUCCION A FLEX Y BISON
INTRODUCCION A FLEX Y BISONINTRODUCCION A FLEX Y BISON
INTRODUCCION A FLEX Y BISON
 

Más de CJAO

Cap6
Cap6Cap6
Cap6CJAO
 
Cap5
Cap5Cap5
Cap5CJAO
 
Cap4
Cap4Cap4
Cap4CJAO
 
Cap3
Cap3Cap3
Cap3CJAO
 
Cap2
Cap2Cap2
Cap2CJAO
 
Cap1
Cap1Cap1
Cap1CJAO
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladoresCJAO
 
Cap3 compiladores
Cap3 compiladoresCap3 compiladores
Cap3 compiladoresCJAO
 
Cap2 compiladores
Cap2 compiladoresCap2 compiladores
Cap2 compiladoresCJAO
 
Cap6
Cap6Cap6
Cap6CJAO
 
Cap5
Cap5Cap5
Cap5CJAO
 
Cap4
Cap4Cap4
Cap4CJAO
 
Cap3
Cap3Cap3
Cap3CJAO
 
Cap0
Cap0Cap0
Cap0CJAO
 
Cap5
Cap5Cap5
Cap5CJAO
 
Cap4
Cap4Cap4
Cap4CJAO
 
Cap3
Cap3Cap3
Cap3CJAO
 
Cap2
Cap2Cap2
Cap2CJAO
 
Cap1
Cap1Cap1
Cap1CJAO
 
Cap6
Cap6Cap6
Cap6CJAO
 

Más de CJAO (20)

Cap6
Cap6Cap6
Cap6
 
Cap5
Cap5Cap5
Cap5
 
Cap4
Cap4Cap4
Cap4
 
Cap3
Cap3Cap3
Cap3
 
Cap2
Cap2Cap2
Cap2
 
Cap1
Cap1Cap1
Cap1
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladores
 
Cap3 compiladores
Cap3 compiladoresCap3 compiladores
Cap3 compiladores
 
Cap2 compiladores
Cap2 compiladoresCap2 compiladores
Cap2 compiladores
 
Cap6
Cap6Cap6
Cap6
 
Cap5
Cap5Cap5
Cap5
 
Cap4
Cap4Cap4
Cap4
 
Cap3
Cap3Cap3
Cap3
 
Cap0
Cap0Cap0
Cap0
 
Cap5
Cap5Cap5
Cap5
 
Cap4
Cap4Cap4
Cap4
 
Cap3
Cap3Cap3
Cap3
 
Cap2
Cap2Cap2
Cap2
 
Cap1
Cap1Cap1
Cap1
 
Cap6
Cap6Cap6
Cap6
 

Último

Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesRaquel Martín Contreras
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...YobanaZevallosSantil1
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicialLorenaSanchez350426
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxJUANSIMONPACHIN
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDUgustavorojas179704
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOweislaco
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...fcastellanos3
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfCESARMALAGA4
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfcoloncopias5
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024gharce
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaLuis Minaya
 

Último (20)

Técnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materialesTécnicas de grabado y estampación : procesos y materiales
Técnicas de grabado y estampación : procesos y materiales
 
VISITA À PROTEÇÃO CIVIL _
VISITA À PROTEÇÃO CIVIL                  _VISITA À PROTEÇÃO CIVIL                  _
VISITA À PROTEÇÃO CIVIL _
 
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO  YESSENIA 933623393 NUEV...
IV SES LUN 15 TUTO CUIDO MI MENTE CUIDANDO MI CUERPO YESSENIA 933623393 NUEV...
 
DIA INTERNACIONAL DAS FLORESTAS .
DIA INTERNACIONAL DAS FLORESTAS         .DIA INTERNACIONAL DAS FLORESTAS         .
DIA INTERNACIONAL DAS FLORESTAS .
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
libro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación iniciallibro para colorear de Peppa pig, ideal para educación inicial
libro para colorear de Peppa pig, ideal para educación inicial
 
Aedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptxAedes aegypti + Intro to Coquies EE.pptx
Aedes aegypti + Intro to Coquies EE.pptx
 
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docxPLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
PLANIFICACION ANUAL 2024 - INICIAL UNIDOCENTE.docx
 
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDUFICHA DE MONITOREO Y ACOMPAÑAMIENTO  2024 MINEDU
FICHA DE MONITOREO Y ACOMPAÑAMIENTO 2024 MINEDU
 
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJOTUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
TUTORIA II - CIRCULO DORADO UNIVERSIDAD CESAR VALLEJO
 
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdfTema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
Tema 7.- E-COMMERCE SISTEMAS DE INFORMACION.pdf
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
Estas son las escuelas y colegios que tendrán modalidad no presencial este lu...
 
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdfBIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
BIOLOGIA_banco de preguntas_editorial icfes examen de estado .pdf
 
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdfFisiologia.Articular. 3 Kapandji.6a.Ed.pdf
Fisiologia.Articular. 3 Kapandji.6a.Ed.pdf
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
SISTEMA INMUNE FISIOLOGIA MEDICA UNSL 2024
 
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsaManejo del Dengue, generalidades, actualización marzo 2024 minsa
Manejo del Dengue, generalidades, actualización marzo 2024 minsa
 

Cap1

  • 1. INTRODUCCIÓN A LOS COMPILADORES Capítulo 1 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. 1
  • 2. CJAO INTRODUCCIÓN Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. 2  Pueden ser usados para describir cualquier acción.  Hay muchas formas de describir la misma acción.  ¿Por qué no con lenguajes naturales?  ¿Español?  “Dame la clave, Hal“.  "Lo siento, temo que no puedo hacer eso".  Lenguajes Naturales:  La misma expresión describe muchas acciones posibles.  Ambiguas.  Usamos un lenguaje de programación  Ejemplos: Java, C, C++, Pascal, BASIC, Scheme. Lenguajes Instrucciones a una PC
  • 3. CJAO LENGUAJE DE MÁQUINA  En 1946 se desarrolló la primera computadora digital.  En un principio, estas máquinas ejecutaban instrucciones consistentes en códigos numéricos que señalaban a los circuitos de la máquina los estados correspondientes a cada operación.  Esta expresión mediante códigos numéricos se llamó Lenguaje Máquina, interpretado por un secuenciador cableado o por un microprograma.  Pero los códigos numéricos de las máquinas son engorrosos.  Pronto los primeros usuarios de estas computadoras descubrieron la ventaja de escribir sus programas mediante claves más fáciles de recordar que esos códigos numéricos.  Al final, todas esas claves juntas se traducían manualmente a Lenguaje Máquina.  Estas claves constituyen los llamados Lenguajes Ensambladores, que se generalizaron en cuanto se dio el paso decisivo de hacer que las propias máquinas realizaran el proceso mecánico de la traducción.  A este trabajo se le llama ensamblar el programa. 3 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 4. CJAO LENGUAJES ENSAMBLADORES  Dada su correspondencia estrecha con las operaciones elementales de las máquinas, las instrucciones de los lenguajes ensambladores obligan a programar cualquier función de una manera minuciosa e iterativa.  Cuanto menor es el nivel de expresión de un lenguaje de programación, mayor rendimiento se obtiene en el uso de los recursos físicos (hardware).  A pesar de todo, el Lenguaje Ensamblador seguía siendo el de una Máquina, pero más fácil de manejar.  Los trabajos de investigación se orientaron entonces hacia la creación de un lenguaje que expresara las distintas acciones a realizar de una manera lo más sencilla posible para el hombre.  Así, en 1950, John Backus dirigió una investigación en I.B.M. en un lenguaje algebraico. 4 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 5. CJAO LENGUAJES DE ALTO NIVEL  En 1954 se empezó a desarrollar un lenguaje que permitía escribir fórmulas matemáticas de manera traducible por una computadora.  Le llamaron FORTRAN (FORmule TRANslator).  Fue el primer lenguaje considerado de Alto Nivel.  Se introdujo en 1957 para el uso de la computadora IBM modelo 704.  Permitía una programación más cómoda y breve que lo existente hasta ese momento, lo que suponía un considerable ahorro de trabajo.  Surgió así por primera vez el concepto de un traductor, como un programa que traducía un lenguaje a otro lenguaje. En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel, se emplea el término compilador. 5 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 6. CJAO FORTRAN  La tarea de realizar un compilador no fue fácil. El primer compilador de FORTRAN tardó 18 años en realizarse y era muy sencillo.  Este desarrollo del FORTRAN estaba muy influenciado por la máquina objeto en la que iba a ser implementado.  Como un ejemplo de ello tenemos el hecho de que los espacios en blanco fuesen ignorados, debido a que el periférico que se utilizaba como entrada de programas (una lectora de tarjetas perforadas) no contaba correctamente los espacios en blanco.  Paralelamente al desarrollo de FORTRAN en América, en Europa surgió una corriente más universitaria:  Pretendía que la definición de un lenguaje fuese independiente de la máquina y en donde los algoritmos se pudieran expresar de forma más simple. 6 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 7. CJAO ALGOL  Esta corriente estuvo muy influida por los trabajos sobre gramáticas de contexto libre publicados por Chomsky dentro de su estudio de lenguajes naturales.  Con estas ideas surgió un grupo europeo encabezado por el profesor F.L.Bauer (de la Universidad de Munich).  Este grupo definió un lenguaje de usos múltiples independiente de una realización concreta sobre una máquina.  Pidieron colaboración a la asociación americana A.C.M. (Association for Computing Machinery) y se formó un comité en el que participó J. Backus que colaboraba en esta investigación.  De esa unión surgió un informe definiendo la International Algebraic Language (I.A.L.), publicado en Zurich en 1958.  Posteriormente este lenguaje se llamó ALGOL 58 (ALGOritmic Language).  En 1969, el lenguaje fue revisado y llevó a una nueva versión que se llamó ALGOL 60.  La siguiente versión fue ALGOL 68, un lenguaje modular estructurado en bloques. 7 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 8. CJAO CONCEPTOS DE LOS LENGUAJES ALGORÍTMICOS  En el ALGOL aparecen por primera vez muchos de los conceptos de los nuevos lenguajes algorítmicos:  Definición de la sintaxis en notación BNF (Backus- Naur Form).  Formato libre.  Declaración explícita de tipo para todos los identificadores.  Estructuras iterativas más generales.  Recursividad.  Paso de parámetros por valor y por nombre.  Estructura de bloques, lo que determina la visibilidad de los identificadores. 8 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 9. CJAO COMPILADOR  Junto a este desarrollo en los lenguajes, también se iba avanzando en la técnica de compilación.  En 1958, Strong y otros proponían una solución al problema de que un compilador fuera utilizable por varias máquinas objeto.  Para ello, se dividía por primera vez el compilador en dos fases:  "front end“  La primera fase es la encargada de analizar el programa fuente.  "back end“  La segunda fase es la encargada de generar código para la máquina objeto.  El puente de unión entre las dos fases era un lenguaje intermedio que se designó con el nombre de UNCOL (UNiversal Computer Oriented Language).  Para que un compilador fuera utilizable por varias máquinas bastaba únicamente modificar su back end.  Aunque se hicieron varios intentos para definir el UNCOL, el proyecto se ha quedado simplemente en un ejercicio teórico.  De todas formas, la división de un compilador en front end y back end fue un adelanto importante. 9 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 10. CJAO AUTÓMATAS DETERMINISTAS  Ya en estos años se van poniendo las bases para la división de tareas en un compilador.  Así, en 1959 Rabin y Scott proponen el empleo de autómatas deterministas y no deterministas para el reconocimiento lexicográfico de los lenguajes.  Rápidamente se aprecia que la construcción de analizadores léxicos a partir de expresiones regulares es muy útil en la implementación de los compiladores.  En 1968, Johnson apunta diversas soluciones. En 1975, con la aparición de LEX surge el concepto de un generador automático de analizadores léxicos a partir de expresiones regulares, basado en el sistema operativo UNIX. 10 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 11. CJAO AUTÓMATAS DETERMINISTAS  Un autómata finito o máquina de estado finito es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce.  Un autómata finito determinista o AFD es un modelo compuesto de un número finito de estados y transiciones entre los estados y acciones.  Un AFND o autómata finito no determinista es aquel que presenta cero, una o más transiciones por el mismo caracter del alfabeto. Autómata: instrumento que posee mecanismos automáticos. 11 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 12. CJAO SISTEMATIZACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN  A partir de los trabajos de Chomsky ya citados, se produce una sistematización de la sintaxis de los lenguajes de programación, y con ello un desarrollo de diversos métodos de análisis sintáctico.  Con la aparición de la notación BNF - desarrollada en primer lugar por Backus en 1960 cuando trabajaba en un borrador del ALGOL 60, modificada en 1963 por Naur y formalizada por Knuth en 1964 - se tiene una guía para el desarrollo del análisis sintáctico.  Los diversos métodos de parsers ascendentes y descendentes se desarrollan durante la década de los 60.  En 1959, Sheridan describe un método de parsing de FORTRAN que introducía paréntesis adicionales alrededor de los operandos para ser capaz de analizar las expresiones.  Más adelante, Floyd introduce la técnica de la precedencia de operador y el uso de las funciones de precedencia.  A mitad de la década de los 60, Knuth define las gramáticas LR y describe la construcción de una tabla canónica de parser LR. 12 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 13. CJAO SISTEMATIZACIÓN DE LOS LENGUAJES DE PROGRAMACIÓN  Por otra parte, el uso por primera vez de un parsing descendente recursivo tuvo lugar en el año 1961.  En el año 1968 se estudian y definen las gramáticas LL así como los parsers predictivos.  También se estudia la eliminación de la recursión a la izquierda de producciones que contienen acciones semánticas sin afectar a los valores de los atributos.  En los primeros años de la década de los 70, se describen los métodos SLR y LALR de parser LR.  Debido a su sencillez y a su capacidad de análisis para una gran variedad de lenguajes, la técnica de parsing LR va a ser la elegida para los generadores automáticos de parsers.  A mediados de los 70, Johnson crea el generador de analizadores sintácticos YACC para funcionar bajo un entorno UNIX.  Junto al análisis sintáctico, también se fue desarrollando el análisis semántico. 13 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 14. CJAO BNF  El Backus-Naur form (BNF) (también conocido como Backus-Naur formalism, Backus normal form o Panini- Backus Form). Es una metasintaxis usada para expresar gramáticas libres de contexto: es decir, una manera formal de describir lenguajes formales.  El BNF se utiliza extensamente como notación para las gramáticas de los lenguajes de programación de la computadora, de los sistemas de comando y de los protocolos de comunicación, así como una notación para representar partes de las gramáticas de la lengua natural.  La mayoría de los libros de textos para la teoría y/o la semántica del lenguaje de programación documentan el lenguaje de programación en BNF.  Algunas variantes, tales como la augmented Backus-Naur form (ABNF), tienen su propia documentación. 14 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 15. CJAO CONSTRUCCIÓN SISTEMÁTICA DE LAS EXPRESIONES  En los primeros lenguajes (FORTRAN y ALGOL 60) los tipos posibles de los datos eran muy simples, y la comprobación de tipos era muy sencilla.  No se permitía la coerción de tipos, pues ésta era una cuestión difícil y era más fácil no permitirlo.  Con la aparición del ALGOL 68 se permitía que las expresiones de tipo fueran construidas sistemáticamente.  Más tarde, de ahí surgió la equivalencia de tipos por nombre y estructural.  El manejo de la memoria como una implementación tipo pila se usó por primera vez en 1958 en el primer proyecto de LISP.  La inclusión en el ALGOL 60 de procedimientos recursivos potenció el uso de la pila como una forma cómoda de manejo de la memoria. 15 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 16. CJAO CONSTRUCCIÓN SISTEMÁTICA DE LAS EXPRESIONES  Dijkstra introdujo posteriormente técnicas para acceso a variables no locales en un lenguaje de bloques.  También se desarrollaron estrategias para mejorar las rutinas de entrada y de salida de un procedimiento.  Así mismo, y ya desde los años 60, se estudió el paso de parámetros a un procedimiento por nombre, valor y variable.  Con la aparición de lenguajes que permiten la localización dinámica de datos, se desarrolla otra forma de manejo de la memoria, conocida por el nombre de heap (montículo).  Se han desarrollado varias técnicas para el manejo del heap y los problemas que con él se presentan, como son las referencias perdidas y la recogida de basura. 16 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 17. CJAO OPTIMIZACIÓN DE CÓDIGO  La técnica de la optimización apareció desde el desarrollo del primer compilador de FORTRAN.  Backus comenta cómo durante el desarrollo del FORTRAN se tenía el miedo de que el programa resultante de la compilación fuera más lento que si se hubiera escrito a mano.  Para evitar esto, se introdujeron algunas optimizaciones en el cálculo de los índices dentro de un bucle.  Pronto se sistematizan y se recoge la división de optimizaciones independientes de la máquina y dependientes de la máquina.  Entre las primeras están la propagación de valores, el arreglo de expresiones, la eliminación de redundancias, etc.  Entre las segundas se podría encontrar la localización de registros, el uso de instrucciones propias de la máquina y el reordenamiento de código.  A partir de 1970 comienza el estudio sistemático de las técnicas del análisis de flujo de datos.  Su repercusión ha sido enorme en las técnicas de optimización global de un programa.  En la actualidad, el proceso de la compilación ya está muy asentado.  Un compilador es una herramienta bien conocida, dividida en diversas fases.  Algunas de estas fases se pueden generar automáticamente (analizador léxico y sintáctico) y otras requieren una mayor atención por parte del escritor de compiladores (las partes de traducción y generación de código). 17 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 18. CJAO NUEVOS LENGUAJES  De todas formas, y en contra de lo que quizá pueda pensarse, todavía se están llevando a cabo varias vías de investigación en este fascinante campo de la compilación.  Por una parte, se están mejorando las diversas herramientas disponibles (por ejemplo, el generador de analizadores léxicos Aardvark para el lenguaje PASCAL).  También la aparición de nuevas generaciones de lenguajes:  Se habla de la quinta generación, como de un lenguaje cercano al de los humanos!!!  Esto ha provocado la revisión y optimización de cada una de las fases del compilador.  El último lenguaje de programación de amplia aceptación que se ha diseñado, el lenguaje Java, establece que el compilador no genera código para una máquina determinada sino para una virtual.  La Java Virtual Machine (JVM), que posteriormente será ejecutado por un intérprete, normalmente incluido en un navegador de Internet.  El gran objetivo de esta exigencia es conseguir la máxima portabilidad de los programas escritos y compilados en Java, pues es únicamente la segunda fase del proceso la que depende de la máquina concreta en la que se ejecuta el intérprete. 18 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 19. CJAO TRADUCTORES  Traductor  Un traductor es cualquier programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y da como salida otro texto en un lenguaje, denominado objeto.  Existen 2 tipos de traductores:  Compiladores.  Intérpretes. 19 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 20. CJAO INTÉRPRETES  Ej: Basic, Smalltalk, PHP, Java Script, etc.  Un intérprete es un programa capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel.  Realizan la traducción del código a medida que sea necesario y normalmente, no guardan el resultado de dicha traducción.  No realizan compilación ni generan el código objeto.  Los intérpretes son conocidos como motores de scripts ya que permiten la traducción de estos. 20 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. Programa fuentePrograma fuente IntérpreteIntérprete Traducción y ejecución línea a línea Traducción y ejecución línea a línea Pasos de la interpretación:
  • 21. CJAO COMPILADORES  Ej: C++, Pascal, Fortran, *Java (virtual machine), *Visual Basic (runtime library), etc.  Un compilador es un programa que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente.  Usualmente este segundo lenguaje es código máquina.  El proceso de traducción se conoce como compilación. 21 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. Programa fuentePrograma fuente CompiladorCompilador Programa objetoPrograma objeto MontadorMontador Programa ejecutable en lenguaje de máquina Programa ejecutable en lenguaje de máquina Pasos de la compilación:
  • 22. CJAO COMPILACIÓN DE UN PROGRAMA 22 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. Programa fuentePrograma fuente CompiladorCompilador Programa objetoPrograma objeto Existen errores en la compilación? Existen errores en la compilación? Programa ejecutablePrograma ejecutableEnlazadorEnlazador EjecuciónEjecución no si Con un editor Ej.: C++ Verificación y corrección de errores Obtención del programa objeto El montador obtiene el programa ejecutable Se ejecuta el programa y salida del mismo
  • 23. CJAO PARTES (PROGRAMAS) DEL COMPILADOR  Un compilador no es un programa que funciona de manera aislada, sino que necesita de otros programas para conseguir su objetivo:  Obtener un programa ejecutable a partir de un programa fuente en un lenguaje de alto nivel.  Algunos de esos programas son el preprocesador, el linker, el depurador y el ensamblador.  El preprocesador :  Se ocupa (dependiendo del lenguaje) de incluir ficheros, expandir macros, eliminar comentarios, y otras tareas similares.  El linker:  Se encarga de construir el fichero ejecutable añadiendo al fichero objeto generado por el compilador las cabeceras necesarias y las funciones de librería utilizadas por el programa fuente.  El depurador:  Permite, si el compilador ha generado adecuadamente el programa objeto, seguir paso a paso la ejecución de un programa.  Finalmente, muchos compiladores, en vez de generar código objeto, generan un programa en lenguaje ensamblador que debe después convertirse en un ejecutable mediante un programa ensamblador. 23 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 24. CJAO INTÉRPRETES Y COMPILADORES  Compilador  En el caso de que el lenguaje fuente sea un lenguaje de programación de alto nivel y el objeto sea un lenguaje de bajo nivel (ensamblador o código de máquina), a dicho traductor se le denomina compilador. Un ensamblador es un compilador cuyo lenguaje fuente es el lenguaje ensamblador.  Un intérprete no genera un programa equivalente, sino que toma una sentencia del programa fuente en un lenguaje de alto nivel y la traduce al código equivalente y al mismo tiempo lo ejecuta.  Históricamente, con la escasez de memoria de las primeras computadoras, se puso de moda el uso de intérpretes frente a los compiladores, pues el programa fuente sin traducir y el intérprete juntos daban una ocupación de memoria menor que la resultante de los compiladores.  Por ello las primeras computadoras personales iban siempre acompañados de un intérprete de BASIC (Spectrum, Commodore VIC-20, PC XT de IBM, etc.).  La mejor información sobre los errores por parte del compilador así como una mayor velocidad de ejecución del código resultante hizo que poco a poco se impusieran los compiladores.  Hoy en día, y con el problema de la memoria prácticamente resuelto, se puede hablar de un gran predominio de los compiladores frente a los intérpretes, aunque intérpretes como los incluidos en los navegadores de Internet para interpretar el código JVM de Java son la gran excepción. 24 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 25. CJAO COMPILAR V.S. INTERPRETAR  Ventajas de compilar frente a interpretar:  Se compila una vez, se ejecuta n veces.  En bucles, la compilación genera código equivalente al bucle, pero interpretándolo se traduce tantas veces una línea como veces se repite el bucle.  El compilador tiene una visión global del programa, por lo que la información de mensajes de error es mas detallada.  Mayor velocidad de ejecución.  Menor sobrecarga de memoria.  Ventajas del intérprete frente al compilador:  Un intérprete necesita menos memoria que un compilador.  En principio eran más abundantes dado que las computadoras tenían poca memoria.  Permiten una mayor interactividad con el código en tiempo de desarrollo.  La propia ejecución puede modificar el programa.  Las variables pueden cambiar dinámicamente de tipo.  Facilidad de depuración. 25 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 26. CJAO DAR INSTRUCCIONES A LA COMPUTADORA  Escribimos un programa usando un lenguaje de programación. Descripción abstracta de alto nivel.  Los microprocesadores hablan en lenguaje ensamblador. Detalles de implementación de bajo nivel 26 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. Programa Escrito en Lenguaje de Programación Programa Escrito en Lenguaje de Programación Traducción a Lenguaje Ensamblador Traducción a Lenguaje Ensamblador Compilador
  • 27. CJAO ¿CÓMO INSTRUIR A LA COMPUTADORA?  Entrada/Salida:  Input:  Lenguaje de programación de alto nivel.  Output:  Instrucciones de assembler de bajo nivel.  Compilador tiene que:  Leer y entender el programa.  Determinar con precisión que acciones se requieren.  Encontrar la forma de llevar a cabo esas acciones.  Instruir a la computadora a llevar a cabo las acciones. 27 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO.
  • 28. CJAO EJECUCIÓN EFICIENTE DE LAS ACCIONES  Mapeo de alto a bajo nivel:  Mapeo simple de un programa a assembler produce una ejecución ineficiente.  Más alto el nivel de abstracción más ineficiente.  Si el mapeo no es eficiente:  Las abstracciones de alto nivel son inútiles.  Se necesita:  Proveer un nivel alto de abstracción con rendimiento equivalente a si usáramos Assembler. 28 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. Mapeo: trazar un camino. Abstracción: precisar, aislando información no relevante.
  • 29. CJAO EJEMPLO Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. 29 int expr(int n) { int d; d = 4 * n * n * (n + 1) * (n + 1); return d; } lda $30,-32($30) stq $26,0($30) stq $15,8($30) bis $30,$30,$15 bis $16,$16,$1 stl $1,16($15) lds $f1,16($15) sts $f1,24($15) ldl $5,24($15) bis $5,$5,$2 s4addq $2,0,$3 ldl $4,16($15) mull $4,$3,$2 ldl $3,16($15) addq $3,1,$4 mull $2,$4,$2 ldl $3,16($15) addq $3,1,$4 mull $2,$4,$2 stl $2,20($15) ldl $0,20($15) br $31,$33 bis $15,$15,$30 ldq $26,0($30) ldq $15,8($30) addq $30,32,$30 ret $31,($26),1 Programa de entrada Assembler de salida s4addq $16,0,$0 mull $16,$0,$0 addq $16,1,$16 mull $0,$16,$0 mull $0,$16,$0 ret $31,($26),1 Assembler de salida Sin optimizar Optimizado Optimizar código: utilizar mejor la potencia del hardware.
  • 30. CJAO FUNCIONES IMPORTANTES DE LOS COMPILADORES Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. 30  Velocidad / rendimiento.  Tamaño de código.  Consumo de poder.  Compilación rápida / eficiente.  Seguridad / confiabilidad  Debugging.  Lenguajes de Programación  Desde C a lenguajes OO.  Definiciones aún más abstractas.  Microprocesadores  De simple CISC a RISC a ... Optimizar código para: Incremento del nivel de abstracción Debugging: depuración de errores. Mayor nivel de abstracción Menor nivel de abstracción
  • 31. CJAO ANATOMÍA DE UN COMPILADOR 31 Materia:Compiladores Docente:Ing.CarlosJ.ArchondoO. Analizador Sintáctico (Parser) Generador de Código Optimizador de Código Analizador Semántico Analizador Léxico (Scanner) Parse Tree: árbol gramatical Program (Character Stream): flujo de programa Token Stream: flujo de token Intermediate Representation: representación intermedia Optimized Intermediate Representation: representación intermedia optimizada Assembly Code: código en ensamblador AnálisisSíntesis •Léxico: perteneciente al diccionario de una lengua. •Sintáctico: parte de la gramática para coordinar las palabras y formar oraciones. •Semántico: estudio del significado de los signos.