Compiladores Introducción Oscar Bonilla Universidad Galileo.

Slides:



Advertisements
Presentaciones similares
¿Qué es Sofware? Son el conjunto de instrucciones que dirigen las actividades del Hardware Consiste en programas, módulos de soporte y archivos de datos,
Advertisements

Prof. Ing.Maria Rosa Damaso Rios
Cb00843 Traductores Rogelio Dávila Pérez Profesor Planta
¿Compilador ? Es un traductor que convierte un texto escrito en un lenguaje fuente y lo traduce a un programa objeto en código máquina.
LENGUAJES DE PROGRAMACIÓN Y ALGORITMOS
CLASE 4 EL ENSAMBLADOR.
INSTITUTO TECNOLOGICO DE APIZACO Integrantes del equipo: José Luis Cocoletzi López Edgar Lozano Velázquez TEMA: Lenguaje Ensamblador.
Facultad de Ciencias de la Computación
Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa.
MÉTODOS Y ELEMENTOS DE PROGRAMACIÓN
Lenguajes de programación
Lenguajes de programación
Unidad 1. Introducción al proceso de compilación.
Teoría de lenguajes y compiladores
INTRODUCCIÓN A LA PROGRAMACIÓN
Una breve introducción
Pablo Cesar Tapia Catacora
Lenguajes de programación
Tema 3. Optimización de Código
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
Introducción. Agenda Clase 1 ● Preámbulo histórico. ● Razones de la Diversidad de Lenguajes. ● Razones del Éxito de un Lenguaje. ● Clasificación ● Motivación.
ALGORITMOS, LENGUAJES Y TECNICAS DE PROGRAMACION
Introducción a la programación en C
TRADUCTOR DE UN PROGRAMA
Paradigmas de Programación
Proceso de información en la computadora
CONDICIONES DE LA MATERIA
M.C. Meliza Contreras González
Procesadores del Lenguaje
Análisis de Algoritmos
Fundamentos de programación
Organización del Computador I Verano MIPS (1 de 2) Basado en el capítulo 3 del libro de Patterson y Hennessy Verano 2004 Profesora Borensztejn.
FUNDAMENTOS DE PROGRAMACION
Sintaxis.
Resumen de Compilación Preparado por Manuel E. Bermúdez, Ph.D. Associate Professor University of Florida Traducido por Christian Torres Universidad Ricardo.
 Fue en el año 1945 cuando el matemático Jhon Von Neumann, fascinado por las posibilidades del ENIAC, demostró que una computadora podía tener una estructura.
Clasificación de Gramáticas y Manejo de Errores
Universidad Nacional de Jujuy Facultad de Ingeniería
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
1.4 Traductor y Su estructura
Procesadores de Lenguajes
MÁQUINAS MULTINIVEL NIVEL 5 Lenguajes de alto nivel
LENGUAJES DE PROGRAMACIÓN
Introducción al Análisis Sintáctico
INTEGRANTES LINA JIMÉNEZ LOZANO ROSA ELENA REINA CARLOS VILLADIEGO MARIANO SEPULVEDA.
Elementos básicos del lenguaje
Programación de Sistemas
Análisis Léxico Área Software de Base.
Introducción a la tecnología Realizado por: Miguel Ángel Arias.
Prof. Gabriel Matonte Programación I Prof. Gabriel Matonte
INFORMATICA VII (Programación e implementación de sistemas)
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
Programación de Sistemas FEI – 2008
Unidad 1. Introducción a los Compiladores.
Lenguajes de Programación
JULIAN DARIO RAMIREZ CORRECHA PROSOF12. °QUE ES UN ALGORITMO °CLASES DE ALGORITMOS °QUE ES UN LENGUAJE DE PROGRAMACION °QUE ES UN LENGUAJE DE PROGRAMACION.
UNIVERSIDAD LATINA (UNILA)
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) TRADUCTORES Y ANALIZADOR LEXICOGRÁFICO.
TEMA1:Introducción 1 1. Programación 2. Lenguajes de Programación 3. Ordenador.
Compiladores Análisis Léxico Oscar Bonilla Universidad Galileo.
INTRODUCCIÓN LI & MSC OSCAR RAMÍREZ CORTÉS U NIVERSIDAD DE LA H UASTECA V ERACRUZANA L ENGUAJES DE P ROGRAMACIÓN.
El proceso de compilación
IV. GRAMÁTICAS DISTRIBUIDAS Y TABLAS DE SÍMBOLOS
Compilador Es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa.
Programación de Sistemas
Unidad 1 Introduccion a los programas Concepto de Programa El término programa (del latín programma, que a su vez proviene de un vocablo griego) tiene.
Conceptos y Lenguaje Imperativo
ESTE TERMINO SE DEFINE COMO : UN PROCESO EN EL CUAL SE NOS DESCRIBE UN PROBLEMA (EN LENGUAJE NATURAL), LUEGO DE ESTO SE PLANTEAN POSIBLES RESOLUCIONES.
Conalep 150 Tehuacán inmi 309 soma
Autómatas y Compiladores. Primera Semana. Ricardo Vargas Del Valle A35469.
Transcripción de la presentación:

