Lenguajes de Programación II (CI-4721)

Esta es la primera materia de la cadena de especialización del área de Lenguajes de Programación. Se ofrece cada dos años, los años pares, en el trimestre Enero-Marzo. Como se trata de una electiva de especialización supongo que Ud. está interesado en el tema, así que no se trata de «pasar» sino de ver cuán dedicado e interesado está en el tema, y la calidad del resultado de su trabajo.

Los tópicos fundamentales de estudio son:

Evaluación

La materia tiene un componente teórico cuya evaluación corresponde al 65% del total. La evaluación será completada en dos exámenes escritos individuales de 35% y 30% respectivamente. Consulte el calendario de la materia para conocer las fechas definitivas y contenido a evaluar en cada caso.

La materia tiene un componente práctico cuya evaluación corresponde al 35% del total y se manifiesta en el proyecto de programación. La evaluación es continua con dos hitos resumen de 15% y 20%. Note que durante las sesiones de laboratorio Ud. deberá exhibir los avances de su proyecto de manera concreta mediante la exposición y discusión de sus decisiones de diseño e implementación; llegada la fecha hito, simplemente se resumirán los resultados parciales alcanzados y se redondeará la calificación final.

En síntesis, todas las semanas tiene que entregar algo.

El Proyecto

Su proyecto de programación, que se extiende durante dos trimestres continuos, consiste en la implantación de un compilador para un lenguaje de programación concreto diseñado por Ud. El léxico y sintaxis del lenguaje de programación es libre, pero el diseño debe incluir al menos:

Elementos como manejo automático de memoria dinámica, compilación separada y manejo de procedimientos como objetos de primera clase no son viables en tan corto tiempo, así que ni siquiera los considere. Cualquier otro elemento que Ud. quiera incorporar al lenguaje debe ser discutido antes de la tercera semana para mantener el trabajo factible.

Herramientas de Programación

El compilador para su lenguaje puede desarrollarse con:

Este curso no es un tutorial de C/C++, Haskell o ninguna de las librerías. Puedo ofrecer orientación general y conducirlos a la documentación, sin embargo se espera que Ud. tenga razonable dominio del lenguaje y de las técnicas de programación asociadas.

Independientemente del lenguaje de programación que Ud. haya escogido, se espera que el desarrollo de su proyecto ocurra apoyado en el sistema de control de versiones Git, con repositorios sobre los cuales yo pueda supervisar que en efecto hay trabajo en curso. Su repositorio debe albergar tanto su código (documentado) como también los documentos de soporte y notas de implantación.

Los equipos son de dos (2) personas.

Bibliografía

El curso estará basado sobre cuatro libros de texto.

   Scott, Michael
   Programming Language Pragmatics
   Morgan Kaufmann
   ISBN 0-12-633951-1

Pueden usar la Tercera (tapa blanca, como el que muestro el primer día de clase), la Segunda Edición (tapa negra) o Primera Edición por igual. En los cronogramas y material de apoyo hago referencia a la tercera edición de ese libro como [Scott].

El [Scott] asiste en los elementos de diseño del lenguaje y su manifestación en el diseño del compilador. A diferencia de lo que ocurre en CI-3641, en la cadena de lenguajes se utiliza casi todo el contenido del libro.

   Sudkamp, Thomas
   Languages and Machines
   Addison-Wesley Publishing
   ISB 0-321-32221-5
   QA267.3.S83

Pueden usar la Tercera Edición (tapa verde, como el que muestro el primer día de clase) o la Segunda Edición (tapa roja) por igual. En los cronogramas y material de apoyo hago referencia a la tercera edición de ese libro como [Sudkamp].

El [Sudkamp] asiste en los elementos de teoría matemática relacionados con análisis sintáctico generalizado. A diferencia de lo que ocurre en CI-3725, en la cadena de lenguajes solamente se desarrollan los capítulos relacionados con reconocedores LL y LR pero en toda su extensión (k arbitrario).

    Aho, Sethi & Ullman
    Compilers: Principles, Techniques and Tools
    Addison-Wesley Publishing
    ISBN 0-201-10088-6

    Aho, Lam, Sethi & Ullman
    Compilers: Principles, Techniques and Tools
    Addison-Wesley Publishing
    ISBN 0-321-48681-1

Estos son, respectivamente, las dos últimas ediciones de «el dragón», por la imagen que tiene en la portada. La Primera Edición (tapa blanca) es útil para CI-4721, pero se queda corta para CI-4722. La Segunda Edición (tapa morada) no incluye algunos tópicos de CI-4721, pero es completo para CI-4722. En los cronogramas hago referencia a estos libro como [ASU] y [ALSU], respectivamente.

Cronograma habitual y Láminas de Clase

Sigue el cronograma habitual del curso. Cada una de las sesiones de clase incluye el enlace a las versiones más recientes de las láminas que uso para dirigir las clases, adeḿas de las referencias al material de lectura necesario.

Las versiones de cursos anteriores no están disponibles. Si durante alguna clase se hacen correcciones o agregados, espere encontrar la versión corregida aquí eventualmente.

Teoría

Laboratorio

El cronograma del laboratorio varía según el desempeño de los equipos. En cada sesión presentaré algún tópico relevante a su trabajo práctico, estableciendo el hito de entrega para la siguiente sesión (aparece destacado en cada sesión).

En general, el cronograma consiste en:

Ediciones Anteriores