[[teaching:cc4101:tareas:2026-1:tarea2|<< Volver]]
===== Parte BONUS. Modificadores de with (1.0 pto) =====
En el lenguaje SL, el único lugar donde se puede especificar una estrategia de evaluación es en la firma de una función anónima. Como hemos visto, las funciones anónimas también son en esencia la forma de introducir una variable local (recuerde como se puede considerar que ''with'' es azucar sintactico para una aplicación de lambda). En esta parte bonus, se pide extender la sintaxis del ''with'' para que permita especificar la estrategia de evaluación de la expresión nombrada.
Por ejemplo:
{with {x : {name Num} {printn 10}}
{+ x x}}
enlaza ''x'' con la promesa de evaluar ''{printn 10}'' cada vez que sea necesario. En este ejemplo, se debe imprimir ''10'' dos veces, y producir ''20''.
Noten en particular que la sintaxis requiere indicar el tipo completo, esto va a simplificar las cosas
==== Modificación de la gramática y parser =====
Se modificará la gramática de la siguiente forma:
::=
| {+ }
| {if0 }
;ocupamos [] para denotar algo opcional (no se escriben los [])
| {with { [: ] } }
|
| { }
| {fun { : } -> : }
| {printn }
Ahora ''with'' admite un modificador opcional que cambiará el modificador de tipo de la expresión nombrada al símbolo.
* (0.1 ptos) Cambie la sintaxis de la estructura ''swith'' para que admita un modificador.
* (0.3 ptos) Modifique la función ''parse-sl'' para manejar los casos en que sí hay modificadore. En caso de no haber, puede usar ''#f'' como modificador por defecto. Recuerde manejar el caso ''value''.
* (0.3 ptos) Modifique el caso ''swith'' en la función ''type-ast'' para que cambie el modificador de la expresión nombrada.
* (0.3 ptos) Modifique el caso ''swith'' en la función ''transform'' para que se interprete de forma correcta la expresión nombrada.