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:06] – [Parsing de Lenguaje con Funciones top-level] 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 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 | + | 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 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] ===== |
Line 87: | Line 88: | ||
< | < | ||
- | |||
- | < | ||
</ | </ | ||
Line 95: | Line 94: | ||
<code scheme> | <code scheme> | ||
{ | { | ||
- | | + | |
- | | + | |
{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, | * Recuerde que la estructura del BNF dicta la estructura de las funciones que procesan los programas, definiciones, | ||
- | * Al definir | + | |
+ | | ||
| | ||
=== 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> |