Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
teaching:cc4101:tareas:2017-2:tarea3 [2017/11/07 11:13] – [Tarea 3] folmedoteaching:cc4101:tareas:2017-2:tarea3 [2017/11/07 12:44] (current) – [Tarea 3] folmedo
Line 12: Line 12:
 Su tarea recibirá un String como argumento y debe parsearlo, interpretarlo y retornar el resultado como un String. Su tarea recibirá un String como argumento y debe parsearlo, interpretarlo y retornar el resultado como un String.
  
-A continuación se presenta, por partes, la gramática BNF del lenguaje a implementar (Números, Funciones, Secuencias y Set).+A continuación se presenta, por partes, la gramática BNF del lenguaje a implementar (Números, Funciones, Secuencias y Set). La semántica del lenguaje debe ser la misma a la vista en clases, por ejemplo (ante la presencia de mutaciones) los argumentos de una suma se deben evaluar de izquierda a derecha.  
 ====== Números (2pt)======  ====== Números (2pt)====== 
 <code scheme> <code scheme>
Line 29: Line 30:
  
 Al igual que en la tarea pasada, usted tiene total libertad en como implementar cada una de estas funciones. Al igual que en la tarea pasada, usted tiene total libertad en como implementar cada una de estas funciones.
 +
 +Ejemplos con Java:
 +<code Java>
 +java tarea3 "4"
 +>"4"
 +</code>
 +
 +<code Java>
 +java tarea3 "(+ 4 3)"
 +>"7"
 +</code>
 +
  
 ====== Funciones (2pt)====== ====== Funciones (2pt)======
  
-Usted deberá extender su lenguaje con funciones de primera clase, estas deben tener régimen de evaluación eager y scope estático. Note que los mensajes de error son un String, su tarea debe siempre retornar un String+Usted deberá extender su lenguaje con funciones de primera clase. Éstas deben tener régimen de evaluación eager y scope estático. 
  
 <code scheme> <code scheme>
Line 45: Line 58:
  
   -  "error: identificador libre!! x" que se lanza al encontrar con un identificador libre 'x'    -  "error: identificador libre!! x" que se lanza al encontrar con un identificador libre 'x' 
-  -  "error: expresión inválida expr" que se lanza al no poder interpretar 'expr',esta no es ni un número ni una función.   +  -  "error: expresión inválida expr" que se lanza al no poder interpretar 'expr',ésta no es ni un número ni una función.  
-====== Secuencias y Set (2pt)======+
  
-Usted deberá extender su lenguaje con secuencias y la capacidad de cambiar el valor de una variable, note que **NO** tiene que implementar cajas. 
- 
- 
-<code scheme> 
-<s-expr> ::= ... 
-         | (seqn <s-expr> <s-expr>) 
-         | (set <id> <s-expr>) 
-</code> 
- 
-A continuación se presentan diferentes ejemplos: 
  
 Ejemplos con Java: Ejemplos con Java:
-<code Java> 
-java tarea3 "4" 
->"4" 
-</code> 
  
 <code Java> <code Java>
 java tarea3 "y" java tarea3 "y"
 >"error: identificador libre!! y" >"error: identificador libre!! y"
-</code> 
- 
- 
-<code Java> 
-java tarea3 "(+ 4 3)" 
->"7" 
 </code> </code>
  
Line 82: Line 74:
  
 Ejemplos con C: Ejemplos con C:
 +<code C>
 +./Tarea3 "(8 10)"
 +>"error: expresión inválida (8 10)"
 +</code>
 +
 <code C> <code C>
 ./Tarea3 "(((fun (x) x) ./Tarea3 "(((fun (x) x)
Line 87: Line 84:
        3)"        3)"
 >"8" >"8"
-</code> 
- 
-<code C> 
-./Tarea3 "(8 10)" 
->"error: expresión inválida (8 10)" 
 </code> </code>
  
Line 100: Line 92:
                          (f 4))))"                          (f 4))))"
 >"7" >"7"
 +</code>
 +
 +Note que los mensajes de error son un String, su tarea debe siempre retornar un String. 
 +
 +====== Secuencias y Set (2pt)======
 +
 +Usted deberá extender su lenguaje con secuencias y la capacidad de cambiar el valor de una variable. (Note que **NO** tiene que implementar cajas.)
 +
 +
 +<code scheme>
 +<s-expr> ::= ...
 +         | (seqn <s-expr> <s-expr>)
 +         | (set <id> <s-expr>)
 +</code>
 +
 +
 +Ejemplo con Java:
 +<code Java>
 +java tarea3 "(with (x 3)
 +                 (+ (seqn (set x 5) x) x))"
 +>"10"
 </code> </code>