Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| teaching:cc4101:tareas:xyz:tarea1a [2024/03/20 21:46] – [Parte 2: Parser del Lenguaje Extendido con booleanos, if y with [1.2 pts]] fdiaz | teaching: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: | + | ====== Tarea 1a (Entrega: |
| ==== Parsing de Lenguaje con Funciones top-level ==== | ==== Parsing de Lenguaje con Funciones top-level ==== | ||
| - | En esta primera parte de la tarea 1, implementaremos el parser para un lenguaje funcional con funciones top-level, tipos de datos básicos e identificadores locales (with). | + | 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 12: | Line 12: | ||
| Deben desarrollar su tarea en base a los siguientes archivos: | Deben desarrollar su tarea en base a los siguientes archivos: | ||
| * '' | * '' | ||
| - | * '' | + | * '' |
| Deben entregar vía U-Cursos **un único archivo .zip** que contenga los archivos **t1a.rkt** y **t1a-test.rkt**. | Deben entregar vía U-Cursos **un único archivo .zip** que contenga los archivos **t1a.rkt** y **t1a-test.rkt**. | ||
| Line 19: | Line 19: | ||
| - | ===== Parte 1: Parser del Lenguaje Core [0.8 pts] ===== | + | ===== 1) Parser 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 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: | ||
| </ | </ | ||
| - | 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 | + | Para desarrollar el parser, dividiremos su implementación en las siguientes funciones: |
| - **[0.4 pts]** '' | - **[0.4 pts]** '' | ||
| - **[0.2 pts]** '' | - **[0.2 pts]** '' | ||
| Line 65: | Line 65: | ||
| **Observaciones importantes**: | **Observaciones importantes**: | ||
| - | * Cuando el BNF incluye un nodo con * (cero o más ocurrencias), | + | * 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 '' |
| + | * Fíjese en los tests provistos para ver ejemplos de nodos construidos por las distintas funciones de parsing. | ||
| - | ===== Parte 2: Parser del Lenguaje Extendido | + | ===== 2) Parser del Lenguaje Extendido [1.2 pts] ===== |
| En esta parte, vamos a extender el lenguaje core con algunas primitivas extra (booleanos, y operadores booleanos simples), la expresión condicional '' | En esta parte, vamos a extender el lenguaje core con algunas primitivas extra (booleanos, y operadores booleanos simples), la expresión condicional '' | ||
| Line 86: | Line 88: | ||
| < | < | ||
| - | |||
| - | < | ||
| </ | </ | ||
| Line 94: | Line 94: | ||
| <code scheme> | <code scheme> | ||
| { | { | ||
| - | | + | |
| - | | + | |
| {relu 42} | {relu 42} | ||
| } | } | ||
| Line 106: | Line 106: | ||
| {with {{x 5} | {with {{x 5} | ||
| {y 42} | {y 42} | ||
| - | {z true}} | + | {z #t}} |
| - | z} | + | {if z |
| + | {add1 x} | ||
| + | {- y 2}}} | ||
| } | } | ||
| { | { | ||
| Line 119: | Line 121: | ||
| **Observaciones importantes**: | **Observaciones importantes**: | ||
| * Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, | * Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, | ||
| - | * Al definir | + | |
| - | | + | |
| + | | ||
| + | === Nuevos nodos para el AST === | ||
| + | - **[0.1 pts]** Defina el tipo '' | ||
| + | - **[0.2 pts]** Extienda el tipo de datos '' | ||
| - | ===== Parte 1: Definición del AST [0.5 pts] ===== | + | === Extender el Parser |
| - | En esta parte, definiremos los tipos de datos que representarán a los diversos nodos del AST de nuestro lenguaje. | + | - **[0.1 pts]** Implemente la función '' |
| - | Siguiendo | + | - **[0.4 pts]** Extienda |
| - | - **[0.1 pts]** El tipo '' | + | <note important> |
| - | | + | * Recuerde incluir tests para las funciones |
| - | - **[0.2 pts]** El tipo '' | + | </ |
| - | | + | |
| - | + | ||
| - | | + | |
| - | - **[0.1 pts]** El tipo '' | + | |
| - | - **[0.2 pts]** | + | |
| | | ||

