Herramientas de usuario

Herramientas del sitio


compiladores:main

Lenguajes y Compiladores

  • Profesores: Héctor Gramaglia, Miguel Pagano, Demetrio Vilela.
  • Lista de Mail: famaf-compiladores arroba googlegroups punto com
  • Suscribirse en groups punto google punto com slash group slash famaf-compiladores.

Generalidades

  • Parciales: 2
  • Promoción: obteniendo al menos 7 en cada uno de los parciales y aprobando el taller.
  • Regularidad: aprobando 2 parciales (es posible recuperar 1) y aprobando el taller.
  • Taller: se implementarán intérpretes o compiladores de lenguajes de programación.
  • Examen: examen con parte escrita y parte oral.
  • Alumnos libres: examen con ejercicios/preguntas adicionales + defensa del taller.

Exámenes Parciales

  • PRIMER PARCIAL: 5 de mayo Notas
  • SEGUNDO PARCIAL: 20 de junio

Teórico

Bibliografía

  • Reynolds, Theories of Programming Languages, Cambridge University Press, 1998.

Apuntes de Clase

Primera parte: Lenguajes imperativos

  • Apunte 1: Introducción a la sintaxis y la semántica de lenguajes. Sintaxis abstracta. Función semántica. Composicionalidad y dirección por sintaxis. Variables y metavariables. Ligadura. Sustitución y captura en el Cálculo de Predicados. Propiedades de la semántica denotacional. Filminas del apunte 1
  • Apunte 2: El problema de dar significado a la recursión. Ordenes parciales, predominios y dominios. Funciones monótonas, morfismos y funciones continuas. Espacio de Funciones. Teorema del Menor Punto Fijo. Aplicación del TMPF para el estudio de las soluciones de una ecuación recursiva. Filminas del apunte 2

Segunda parte: Lenguajes aplicativos puros, lenguajes aplicativos con referencias y asignación

Material complementario

  • Apunte 7: Continuaciones en el lenguaje imperativo simple y el lenguaje imperativo con extensiones.

Contenidos de cada Clase

  • Martes 14/3. Apunte 1: Distintas formas de dar significado a los lenguajes de programación. Sintaxis abstracta: gramáticas abstractas. Definición de la función semántica: ecuaciones semánticas, dirección por sintaxis y composicionalidad.
  • Viernes 17/3. Apunte 1: Lenguaje de la lógica de predicados. Sintaxis y semántica denotacional. Variables como frase abstracta. Noción de estado. Variables y metavariables. Ocurrencias ligadoras, ligadas y libres de una variable. Ejemplos. Variables libres. Teoremas de Coincidencia y Renombre.
  • Martes 21/3. Definición del operador sustitución. Propiedades de la semántica: Teoremas de Coincidencia y Renombre. Demostraciones: Teorema de coincidencia. Apunte 2: Dificultades para dar significado a un programa recursivo de Haskell. Ecuaciones recursivas y sus soluciones. Órdenes parciales. Orden discreto y llano. Cadenas. Supremo de un subconjunto. Posets de funciones. Predominios y dominios. Ejemplos.
  • Viernes 24/3. Día de la memoria.
  • Martes 28/3. Apunte 2: Supremo de cadenas en el posets de funciones. Funciones continuas. Dominios de funciones continuas. Teorema del Menor Punto Fijo. Aplicacion del TMPF para caracterizar la solución buscada de una ecuación recursiva. Introducción al Lenguaje Imperativo Simple.
  • Viernes 28/3. Apunte 3: El lenguaje Imperativo Simple (LIS). Sintaxis abstracta. Semántica denotacional (sin la iteración). El problema de dar semántica dirigida por sintaxis a la iteración. Uso del TMPF para la semántica de la iteración.
  • Martes 4/4. Apunte 3: Continuidad de la funcional F del while. Ejemplos de semántica de la iteración utilizando el TMPF. Propiedades de la semántica denotacional de LIS. Teorema de Coincidencia. Teorema de Renombre.
  • Viernes 7/4. Sustitución en el lenguaje de comandos. Problema del alias. Teorema de Sustitución. Casos de la demostración del Teorema de Coincidencia. Lenguaje imperativo con Fallas. Semántica denotacional y ejemplos.
  • Martes 11/4. No se dictaron clases: adhesión al paro.
  • Viernes 14/4. Feriado.
  • Martes 18/4. Semantica operacional de LIS. La relación “small-step”. Configuraciones. Definición axiomática de la relación “small-step”.Semántica de transiciones de LIS. Noción de Ejecución. Corrección de la semántica de transiciones de LIS respecto de la semántica denotacional. Semántica de transiciones de LIS con fallas.
  • Viernes 21/4. Corrección de la semántica operacional. Algúnos elementos nuevos de Teoría de Dominios: Producto de predominios y dominios. Unión disjunta de predominios y dominios. Dominios definidos mediante ecuaciones recursivas: una introducción intuitiva.
  • Viernes 22/4. Dominio recursivo para LIS con Fallas y Output. Semántica denotacional. Ejemplos.
  • Martes 25/4. No se dictó clase teórica.
  • Viernes 28/4. Dominio recursivo para LIS con Fallas y Output. Semántica denotacional. Ejemplos. Input: dominio recursivo y semántica denotacional. Ejemplos. FIN DE LA PRIMERA PARTE.
  • Martes 2/5. Introducción al cálculo lambda. Sintaxis, sustitución, reducción, teorema de Church-Rosser.
  • Viernes 5/5. Primer Parcial.
  • Martes 9/5. Paro docente: ¿Por qué paramos?
  • Viernes 12/5. Paro docente: ¿Por qué paramos?
  • Martes 16/5. Cálculo lambda, renombre, contracción beta y reducción; contracción eta. Evaluación normal y evaluación eager para el cálculo lambda. Semántica denotacional para el cálculo lambda.
  • Viernes 19/5. Semántica denotacional eager y normal del cálculo lambda. Propiedades de la semántica y ejemplos.
  • Martes 23/5. Lenguaje Aplicativo sin recursión. Evaluación Eager y Normal. Semántica denotacional eager.

