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:xyz:tarea1a [2024/03/20 22:24] etanterteaching:cc4101:tareas:xyz:tarea1a [2024/03/26 16:09] (current) – [Tarea 1a (Entrega: 28 de marzo del 2024)] fdiaz
Line 1: Line 1:
-====== Tarea 1a (Entrega: 28 de marzo del 2024) ======+====== Tarea 1a (Entrega: Miércoles 3 de abril del 2024) ======
  
 ==== Parsing de Lenguaje con Funciones top-level ==== ==== Parsing de Lenguaje con Funciones top-level ====
Line 19: Line 19:
  
  
-===== Parte 1Parser del Lenguaje Core [0.8 pts] =====+===== 1Parser del Lenguaje Core [0.8 pts] =====
  
-En esta parte, vamos a implementar un lenguaje que incluye primitivas útiles (números, y operadores simples), y definiciones de funciones top-level de múltiples argumentos. +En esta parte, vamos a implementar el parser para un lenguaje que incluye primitivas útiles (números, y operadores simples), y definiciones de funciones top-level de múltiples argumentos. 
  
 El lenguaje con el que trabajaremos está definido por la siguiente gramática en BNF. El lenguaje con el que trabajaremos está definido por la siguiente gramática en BNF.
Line 59: Line 59:
 Para esta parte, se proveen las definiciones de los tipos de datos que representan los nodos del AST y los tests necesarios para el lenguaje core. Para esta parte, se proveen las definiciones de los tipos de datos que representan los nodos del AST y los tests necesarios para el lenguaje core.
  
-Para desarrollar el parser de nuestro lenguaje core, dividiremos su implementación en las siguientes funciones:+Para desarrollar el parser, dividiremos su implementación en las siguientes funciones:
   - **[0.4 pts]** ''parse-expr'' que recibe una s-expression y retorna un nodo ''Expr''.   - **[0.4 pts]** ''parse-expr'' que recibe una s-expression y retorna un nodo ''Expr''.
   - **[0.2 pts]** ''parse-fundef'' que recibe una s-expression y retorna un nodo ''Fundef''.   - **[0.2 pts]** ''parse-fundef'' que recibe una s-expression y retorna un nodo ''Fundef''.
Line 65: Line 65:
  
 **Observaciones importantes**: **Observaciones importantes**:
-  * Cuando el BNF incluye un nodo con * (cero o más ocurrencias), el nodo del AST correspondiente lleva una lista de los elements. Luego, pueden usar ''map'' para procesar esos elementos. +  * Cuando el BNF incluye un nodo con * (cero o más ocurrencias), el nodo del AST correspondiente lleva una lista de los elementos. Luego, pueden usar ''map'' para procesar esos elementos. 
-  * Fíjese en los tests provistos para ver ejemplos de nodos construidos por las distintas funciones de parsing+  * Fíjese en los tests provistos para ver ejemplos de nodos construidos por las distintas funciones de parsing.
  
  
-===== Parte 2Parser del Lenguaje Extendido con booleanos, if y with [1.2 pts] =====+===== 2Parser del Lenguaje Extendido [1.2 pts] =====
  
  
Line 88: Line 88:
  
 <binding> ::= (<id> <expr>) <binding> ::= (<id> <expr>)
- 
-<bool> ::= #t | #f 
 </code> </code>
  
Line 96: Line 94:
 <code scheme> <code scheme>
 { {
-   {define {geq x y} {! {< x y}}} +   {define {>= x y} {! {< x y}}} 
-   {define {relu x} {if {geq x 0} x 0}}+   {define {relu x} {if {>= x 0} x 0}}
    {relu 42}    {relu 42}
 } }
Line 108: Line 106:
    {with {{x 5}    {with {{x 5}
           {y 42}           {y 42}
-          {z true}} +          {z #t}} 
-       z}+       {if z 
 +           {add1 x} 
 +           {- y 2}}}
 } }
 { {
Line 121: Line 121:
 **Observaciones importantes**: **Observaciones importantes**:
   * Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, expresiones, etc.   * Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, expresiones, etc.
 +  * Puede incluir los booleanos de una manera similar a como se introducen los números, reutilizando los booleanos de Racket.
   * Al definir los nombres de los constructores del lenguaje, verifique que no sean ya utilizados por Racket, para evitar confusiones.   * Al definir los nombres de los constructores del lenguaje, verifique que no sean ya utilizados por Racket, para evitar confusiones.
      
  
 === Nuevos nodos para el AST === === Nuevos nodos para el AST ===
-  - **[0.1 pts]** Defina el tipo ''Binding'' que corresponde al nodo ''<binding>'' en el BNF, que resenta la asociación entre un identificador y una expresión.+  - **[0.1 pts]** Defina el tipo ''Binding'' que corresponde al nodo ''<binding>'' en el BNF, que representa la asociación entre un identificador y una expresión.
   - **[0.2 pts]** Extienda el tipo de datos ''Expr'' con nuevos constructores para las expresiones que se añadieron al lenguaje.   - **[0.2 pts]** Extienda el tipo de datos ''Expr'' con nuevos constructores para las expresiones que se añadieron al lenguaje.