Compiladores Introducción Oscar Bonilla [email protected] Universidad Galileo.

65
Compiladore s Introducción Oscar Bonilla [email protected] Universidad Galileo

Transcript of Compiladores Introducción Oscar Bonilla [email protected] Universidad Galileo.

Page 1: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

CompiladoresIntroducción

Oscar [email protected] Galileo

Page 2: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu 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?

Page 3: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Lenguajes

● Pueden ser usados para describir cualquier acción

● Hay muchas formas de describir la misma acción

Page 4: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

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

Page 5: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Lenguajes de Programación

● Deben ser no ambiguos● Deben ser precisos● Deben ser concisos● Deben ser expresivos● Deben estar a alto nivel (muchas abstracciones)

Page 6: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

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

ProgramaEscrito en

Lenguaje deProgramaci

ón

Traducción a

LenguajeEnsamblado

r

Compilador

Page 7: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

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

Page 8: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Ejemplo (programa de entrada)

int expr(int n){

int d;d = 4 * n * n * (n + 1) * (n + 1);return d;

}

Page 9: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Ejemplo (Assembler de salida)lda $30,-32($30)stq $26,0($30)stq $15,8($30)bis $30,$30,$15bis $16,$16,$1stl $1,16($15)lds $f1,16($15)sts $f1,24($15)ldl $5,24($15)bis $5,$5,$2s4addq $2,0,$3ldl $4,16($15)mull $4,$3,$2ldl $3,16($15)addq $3,1,$4mull $2,$4,$2ldl $3,16($15)addq $3,1,$4mull $2,$4,$2stl $2,20($15)ldl $0,20($15)br $31,$33

$33:bis $15,$15,$30ldq $26,0($30)ldq $15,8($30)addq $30,32,$30ret $31,($26),1

Page 10: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

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

Page 11: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Ejemplo (Assembler de salida)lda $30,-32($30)stq $26,0($30)stq $15,8($30)bis $30,$30,$15bis $16,$16,$1stl $1,16($15)lds $f1,16($15)sts $f1,24($15)ldl $5,24($15)bis $5,$5,$2s4addq $2,0,$3ldl $4,16($15)mull $4,$3,$2ldl $3,16($15)addq $3,1,$4mull $2,$4,$2ldl $3,16($15)addq $3,1,$4mull $2,$4,$2stl $2,20($15)ldl $0,20($15)br $31,$33

$33:bis $15,$15,$30ldq $26,0($30)ldq $15,8($30)addq $30,32,$30ret $31,($26),1

No optimizados4addq $16,0,$0mull $16,$0,$0addq $16,1,$16mull $0,$16,$0mull $0,$16,$0ret $31,($26),1

Optimizado

Page 12: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Compiladores optimizan código para...

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

Page 13: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

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 ...

Page 14: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Anatomía de un compilador

ProgramaEscrito en

Lenguaje deProgramaci

ón

Traducción a

LenguajeEnsamblado

r

Compilador

Page 15: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

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

ális

isS

ínte

sis

Page 16: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

¿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 Text Tokens

Page 17: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

¿Qué es un analizador léxico?

● Ejemplos de Tokens:– operadores = + - > ( { := == <>– keywords if while for int double– literales numéricos 43 6.035 -3.6e10 0x13f3a– literales de carácter 'a' '~' '\''– strings literales "6.983" "compiladores" "\"\""

● Ejemplos de no-tokens– espacios en blanco espacio(' ') tab('\t') eol('\n')– comentarios /* este no es un token */

Source Program Text Tokens

Page 18: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

Page 19: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

Page 20: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

Page 21: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

Page 22: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

Page 23: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 24: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 25: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 26: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 27: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 28: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 29: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 30: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 31: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for

Page 32: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1)

Page 33: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1)

Page 34: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1)

Page 35: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1)

Page 36: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1)

Page 37: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1)

Page 38: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op

Page 39: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op

Page 40: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op

Page 41: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op

Page 42: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op

Page 43: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op

Page 44: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op

Page 45: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 46: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 47: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 48: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 49: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 50: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 51: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 52: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 53: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 54: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op Num(10)

Page 55: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10)

Page 56: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10)

Page 57: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10)

Page 58: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10)

Page 59: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10) leq_op

Page 60: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10) leq_op

Page 61: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10) leq_op

Page 62: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Analizador Léxico en Acción

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(var1)Num(10) leq_op

Page 63: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

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

Page 64: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

¿Por qué esto no es trivial?

r v a r 1 = 1 0 v a 1 < =rf o

for ID(var1) eq_op ID(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<=")

Page 65: Compiladores Introducción Oscar Bonilla obonilla@galileo.edu Universidad Galileo.

Próxima clase

● Cómo describir precisamente cuáles substrings se convierten en tokens

● Cómo implementar un analizador léxico