Prácticos

Prácticos 2017

  1. Guía del 14 de marzo Gramática abstracta y semántica denotacional, composicionalidad y dirección por sintaxis.
  2. Guía extra (sale gratis) del 17 de marzo Repaso de Haskell, implementación de gramática abstracta y definición de funciones semánticas.
  3. Guía del 17 de marzo Variables, ligaduras, sustitución, renombre. Todo esto en la lógica de predicados.
  4. Guía del 28 de marzo Predominios y dominios. Funciones continuas, teorema del menor punto fijo.
  5. Guía del 7 de abril Semántica denotacional del lenguaje imperativo simple.
  6. Guía del 18 de abril Fallas. Semántica operacional del lenguaje imperativo simple.
  7. Guía del 25 de abril Productos y uniones disjuntas de predominios. Dominios recursivos. Output e Input.
  8. Guía del 16 de mayo Cálculo Lambda, sintaxis. Reducción. Formas canónicas y normales. Evaluación Normal e eager.
  9. Guía del 19 de mayo Semántica denotacional del Cálculo Lambda, la evaluación normal y la evaluación eager.
  10. Guía del 23 de mayo Lenguaje aplicativo. Evaluación y semnántica denotacional eager y normal.

Los que siguen son del año pasado, por si alguien quiere ir avanzando…

  1. Guía del 3 de junio Lenguaje aplicativo con referencias y asignación.

Extras

  1. http://pdf.aminer.org/000/210/722/initial_algebra_semantics.pdf “Initial algebra semantics and continuous algebras” Artículo que explica qué es la sintaxis abstracta de una manera amena (en la introducción).

Taller

Descargar el archivo, allí se encuentra la definición de la gramática abstracta (o una representación en Haskell de ella, existe algo así como la gramática abstracta?) junto con otros módulos útiles como la representación de Ω y funciones para manipular el estado. La tarea consiste en definir las funciones semánticas para cada categoría sintáctica IntExp, Assert y Comm. Asegurarse que el proyecto puede cargarse con GHCi o compilarse con GHC.

Mandar por mail antes del 15 de mayo a las direcciones hector.gramaglia arroba gmail punto com, miguel.pagano arroba gmail punto com y demetriomeister arroba gmail punto com. El asunto del mail debe ser lyc-2016: ApellidoNombre y debe contener un archivo adjunto ApellidoNombre.tar.bz2.

Recordar todas las buenas prácticas que aprendieron a lo largo de la carrera: modularización, abstracción, consistencia en el estilo de programación, comentarios.

Exámenes Parciales de años anteriores

2015
2013
2012
2011
2010
2009
compiladores/main.txt · Última modificación: 2017/05/23 14:06 por gramagli