william cruz-santos wdelacruzd@uaemex · fortran 1954-57, j. backus (premio turing 1977)...

35
Introducción a los compiladores William Cruz-Santos [email protected] Ingeniería en Computación Universidad Autónoma del Estado de México Unidad de Competencia I 2 de octubre de 2015 William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 1 / 33

Upload: others

Post on 02-Feb-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Introducción a los compiladores

William [email protected]

Ingeniería en ComputaciónUniversidad Autónoma del Estado de México

Unidad de Competencia I

2 de octubre de 2015

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 1 / 33

Page 2: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Agenda

1 Acerca del curso

2 Breve historia de los lenguajes de programación

3 Fases de un compilador

4 Análisis léxico

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 2 / 33

Page 3: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Agenda

1 Acerca del curso

2 Breve historia de los lenguajes de programación

3 Fases de un compilador

4 Análisis léxico

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 3 / 33

Page 4: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Lineamientos del curso

Horario:Martes de 12:00-14:30Jueves de 12:00-14:30

Evaluación:Tareas 20 %Exámenes 40 %Proyecto 40 %

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 4 / 33

Page 5: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Bibliografía

El libro del dragón púrpura

Aho, Lam, Sethi & Ullman

Existen 9 ejemplares en el acervo de la biblioteca

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 5 / 33

Page 6: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Estructura del curso

El curso contempla aspectos teóricos y prácticos

Se requiere experiencia en lenguajes de programación

Trabajos escritos (teoría)

Trabajos de programación (práctica)

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 6 / 33

Page 7: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Honestidad académica

No use códigos de internet

No esta prohibida la colaboración pero no se recomienda

Se penalizará enérgicamente cualquier incidente

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 7 / 33

Page 8: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Honestidad académica

No use códigos de internet

No esta prohibida la colaboración pero no se recomienda

Se penalizará enérgicamente cualquier incidente

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 7 / 33

Page 9: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Honestidad académica

No use códigos de internet

No esta prohibida la colaboración pero no se recomienda

Se penalizará enérgicamente cualquier incidente

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 7 / 33

Page 10: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Agenda

1 Acerca del curso

2 Breve historia de los lenguajes de programación

3 Fases de un compilador

4 Análisis léxico

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 8 / 33

Page 11: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

¿Cómo se implementan los lenguajes?

1 Dos estrategias principales:Interpretados

Compilados

2 Los interpretes ejecutan programas pero no generan código ejecutable

3 Los compiladores realizan pre-procesamiento del programa fuente

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 9 / 33

Page 12: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Historia de los lenguajes de alto nivel

IBM desarrolla la computadora 704 en 1954

El costo del software excede el costo del hardware

La programación se realizó en ensamblador

Figura: Computadora IBM 704 en la NASA (Wikipedia).

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 10 / 33

Page 13: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Plankalkül1942-45, Konrad ZusePara programar la computadora Z4Características: asignaciones, if’s, ciclos

Fortran1954-57, J. Backus (premio Turing 1977)Computación numéricaCaracterísticas: modular, compilado

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 11 / 33

Page 14: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

CobolCOBOL 1960Usado para negociosCaracterísticas: estructuras, archivos, macros

Lisp1960, J. McCarthy (premio Turing 1971)Computación simbólica e interpretadoCaracterísticas: administración de memoria, listas

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 12 / 33

Page 15: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

BASIC1964, J. Kemeny y T. KurzEducativo e interactivoCaracterísticas: estructuras, arreglos, sintaxis sencilla

Pascal1971, Niklaus Wirth (premio Turing 1984)Educativo y de propósito generalCaracterísticas: estructurado, orientado a objetos

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 13 / 33

Page 16: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

C1972, Dennis Ritchie (premio Turing 1983)Programación de sistemasCaracterísticas: estructurado, usado ampliamente

C++1984, Bjarne StroustrupLenguaje de propósito generalCaracterísticas: estructurado, orientado a objetos, sobrecarga deoperadores

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 14 / 33

Page 17: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Python1991, G. van RossumLenguaje interpretado

Java1995, Sun MicrosystemsLenguaje de propósito generalBasado en C++

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 15 / 33

