Skip to main content
Version: 2022_2

Práctica 1 (23/8)


Orden del día#

  1. Orden del día
  2. Presentaciones
  3. Introducción a la practica
    • Tour por la página
    • Labs y TP
    • Notas y plazos
  4. 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)#

  1. 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!)
  2. El TP se evalúa de forma manual (subjetiva y objetiva), definiremos pautas
  3. NF=(i=17Li/7)×0.5+TP×0.5NF=(\sum_{i=1}^{7} L_i / 7)\times0.5+TP\times0.5
  4. Plazos:
    • Labs 1-7: deben entregarse antes de la última clase
    • TP: Como un final (es chico!)

Herramientas#

Deno#

  • Instalación:
    1. Seguir instrucciones oficiales
    2. ó 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)        }    }}