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 practicaTour: 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
fmt
test
- 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=juan
#
Herramientas: 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) } }}