Compiladores Introducción Oscar Bonilla Universidad Galileo

¿Qué es un lenguaje de programación? ● ¿Cómo le damos instrucciones a una computadora? ● ¿Cómo hacemos que la computadora lleve a cabo las instrucciones eficientemente?

Lenguajes ● Pueden ser usados para describir cualquier acción ● Hay muchas formas de describir la misma acción

Cómo darle instrucciones a una computadora ● ¿Por qué no con lenguajes naturales? – ¿Español? – "Abre las compuertas, Hal." – "Lo siento Dave, 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 de Programación ● Deben ser no ambiguos ● Deben ser precisos ● Deben ser concisos ● Deben ser expresivos ● Deben estar a alto nivel (muchas abstracciones)

Cómo instruir 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 Programa Escrito en Lenguaje de Programaci ón Traducción a Lenguaje Ensamblado r Compilador

1. Cómo instruir a la computadora ● Input: lenguaje de programación de alto nivel ● Output: instrucciones de assembler de bajo nivel ● compilador tiene que: – leer y entender el programa – precisamente determinar que acciones se requieren – encontrar cómo llevar a cabo esas acciones – instruir a la computadora a lleva a cabo las acciones

Ejemplo (programa de entrada) int expr(int n) { int d; d = 4 * n * n * (n + 1) * (n + 1); return d; }

Ejemplo (Assembler de salida) 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 $33: bis $15,$15,$30 ldq $26,0($30) ldq $15,8($30) addq $30,32,$30 ret $31,($26),1

Ejecución eficiente de las acciones ● Mapeo de alto a bajo nivel – Mapeo simple de un programa a assembler produce ejecución ineficiente – Más alto el nivel de abstracción  más ineficiente ● Si no es eficiente – Abstracciones de alto nivel son inútiles ● Necesitamos – proveer un nivel alto de abstracción – con rendimiento equivalente a si usáramos assembler

Ejemplo (Assembler de salida) 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 $33: bis $15,$15,$30 ldq $26,0($30) ldq $15,8($30) addq $30,32,$30 ret $31,($26),1 No optimizado s4addq $16,0,$0 mull $16,$0,$0 addq $16,1,$16 mull $0,$16,$0 ret $31,($26),1 Optimizado

Compiladores optimizan código para... ● Velocidad / Rendimiento ● Tamaño de código ● Consumo de Poder ● Compilación rápida / eficiente ● Seguridad / Confiabilidad ● Debugging

Compiladores ayudan a incrementar el nivel de abstracción ● Lenguajes de Programación – Desde C a lenguajes OO con garbage collection – definiciones aún más abstractas ● Microprocesadores – De simple CISC a RISC a VLIW a...

Anatomía de un compilador Programa Escrito en Lenguaje de Programaci ón Traducción a Lenguaje Ensamblado r Compilador

Anatomía de un compilador Analizador Sintáctico (Parser) Generador de Código Optimizador de Código Analizador Semántico Analizador Léxico (Scanner) Parse Tree Programa (character stream) Token stream Intermediate Representation Optmized Intermediate Representation Assembly code Análisis Síntesis

¿Qué es un analizador léxico? ● ¿Qué hacemos en procesamiento de lenguaje natural? ● Primero tokenizamos ● Ejemplo: – Holacomoestantodos ● Se convierte en: – Hola como estan todos Source Program TextTokens

