Presentación del plan de trabajo
Metodología
Aquí se irá proponiendo un plan de trabajo anual para aprender los contenidos del curso, indicando en cada tema los apartados a estudiar de la bibliografía recomendada e incluyendo una recopilación de ejercicios, muchos de ellos resueltos. Intenta seguirlo, comparando las soluciones de los ejercicios con las tuyas tras intentar resolverlos. Es importante que veas las soluciones después de intentar resolver los ejercicios sin ayuda, no antes. Si no consigues entender algo, acude a tutorías sin esperar a final de curso.
Aunque la asistencia sea voluntaria, ten en cuenta que la asignatura II26 es presencial. El contenido de esta web se proporciona para complementar las clases, no para sustituirlas. Ni todas las explicaciones de clase se encuentran en la bibliografía o en esta web, ni todos los ejercicios de esta web se resolverán en clase. En el plan de trabajo se indican las sesiones de clase de teoría previstas para cada tema y las sesiones de laboratorio previstas para cada práctica (de acuerdo con el calendario académico y los horarios del LLEU). Esto es una estimación que se podría ir actualizando en función del ritmo del curso.
Bibliografía básica
El texto básico que utilizaremos inicialmente en cada tema es "Construcción de compiladores" de K. Louden, pero generalmente iremos más alla de los contenidos del libro, las prácticas las realizaremos con lenguajes diferentes, y haremos otros ejercicios, muchos de ellos procedentes de exámenes de cursos anteriores de la asignatura II26 (antes E79) y de los boletines elaborados por Federico Prat para la asignatura IG29 (antes F54) .
Prácticas
Las prácticas de la asignatura están organizadas en 4 etapas cuya dificultad va creciendo progresivamente, por una parte aprendiendo a implementar un intérprete antes de implementar un compilador, y por otra parte enriqueciendo poco a poco el lenguaje de entrada. Durante el curso se proporcionarán los enunciados detallados y el material necesario.
En las prácticas hemos tratado de estimar el tiempo requerido por dos estudiantes que trabajen cooperativamente tanto en el diseño como en la implementación y las pruebas de su solución intentando seguir esta metodología de desarrollo, y que hayan superado los cursos y prácticas previos y tengan por tanto los conocimientos y habilidades correspondientes.
Prerrequisitos
Supondremos que los estudiantes conocen los contenidos de:
- Metodología y Tecnología de la Programación (programación en lenguajes de alto nivel, y en particular en Python),
- Introducción a los Computadores y Arquitectura de Computadores I (programación en lenguaje ensamblador, organización de la memoria),
- Programación Avanzada (conceptos propios de la programación orientada a objetos, aunque utilizaremos Python en vez de C++),
- Estructuras de Datos y de la Información (representación de la información empleando árboles, recorrido de los mismos),
- Entornos de Programación (trabajo en Linux, scripts), y
- Teoría de Autómatas y Lenguajes Formales (lenguajes regulares e incontextuales, expresiones regulares, autómatas, gramáticas).
Horas estimadas
Nuestra planificación de horas de clase presenciales equivale a la de las asignaturas anuales de 9 créditos, que se planifican generalmente con 3 horas de clase semanales (exceptuando días festivos), es decir, 1.5 horas por cada 4.5 créditos. Nuestros 4.5 créditos de prácticas los organizamos en sesiones de 2 horas en ambos semestres, para compensar con media hora semanal las que no se hacen al principio del curso (hasta ver un mínimo de teoría), en enero (donde se juntarían con la preparación de los exámenes del primer semestre) y en dos semanas del segundo semestre en las que el viernes es festivo (para llevar los grupos de prácticas de jueves y viernes sincronizados). Nuestros 4.5 créditos de teoría los organizamos en sesiones de 1.5 horas en el segundo semestre y de 2 horas en el primer semestre, y esa media hora adicional cada sesión del primer semestre permite dejar libres las dos semanas de enero previas a los exámenes y dos semanas del segundo semestre. Con eso las horas presenciales se ajustan al sistema de créditos tradicional.
Al mismo tiempo, tratamos de organizar las horas de trabajo no presenciales de acuerdo con el Sistema Europeo de Transferencia de Créditos (ECTS): un estudiante a tiempo completo debe trabajar unas 1600 horas anuales (incluyendo tiempo de clase y de trabajo fuera de clase). Como el cuarto curso de Ingeniería Informática de la UJI tiene asignados 73 créditos en vez de 60, asumimos que, proporcionalmente, a los 9 créditos de la asignatura II26 les corresponden, aproximadamente, 200 de esas horas (en vez de las 240 que nos corresponderían si fuesen 9 créditos de un curso estándar de 60). Por ello, asignamos 100 horas de trabajo a los 4.5 créditos de teoría y 100 horas a los 4.5 créditos de prácticas.
Si nuestras estimaciones de tiempo son incorrectas, agradeceremos cualquier realimentación que nos permita ajustarlas mejor, a ser posible con datos reales e indicaciones concretas sobre dónde están desajustados los tiempos de la tabla siguiente (teniendo en cuenta que un margen de error de un 10 % puede ser aceptable, y que se trata de ajustarse al tiempo total disponible):
Teoría y prácticas | HC = Horas de clase |
HNP = Horas no presenciales |
HC+HNP | HNP/HC | Horas de evaluación |
---|---|---|---|---|---|
Tema 0: Organización de la asignatura y motivación | 2 | 1 | 3 | 0.5 | |
Tema 1: Estructura de los compiladores e intérpretes | 2 | 2 | 4 | 1 | |
Tema 2: Análisis léxico | 12 | 13 | 25 | 1.1 | 1 |
Práctica 1: Intérprete MICROCALC | 8 | 12 | 20 | 1.5 | 2 |
Tema 3: Análisis sintáctico | 10 | 18 | 28 | 1.8 | 1 |
Práctica 2: Intérprete POLICALC | 10 | 15 | 25 | 1.5 | 2 |
Tema 4: Análisis semántico | 4 | 10 | 14 | 2.5 | 1 |
Práctica 3: Intérprete MINIINT | 8 | 12 | 20 | 1.5 | 2 |
Tema 5: Generación de código | 8 | 12 | 20 | 1.5 | 1 |
Práctica 4: Compilador MINICOMP | 14 | 11 | 25 | 0.8 | 2 |
Evaluación final | 4 | ||||
Total: 78 + 106 + 16 = 200 horas | 78 | 106 | 184 | 1.36 | 16 |
Esta dedicación se complementa durante el segundo semestre con sesiones de refuerzo para los estudiantes que las necesiten. El horario, duración y contenido se acuerda con los estudiantes interesados.