Page 18: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Cronología (http://rigaux.org/)

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 16 / 33

Page 19: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Ranking lenguajes de programación

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 17 / 33

Page 20: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Agenda

1 Acerca del curso

2 Breve historia de los lenguajes de programación

3 Fases de un compilador

4 Análisis léxico

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 18 / 33

Page 21: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Etapas de un compilador

1 Análisis léxico

2 Análisis sintáctico (parsing)

3 Análisis semántico

4 Generación de código intermedio

5 Optimización de código

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 19 / 33

Page 22: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Figura: Fases de un compilador.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 20 / 33

Page 23: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Agenda

1 Acerca del curso

2 Breve historia de los lenguajes de programación

3 Fases de un compilador

4 Análisis léxico

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 21 / 33

Page 24: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Análisis léxico

El analizador léxico se encarga de leer los caracteres de entrada del programfuente, los agrupa en lexemas y produce como salida una secuencia detokens para cada lexema en el program fuente. El flujo de tokens se envía alanalizador sintáctico para su análisis.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 22 / 33

Page 25: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Figura: Interacciones entre el analizador léxico y el analizador sintáctivo.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 23 / 33

Page 26: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Tareas de un analizador léxico

Escaneo: consiste en los procesos simples que no requieren ladeterminación de tokens de la entrada, como la eliminación decomentarios y la compactación de los caracteres de espacio en blancoconsecutivos en uno solo.

Análisis léxico: consiste en producir la secuencia de tokens.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 24 / 33

Page 27: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Tokens, patrones y lexemas

Token: un token es un par que consiste en un nombre de token y unvalor atributo opcional.

Patrón: es una descripción de la forma que pueden tomar los lexemasde un token.

Lexema: es una secuencia de caracteres en el programa fuente, quecoinciden con el patrón para un token y que el analizador léxico identificacomo una instancia de ese token.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 25 / 33

Page 28: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

La siguiente tabla muestra algunos ejemplos de tokens:

Token Descripción informal Lexemas de ejemploif caracteres i, f ifelse caracteres e,l,s,e Elsecomparacion < o > o <= o >= o == o ! = <=, ! =id letra seguida por letras y dígitos pi, puntuacion, D2numero cualquier constante numérica 3.14159, 0, 6.02e23literal cualquier cosa excepto “ " “core dumped"

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 26 / 33

Page 29: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Considere la siguiente instrucción en lenguaje C:

printf("Total = %d\n",puntuacion);

1 printf, puntuacionson lexemas correspondientes con el token id

2 "Total = %d\n"es un lexema que coincide con el token literal

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 27 / 33

Page 30: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Clasificación de los tokens:

Tokens para las palabras claves: for, while, if, else, struct

Tokens para los operadores.

Un token que representa a todos los identificadores.

Tokens para las constantes, números y cadenas.

Tokens para los signos de puntuación como paréntesis, coma, y signos.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 28 / 33

Page 31: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Considere la siguiente sentencia en Fortran:

E = M * C ** 2

donde sus tokens y atributos son los siguientes:

<id, apuntador a la entrada en la tabla de símbolos para E >

<asigna-op>

<id, apuntador a la entrada en la tabla de símbolos para M>

<mult-op>

<id, apuntador a la entrada en la tabla de símbolos para C>

<exp-op>

<numero, valor entero 2>

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 29 / 33

Page 32: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Ejercicio 1: Divida el siguiente programa en C++:

float cuadroLimitado(x) float x {/*devuelve x al cuadrado, pero nunca mas de 100*/

return (x<=-10.0||x>=10.0)?100:x*x;}

en lexemas apropiados.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 30 / 33

Page 33: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Ejercicio 2: Divida el siguiente programa en HTML:

He aquí una foto de <B>mi casa</B>:<P><IMG SRC = "casa.gif"><BR>Vea <A HREF = "masImgs.html">Más imágenes</A> sile gustó ésa.<P>

en lexemas apropiados.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 31 / 33

Page 34: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

Comentarios finales

La primera fase de un compilador es el análisis léxico, de tal manera quesea posible identificar los componentes principales en un lenguaje comolos tokens.

En las fases posteriores como la semántica se evaluán las expresionescon respecto a la gramática identificada en el análisis léxico.

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 32 / 33

Page 35: William Cruz-Santos wdelacruzd@uaemex · Fortran 1954-57, J. Backus (premio Turing 1977) Computación numérica ... 1 Acerca del curso 2 Breve historia de los lenguajes de programación

¿Preguntas?

William Cruz-Santos (CU Valle de Chalco) Compiladores 2 de octubre de 2015 33 / 33