Práctica 4: Compilador MINICOMP
- Horas de trabajo
estimadas (trabajando en pareja) y calendario.
- Herramientas y versión inicial del compilador (comunes a la práctica 3):
La opción -s de minicomp combinada con VerArbol (la herramienta que conoces desde la práctica 1) te puede resultar útil para entender la estructura de los AST. Ajustándolo a tus directorios, puedes hacer algo equivalente a lo que se hace en este ejemplo:
export PYTHONPATH=~/PL/Pmw.1.3.2/src/
./minicomp -s ../ejemplos/ejemplo02-seleccion.i | ~/PL/metacomp.2.5beta3/verArbolPara ejecutar el emulador TheDoc en modo gráfico debes tener los Python Megawidgets, igual que para usar VerArbol. Eso te puede resultar muy útil para depurar más cómodamente tu solución ejecutando paso a paso el código ensamblador obtenido en a.rossi, o para entender mejor algún ejemplo, haciendo algo equivalente a:
export PYTHONPATH=~/PL/Pmw.1.3.2/src/
./minicomp ../ejemplos/ejemplo02-seleccion.i
~/PL/TheDoc-1.0/bin/thedoc a.rossiSi en tu ordenador personal eso no funciona, ten en cuenta también estos requisitos de Pmw.
Alternativamente, en Ubuntu basta con instalar con el gestor Synaptic el paquete python-pmw y los que te falten de los que él necesita.
- Documentación (incluida en los paquetes anteriores):
- Ejercicios:
La práctica 4 consiste en realizar una serie de modificaciones sucesivas del compilador Minicomp. Los materiales de partida son los mismos que se dieron en la práctica 3, y habiendo realizado la 3 se deben conocer ya el lenguaje de entrada en su versión inicial y, hasta cierto punto, la estructura del compilador. Ahora vamos a empezar a trabajar también con la generación de código en lenguaje ensamblador Rossi, para lo cual es necesario como paso previo hacer una primera lectura del documento Rossi.pdf, que utilizaremos continuamente como material de consulta, e ir estudiando durante el desarrollo de la práctica las explicaciones sobre generación de código que se incluyen en el documento minicomp.pdf y en los apuntes y clases de teoría y prácticas.
En cada versión se propone incorporar alguna característica nueva al lenguaje a partir de la versión obtenida en el ejercicio anterior. Se recomienda encarecidamente escribir pruebas de cada versión para depurarla antes de pasar a la siguiente, y conservarlas y reutilizarlas para verificar fácilmente que todo sigue funcionando bien tras los cambios realizados en cada una de las versiones posteriores. Cada pareja o grupo de trabajo es responsable de probar su implementación, pero se facilitará la compartición de pruebas entre los grupos de trabajo si se desea (lo cual requerirá compartir en algunos casos criterios de implementación).
Vamos a partir de nuevo de esta versión inicial del compilador Minicomp: minicomp.tgz. No vamos a trabajar con el resultado de la práctica 3.
- Versión 0. Modificaciones a nivel léxico.
- Versión 1. Literales de tipo real.
- Versión 2. Variables de tipo real.
- Versión 3. Sentencia de escritura.
- Versión 4. Sentencia de lectura.
- Versión 5. Operador de cambio de signo y operador identidad.
- Versión 6. Operadores relacionales y operadores lógicos.
- Versión 7. Sentencia de selección.
- Versión 8. Sentencias iterativas MIENTRAS y PARA.
- Versión 9. Vectores.
- Versión 10. Funciones.
- Versión 11. Funciones con vectores.
Nuevo acuerdo de fecha 24/05/2010: La versión 9 será la última versión exigible a todos los estudiantes en las evaluaciones del curso 2009/2010. Las versiones 10 y 11 se proponen como trabajo opcional para los estudiantes interesados en ella, no se exigirán en las evaluaciones del curso 2009/2010 (ni en la evaluación continua ni en la evaluación final).
- Directorio de pruebas de estudiantes.
Cada vez que quieras descargar ese directorio puedes utilizar, por ejemplo, la siguiente orden:
wget -r -nH --cut-dirs=3 --reject "index.html*" \
http://www3.uji.es/~vjimenez/AULASVIRTUALES/PL-0910/P4-MINICOMP/pruebas/Esas pruebas han sido elaboradas casi exclusivamente por estudiantes dispuestos a compartirlas. Aquí se proporciona un espacio para hacerlo, sin ninguna garantía. En las de cursos anteriores falta incorporar los cambios realizados en las versiones del curso actual.
En esta práctica, al igual que en la anterior, no se exige que los mensajes de error sean exactamente los mismos que los de esos estudiantes. Cada estudiante debe valorar si los suyos son válidos si difieren.
- Una posible organización del tiempo:
La duración prevista de la práctica es de 5 semanas dedicando aproximadamente 5 horas por semana, trabajando cooperativamente en pareja, y habiendo asimilado los contenidos previos del curso (tanto conocimientos como habilidades). Una posible planificación razonable del trabajo a desarrollar sería la siguiente (aunque cada estudiante es libre de planificar su tiempo como crea conveniente):
- Semanas 1 y 2: versiones 0 a 5 (implementación y pruebas).
- Semana 3: versiones 6 a 8.1 (implementación y pruebas).
- Semanas 4 y 5: versiones 8.2 a 11 (implementación y pruebas).
De este modo tendremos dos sesiones más a final de mayo que servirán para completar la práctica si se lleva algún retraso y para que quienes la hayan completado a tiempo puedan, opcionalmente, realizar ejercicios adicionales de exámenes de cursos anteriores.
- Evaluación de la práctica 4 en el itinerario A (grupos TE1 y TE2): sábado 29/05/2010, en las aulas informáticas.
- La evaluación se realiza en las mismas condiciones
de las prácticas anteriores.
- Enunciado y ficheros
proporcionados.
- Notas de los grupos TE1 y TE2 obtenidas con pruebasControlMinicomp0910.tgz.
- Controles de cursos pasados:
- controlMinicomp0809.pdf,
ejemplos y pruebasControlMinicomp0809.tgz.
- controlMinicomp0708.pdf, ejemplo y pruebasControlMinicomp0708.tgz.
El enunciado del curso 2007/2008 se ha pedido en el curso 2009/2010 como parte de la versión 9. El enunciado del curso 2008/2009 se deja aquí como posible ejercicio adicional voluntario, no se exige en la evaluación de la práctica 4.
- Versión 0. Modificaciones a nivel léxico.