Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
teaching:cc4101:tareas:2025-1:tarea1b [2025/04/05 19:28] – [Parte 1. Lenguaje con funciones de primer orden (1.5 ptos.)] msegur | teaching:cc4101:tareas:2025-1:tarea1b [2025/04/09 13:48] (current) – [Tarea 1b (Entrega: 20 de Abril de 2025)] dibanez | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tarea 1b (Entrega: | + | ====== Tarea 1b (Entrega: |
==== Lenguaje con tipos estáticos ==== | ==== Lenguaje con tipos estáticos ==== | ||
Line 5: | Line 5: | ||
Ya se habrán dado cuenta que ciertos lenguajes tienen tipos estáticos (C/C++, Java, C#, Scala, etc.) y otros tienen tipos dinámicos (Python, Racket, JavaScript, etc.). | Ya se habrán dado cuenta que ciertos lenguajes tienen tipos estáticos (C/C++, Java, C#, Scala, etc.) y otros tienen tipos dinámicos (Python, Racket, JavaScript, etc.). | ||
- | En esta tarea van a implementar un lenguaje simple con funciones de primer orden, tipos de datos básicos y pares. Para implementar este lenguaje necesitaremos un parser (lo implementamos en la tarea 1a), y un intérprete, dividiremos | + | En esta tarea van a implementar un lenguaje simple con funciones de primer orden (es decir, funciones cuya definición es separada de las expresiones normales del lenguaje), tipos de datos básicos y pares. Para implementar este lenguaje necesitaremos un parser (lo implementamos en la tarea 1a), y un intérprete |
---- | ---- | ||
Line 14: | Line 14: | ||
</ | </ | ||
- | Deben entregar via U-cursos **un archivo .zip** que contenga los siguientes archivos: | + | Deben entregar via U-cursos **un archivo .zip** que contenga los siguientes archivos:{{ : |
- | Si lo desea, puede obtener un bonus resolviendo la tercera parte, que es opcional: | + | Si lo desea, puede obtener un bonus resolviendo la tercera parte, que es opcional: |
- | **Nota: | + | **Nota: |
Deben entregar vía U-Cursos **un único archivo .zip** que contenga todos los archivos de su entrega. | Deben entregar vía U-Cursos **un único archivo .zip** que contenga todos los archivos de su entrega. | ||
Line 26: | Line 26: | ||
</ | </ | ||
- | ===== Parte 1. Lenguaje con funciones de primer orden (1.5 ptos.) ===== | + | ===== Parte 1. Lenguaje con funciones de primer orden [1.5 pts.] ===== |
- | En esta parte, vamos a implementar un lenguaje que incluye primitivas útiles (números, booleanos, pares, y operadores simples), identificadores locales ('' | + | En esta parte, vamos a implementar un lenguaje que incluye primitivas útiles (números, booleanos, pares, y operadores simples), identificadores locales ('' |
La gramática BNF del lenguaje se define a continuación: | La gramática BNF del lenguaje se define a continuación: | ||
Line 37: | Line 37: | ||
< | < | ||
- | | <sym> | + | | <id> |
| < | | < | ||
| {cons < | | {cons < | ||
Line 52: | Line 52: | ||
| {if < | | {if < | ||
| {with {< | | {with {< | ||
- | | {<sym> < | + | | {<id> < |
- | < | + | < |
</ | </ | ||
- | Esta gramática es similar a la presentada en la tarea 1a, con las siguientes diferencias. | + | Esta gramática es similar a la presentada en la tarea 1a, pero se agregan |
- | * < | + | |
- | * Se agregan pares, los cuales | + | |
Los programas que terminan reducen a valores. Estos pueden ser números, booleanos o pares de valores. Siguiendo las buenas prácticas de desarrollo del curso, se define un tipo de datos inductivo '' | Los programas que terminan reducen a valores. Estos pueden ser números, booleanos o pares de valores. Siguiendo las buenas prácticas de desarrollo del curso, se define un tipo de datos inductivo '' | ||
Line 68: | Line 66: | ||
(numV n) | (numV n) | ||
(boolV b) | (boolV b) | ||
- | (pairV | + | (pairV |
) | ) | ||
- | </ | + | </ |
- | + | ||
- | El objetivo de este tipo de datos es facilitar la distinción entre valores que pueden ser retornados por el intérprete, | + | |
Algunos ejemplos de programas válidos para el lenguaje descrito pueden ser: | Algunos ejemplos de programas válidos para el lenguaje descrito pueden ser: | ||
Line 192: | Line 188: | ||
Teniendo en cuenta todo lo descrito anteriormente, | Teniendo en cuenta todo lo descrito anteriormente, | ||
- | - **[1.2 pts]** '' | + | - **[1.2 pts]** '' |
- **[0.3 pts]** '' | - **[0.3 pts]** '' | ||
- | < | + | ---- |
- | ----- | + | |
===== Parte 2. Verificación estática de tipos (2.5 ptos.) ===== | ===== Parte 2. Verificación estática de tipos (2.5 ptos.) ===== | ||
Line 276: | Line 271: | ||
Para poder realizar un checkeo de tipos estático, necesitaremos: | Para poder realizar un checkeo de tipos estático, necesitaremos: | ||
- | - **[0.7 pts]** Implementar la función '' | + | - **[1.0 pts]** Implementar la función '' |
- | - **[0.4 pts]** Implementar '' | + | - **[0.6 pts]** Implementar '' |
- **[0.2 pts]** Implementar '' | - **[0.2 pts]** Implementar '' | ||
- **[0.1 pts]** Extender la función '' | - **[0.1 pts]** Extender la función '' | ||
Line 291: | Line 286: | ||
* Para '' | * Para '' | ||
* En la aplicación de función se valida que el número de argumentos coincide, y que el tipo de los argumentos coincide con los tipos esperados de la función aplicada. El tipo resultante de una aplicación es el tipo de retorno de la función aplicada. | * En la aplicación de función se valida que el número de argumentos coincide, y que el tipo de los argumentos coincide con los tipos esperados de la función aplicada. El tipo resultante de una aplicación es el tipo de retorno de la función aplicada. | ||
+ | * Note que, cada expresión solo necesita ser checkeada una sola vez, incluso los cuerpos de las funciones. | ||
**Para los errores**: | **Para los errores**: | ||
Line 318: | Line 314: | ||
¿Puede efectivamente convencerse de que todo programa que pasa la verificación de tipo no se cae con un error de tipo durante la ejecución? | ¿Puede efectivamente convencerse de que todo programa que pasa la verificación de tipo no se cae con un error de tipo durante la ejecución? | ||
- | |||
- | El testing de esta parte recibe **0.5 pts** | ||
---- | ---- | ||