¿Qué es un analizador léxico? ● Ejemplos de Tokens: – operadores= + - > ( { := == <> – keywordsif while for int double – literales numéricos e10 0x13f3a – literales de carácter 'a' '~' '\'' – strings literales"6.983" "compiladores" "\"\"" ● Ejemplos de no-tokens – espacios en blancoespacio(' ') tab('\t') eol('\n') – comentarios/* este no es un token */ Source Program TextTokens

Analizador Léxico en Acción rvar1=10va1<=rfo

rvar1=10va1<=r f o

rvar1=10va1<=r fo

r var1=10va1<=r fo

r var1=10va1<=r fo

r var1=10va1<=r fo for

Analizador Léxico en Acción r var1=10va1<=r fo for

Analizador Léxico en Acción rv ar1=10va1<=r fo for

Analizador Léxico en Acción rv ar1=10va1<=r fo for

Analizador Léxico en Acción rv ar1=10va1<=r fo for

Analizador Léxico en Acción rva r1=10va1<=r fo for

Analizador Léxico en Acción rvar 1=10va1<=r fo for

Analizador Léxico en Acción rvar1 =10va1<=r fo for

Analizador Léxico en Acción rvar1 =10va1<=r fo for

Analizador Léxico en Acción rvar1 =10va1<=r fo for ID(var1)

Analizador Léxico en Acción rvar1 =10va1<=r fo for ID(var1)

Analizador Léxico en Acción rvar1= 10va1<=r fo for ID(var1)

Analizador Léxico en Acción rvar1= 10va1<=r fo for ID(var1)

Analizador Léxico en Acción rvar1= 10va1<=r fo for ID(var1)

Analizador Léxico en Acción rvar1= 10va1<=r fo for ID(var1)

Analizador Léxico en Acción rvar1= 10va1<=r fo for ID(var1)eq_op

Analizador Léxico en Acción rvar1= 10va1<=r fo for ID(var1)eq_op

Analizador Léxico en Acción rvar1=1 0va1<=r fo for ID(var1)eq_op

Analizador Léxico en Acción rvar1=1 0va1<=r fo for ID(var1)eq_op

Analizador Léxico en Acción rvar1=1 0va1<=r fo for ID(var1)eq_op

Analizador Léxico en Acción rvar1=10 va1<=r fo for ID(var1)eq_op

Analizador Léxico en Acción rvar1=10 va1<=r fo for ID(var1)eq_op

Analizador Léxico en Acción rvar1=10 va1<=r fo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10 va1<=r fo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10 va1<=r fo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10v a1<=r fo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10v a1<=r fo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10v a1<=r fo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10va 1<=r fo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10va 1<= rfo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10va1 <= rfo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10va1< = rfo for ID(var1)eq_opNum(10)

Analizador Léxico en Acción rvar1=10va1< = rfo for ID(var1)eq_opID(var1)Num(10)

Analizador Léxico en Acción rvar1=10va1< = rfo for ID(var1)eq_opID(var1)Num(10)

Analizador Léxico en Acción rvar1=10va1<=rfo for ID(var1)eq_opID(var1)Num(10)

Analizador Léxico en Acción rvar1=10va1<=rfo for ID(var1)eq_opID(var1)Num(10)

Analizador Léxico en Acción rvar1=10va1<=rfo for ID(var1)eq_opID(var1)Num(10)leq_op

Analizador Léxico en Acción rvar1=10va1<=rfo for ID(var1)eq_opID(var1)Num(10)leq_op

Analizador Léxico en Acción rvar1=10va1<=rfo for ID(var1)eq_opID(var1)Num(10)leq_op

Analizador Léxico en Acción rvar1=10va1<=rfo for ID(var1)eq_opID(var1)Num(10)leq_op

Analizadores Léxicos deben... ● Particionar el texto del programa de entrada en una subsecuencia de caracteres correspondientes a tokens ● attacharle los atributos correspondientes a los tokens ● eliminar espacios en blanco y comentarios

¿Por qué esto no es trivial? rvar1=10va1<=rfo for ID(var1)eq_opID(var1)Num(10)leq_op ● Separar precisamente el stream de texto en el stream correcto de tokens – ID("var1") no ID("var") Num(1) – ID("var1") leq_op no ID("var1<=")

Próxima clase ● Cómo describir precisamente cuáles substrings se convierten en tokens ● Cómo implementar un analizador léxico