Entrega 1
Deadline: 10 de Septiembre 2023
⚠ Importante
Recuerde las reglas del código de conducta.
Objetivos básicos de la entrega:
Familiarizarse con la estructura basica del compilador.
Compilar
let
-bindings.Compilar varios tipos de datos, y operaciones sobre ellos.
Agregar condicionales (if).
Objetivos extras:
Evaluación perezosa de las operaciones booleanas.
La evaluación se hace con el specs grading (vea los detalles aquí).
4 pts spec básica
1 pt spec avanzada
0.5pts testing
0.5pts calidad del código.
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:
+
sobre enteros (de tipoint * int -> int
)and
sobre booleanos (de tipobool * bool -> bool
)la comparación
<
sobre enteros (de tipoint * int -> bool
)
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
La operación booleana
and
(y tambiénor
, si lo implementan) suelen tener una semántica de "atajos de evaluación", evaluando el segundo argumento cuando es necesario. Modifique su compilador para implementar esta semántica.