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/07 19:00] – [Lenguaje con tipos estáticos] 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 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> < |
| - | < | + | < |
| </ | </ | ||
| Line 66: | Line 66: | ||
| (numV n) | (numV n) | ||
| (boolV b) | (boolV b) | ||
| - | (pairV | + | (pairV |
| ) | ) | ||
| </ | </ | ||
| Line 188: | 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 285: | 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 312: | 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? | ||
| - | |||
| - | < | ||
| ---- | ---- | ||

