7.6

Entrega 1

Deadline: 26 de Septiembre 2020

⚠ 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 https://github.com/pleiad/CDI-2021-X/.Aceptela y clone el repositorio.

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 necesitan 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 (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 basicos

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 donde 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 cualquieras.

5 Objetivos extras