8.8

Entrega 1

Deadline: 10 de Septiembre 2023

⚠ Importante

Recuerde las reglas del código de conducta.

Objetivos básicos de la entrega:

Objetivos extras:

La evaluación se hace con el specs grading (vea los detalles aquí).

1 Para empezar

Para partir, revise su correo, debería tener una invitación para colaborar en el repositorio https://github.com/pleiad/CDI-2023-X/, donde X es el número de su grupo. Acéptela y clone el repositorio.

Agregue el repositorio CDI-reference como remote con el siguiente comando:

git remote add cdi https://github.com/pleiad/CDI-reference.git

Esto le servirá para obtener el código base de las futuras entregas.

Dentro del repositorio ejecute git checkout entrega1 y lea cuidadosamente el archivo README.md.

1.1 Testing del compilador

Tenemos una librería dedicada al testing del compilador, debe usarla. Puede encontrar su documentación este enlace. Siga las instrucciones para instalarla correctamente.

1.2 Desarrollo y entrega del código

Recuerde hacer un git commit cada vez que avanza en su desarrollo, y subir el código a su repositorio github para facilitar el acceso al código para los auxiliares en caso de que necesite ayuda.

Para entregar su solución, haga un release en github con nombre entrega1 y entregue el hash del commit en U-cursos.

2 let-bindings

Extienda su compilador para soportar variables locales con alcance léxico con la expresión (let (id expr) body).

Recuerde probar todos los casos relevantes, tales como lets anidados, incluyendo también casos de tests negativos (es decir, que tienen que arrojar errores).

3 Tipos de datos básicos

Hasta ahora, el lenguage fuente solamente ocupa enteros como valores. Adoptando una codificación similar a la vista en clases, extienda el lenguaje con valores booleanos, y al menos las operaciones binarias siguientes:

Además, a parte de las operaciones unarias sobre enteros (add1, sub1), debe incluir la operación unaria not sobre booleanos.

⚠ Importante

En esta entrega, no se preocupe por los errores de tipos en tiempo de ejecución, por ejemplo al ejecutar (+ 1 false) o (not 3). Obviamente, puede dejar anotado en comentarios dónde deberían ir los checks correspondientes. Aquellos se agregarán en la siguiente entrega, una vez que sepamos interactuar con C.

4 Condicionales if

Agregue condicionales (if cond true-branch false-branch), donde cond es una expresión booleana, y las ramas son expresiones cualesquiera.

5 Objetivos extras