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:05] – [Parsing de Lenguaje con Funciones top-level] fdiazteaching: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 ====
  
-En esta tarea, implementaremos el parser para un lenguaje funcional con funciones top-level, tipos de datos básicos e identificadores locales (with). Para hacer una aproximación más gradual al problema, dividiremos el desarrollo en un lenguaje core que luego extenderemos con elementos extra.+En esta tarea, implementaremos el parser para un lenguaje funcional con funciones top-level, tipos de datos básicos e identificadores locales (with). Para hacer una aproximación más gradual al problema, dividiremos el desarrollo en un lenguaje core que luego extenderemos.
  
 <note important> <note important>
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 57: Line 57:
 </code> </code>
  
-Para esta parte, se proveen las definiciones de los tipos de datos que representan los nodos del AST y los test 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), pueden usar ''map'' para procesar los 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.
  
  
-===== Parte 2Parser del Lenguaje Extendido con booleanos, if y with [1.2 pts] =====+===== 2Parser del Lenguaje Extendido [1.2 pts] =====
  
  
Line 87: Line 88:
  
 <binding> ::= (<id> <expr>) <binding> ::= (<id> <expr>)
- 
-<bool> ::= #t | #f 
 </code> </code>
  
Line 95: 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 107: Line 106:
    {with {{x 5}    {with {{x 5}
           {y 42}           {y 42}
-          {z true}} +          {z #t}} 
-       z}+       {if z 
 +           {add1 x} 
 +           {- y 2}}}
 } }
 { {
Line 120: 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.
-  * Al definir el nombre de los constructores del lenguaje, verifique que no corresponda con uno ya utilizado por algún procedimiento de Racket.+  * 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.
      
  
 === 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.
  
 === Extender el Parser === === Extender el Parser ===
   - **[0.1 pts]** Implemente la función ''parse-binding'' que recibe una s-expression y retorna un nodo ''Binding''.   - **[0.1 pts]** Implemente la función ''parse-binding'' que recibe una s-expression y retorna un nodo ''Binding''.
-  - **[0.4 pts]** Extender función ''parse-expr'' con casos para las nuevas expresiones.+  - **[0.4 pts]** Extienda la función ''parse-expr'' con casos para las nuevas expresiones.
  
 <note important> <note important>