You are on page 1of 31

Compiladores

Jos Raymundo Marcial Romero


Pgina del curso:
http://fi.uaemex.mx/rmarcial/Compiladores2012B.html

Lunes 11:00-13:00 Mircoles: 10:30-12:00 Viernes (Posiblemente Sala): 10:30-12:00


Elabor: Dr. Jos Raymundo Marcial Romero

Estructura del Curso


El curso es tanto terico como prctico. Se necesitan conocimientos tericos y prcticos en lenguajes de programacin Ensayos Escritos = Teora La entrega es una semana despus de la clase. Al inicio de la clase. Programas = Prctica Entrega en disco con nombre y nmero de cuenta completo, as como manual de usuario. Las fechas y hora de entrega son Inapelables.
Elabor: Dr. Jos Raymundo Marcial Romero

Honestidad Acadmica
No utilizar trabajos de fuentes externas sin citarlas Incluyendo cdigo Se emplear software para detectar plagio varios casos en los semestres pasados

NO PLAGIO

Elabor: Dr. Jos Raymundo Marcial Romero

El proyecto del curso


Un proyecto desarrollado en el semestre Se desarrollar en 4 o 5 partes (fcilmente) Cuanto antes empiecen mejor.

Elabor: Dr. Jos Raymundo Marcial Romero

Evaluacin
Calificaciones parciales: Entrega proyecto final: 25 % cada una 3 x 25% = 75% 25%

Las calificaciones parciales estn divididas de la siguiente manera:


Exmenes escritos: Proyectos y tareas: 3 x 10% = 30% 3 x 15% = 45% (5% de tareas si aplica)

Elabor: Dr. Jos Raymundo Marcial Romero

Bibliografa
Libros de texto:
Compiladores. Principios, tcnicas y herramientas. Alfred V. Aho, Ravi Sethi, J. D. Ullman Addison-Wesley, 1998 (2007) Construccin de Compiladores. Principios y prcticas Kenneth C. Louden Thomson, 2004. Modern Compiler implementation in Java Andrew w. Appeal Cambridge
Elabor: Dr. Jos Raymundo Marcial Romero

Cmo se implementan los lenguajes?


Existen dos estrategias principales:
Intrpretes (mas viejos, menos estudiados)

Compiladores (ms nuevos, ms estudiados)


Los Intrpretes ejecutan los programas como estn.
Un poco a nada de preprocesado

Los compiladores realizan pre-procesamiento extensivo


La mayora de las implementaciones usan compiladores
Elabor: Dr. Jos Raymundo Marcial Romero

Historia de los Lenguajes de alto nivel


En 1953 IBM desarroll el 701. Toda la programacin se haca en Ensamblador. Problema: El costo del Software exceda el costo del hardware. John Backus: Speedcoding
Un Intrprete Corra 10-20 veces ms lento que ensamblador escrito a mano.

Elabor: Dr. Jos Raymundo Marcial Romero

Fortran I
1954 IBM desarroll el 704 John Backus
Idea: Trasladar cdigo de alto nivel a ensamblador Muchos pensaron que era imposible.

1954-7 Proyecto FORTRAN-1 Para 1958, >50% de todo el software estaba en Fortran. Redujo el tiempo de desarrollo dramticamente.
(2 semanas -> 2 horas.)
Elabor: Dr. Jos Raymundo Marcial Romero

Fortran I
El primer compilador
Produjo cdigo casi tan bueno como escrito a mano. Alto impacto en ciencias de la computacin.

Condujo a un gran trabajo terico en el rea.

Los compiladores modernos preservan la forma de Fortran.


Elabor: Dr. Jos Raymundo Marcial Romero

La estructura de un compilador
Anlisis lxico Anlisis Sintctico Anlisis Semntico Optimizacin Generacin de cdigo

Los primeros 3, al menos se pueden entender por analoga con el pensamiento humano.

Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis Lxico
Primer paso: reconocer palabras.
Las unidades ms pequeas
Esto es una sentencia.

Note la
Mayscula " E " (smbolo inicial de la sentencia) Espacio " " (separador de palabras) Punto ". " (fin de la sentencia)
Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis lxico (2)


El anlisis lxico no es trivial
Sto on is uma sntencia

Adems los lenguajes de programacin emplean mas signos que otros lenguajes.
*p->f + = -.12345 e-5

Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis Lxico (3)


Los analizadores lxicos dividen el texto de un programa en palabras o tokens
If x==y then z=1; else z=2;

