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 22:24] – etanter | 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 ==== | ||
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 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 | + | 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), |
- | * 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 2: Parser del Lenguaje Extendido | + | ===== 2) Parser del Lenguaje Extendido [1.2 pts] ===== |
Line 88: | Line 88: | ||
< | < | ||
- | |||
- | < | ||
</ | </ | ||
Line 96: | Line 94: | ||
<code scheme> | <code scheme> | ||
{ | { | ||
- | | + | |
- | | + | |
{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, | * Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, | ||
+ | * 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 '' | + | - **[0.1 pts]** Defina el tipo '' |
- **[0.2 pts]** Extienda el tipo de datos '' | - **[0.2 pts]** Extienda el tipo de datos '' | ||
=== Extender el Parser === | === Extender el Parser === | ||
- **[0.1 pts]** Implemente la función '' | - **[0.1 pts]** Implemente la función '' | ||
- | - **[0.4 pts]** | + | - **[0.4 pts]** |
<note important> | <note important> |