Práctica 1 (23/8)
Orden del día#
- Orden del día
- Presentaciones
- Introducción a la practica
- Tour por la página
- Labs y TP
- Notas y plazos
- Herramientas
- deno
- particularidades de typescript
Presentaciones#
- Materias que están haciendo?
- Laburo?
- Expectativas?
Introducción a la practica#
Tour: compiladores.github.io
Labs y TP (1/3)#
- Lab 1: Diseñar autómatas (1 sem)
- Lab 2: Diseñar lexers (2 sem)
- Lab 3: parser descendiente recursivo de LUA y breve análisis del parser (real) de LUA (2 sem)
- Lab 4: Ejercicios de parsers LL1 (1 sem)
- Lab 5: Intérprete de jsonlang (1 sem)
- Lab 6: Parser de minilua que emite jsonlang (2 sem)
- Lab 7: Compilador jsonlang a compiVM (1 sem)
- TP final: adaptar el lab 7 a otro target. Hacer una investigación del target para subirla a la página de la materia. (4 sem)
Labs y TP (2/3)#
Labs y TP (3/3)#
Objetivo de los labs:
- Incorporar conceptos teóricos
- Armar el compilador juntos
Objetivo del TP final:
- Sumar al corpus de conocimiento de la materia
Notas y plazos (A CONFIRMAR)#
- Labs
- Evaluación objetiva/automática
- Chequeo manual
- Componentes de la nota ( > 10 ):
- Hacerlo y que pasen los test: 4
- Entregarlo en el plazo recomendado (excluye 10)
- Hacer ejercicios extra
- Desafíos durante la práctica (recomendable venir!)
- El TP se evalúa de forma manual (subjetiva y objetiva), definiremos pautas
- Plazos:
- Labs 1-7: deben entregarse antes de la última clase
- TP: Como un final (es chico!)
Herramientas#
Deno#
- Instalación:
- Seguir instrucciones oficiales
- ó bajar el binario de github releases
fmttest- extensión de vscode
Herramientas: typescript (1/2)#
Sistema de tipos estructural vs nominal. Tipo = conjunto. (referencia)
interface Persona { nombre:string, apellido:string}const juan = { nombre:"Juan", apellido:"Perez", edad:28}const p:Persona=juanHerramientas: typescript (2/2)#
Narrowing con Control flow analysis. (referencia)
type Cuenta = number | { tipo:"suma", op1:Cuenta, op2:Cuenta}|{ tipo: "resta", izq:Cuenta, der:Cuenta}function operar(op:Cuenta):number{ if(typeof op ==="number"){ return op }else{ // acá, op tiene tipo y ts lo sabe! if(op.tipo==="resta"){ // acá adentro ts sabe que op tiene izq y der return operar(op.izq)-operar(op.der) } if(op.tipo==="suma"){ // acá adentro ts sabe que op tiene izq y der return operar(op.op1)+operar(op.op2) } }}