Unidades:
If, x, ==, y, then, z, =, 1, ;, else, z, =, 2, ;

Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis Sintctico
Una vez que se entendieron las palabras, el siguiente paso es entender la estructura de las sentencias.
Parsing = Diagramas de sentencias
El diagrama es un rbol

Elabor: Dr. Jos Raymundo Marcial Romero

Diagrama de una Sentencia

Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis Sintctico de Programas


Considere:
if x==y then z=1; else z=2; El diagrama es:

Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis Semntico
Una vez que se entendi la estructura, se analiza el significado. Los compiladores realizan un anlisis limitado para detectar inconsistencias. Algunos realizan un mayor anlisis para mejorar el rendimiento del programa.

Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis Semntico en Ingls


Ejemplo:
Jack said Jerry left his assigment. A que se refiere his? Jack o Jerry.

An peor
Jack said Jack left his assigment at home. Cul dejo la tarea?

Elabor: Dr. Jos Raymundo Marcial Romero

Anlisis Semntico en Programacin


Los lenguajes de programacin definen reglas estrictas.
Este programa en C++ imprime " 4 "; la definicin que se usa es la interna.

{
Int Jack = 3; { Int Jack = 4; count << Jack; } }

Elabor: Dr. Jos Raymundo Marcial Romero

Ms sobre Anlisis Semntico


Los compiladores llevan a cabo verificaciones semnticas adems de verificar el entorno de las variables. Ejemplo:
Jack left her homework at home

Un tipo incorrecto entre Jack y her, sabemos que son diferentes.


Asumiendo que Jack es hombre.
Elabor: Dr. Jos Raymundo Marcial Romero

Optimizacin
No hay contraparte en Espaol o Ingles, pero es semejante a llevar a cabo edicin. Automticamente modifica programas para que:
Corran ms rpido. Usen menos memoria En general, conserven mas recursos.

El proyecto no tiene componentes de optimizacin.

Elabor: Dr. Jos Raymundo Marcial Romero

Ejemplo de Optimizacin

X=Y*0

Es lo mismo que

X=0

Elabor: Dr. Jos Raymundo Marcial Romero

Generacin de Cdigo
Generalmente produce cdigo en ensamblador.
Una traslacin a otro lenguaje
Anlogo a la traslacin entre lenguas

Elabor: Dr. Jos Raymundo Marcial Romero

Problemas
La compilacin es casi simple, pero se tienen algunos problemas.
Ejemplo: Cmo se manipulan los programas errneos? El diseo de lenguajes tiene un gran impacto en los compiladores.
Determina que es fcil y difcil de compilar Tema del curso: mucho influye el diseo de los lenguajes.
Elabor: Dr. Jos Raymundo Marcial Romero

Compiladores hoy en da
La estructura de casi cualquier compilador se adhiere a nuestro esquema de trabajo. Las proporciones han cambiado desde FORTRAN.
Antes: lxico, sintctico ms complejo, caro. Ahora: la optimizacin domina todas las otras fases, lxico y sintctico es barato.

Elabor: Dr. Jos Raymundo Marcial Romero

Tendencias en Compilacin
La optimizacin para mejorar la velocidad es menos interesante. Excepto en:
Programas cientficos Procesadores avanzados Pequeos dispositivos donde la velocidad = vida mayor de la batera.

Ideas de compiladores para mejorar la fiabilidad de cdigo.


Seguridad en memoria Detectar errores

Elabor: Dr. Jos Raymundo Marcial Romero

Tendencias
Compiladores
Ms complejos. Manejados por la distincin que existen entre:
Nuevos lenguajes Nuevas arquitecturas.

Elabor: Dr. Jos Raymundo Marcial Romero

Porqu estudiar compiladores?


Mejorar el entendimiento acerca de la conducta de programas. Mejorar la habilidad para aprender nuevos lenguajes Aprender a construir un sistema grande y fiable. Ver muchos conceptos de Computacin en la prctica.
Elabor: Dr. Jos Raymundo Marcial Romero

Material Adicional
Flex (Para C)
http://www.gnu.org/software/flex/manual/ht ml_chapter/flex_toc.html

Jlex (Para Java)


http://www.stanford.edu/class/cs143/

Para Java buscar


Javacup, o alguna otra herramienta
Elabor: Dr. Jos Raymundo Marcial Romero

Tarea 1
Ejercicios 1.2 y 1.3 del libro de Kenneth

Elabor: Dr. Jos Raymundo Marcial Romero

You might also like