# Lunes 2023/03/06
# Summary
Compiler runtime support, The art of language design, Scope Analysis, Transforming the AST
# Announcements
DANGER
No es necesario hacer el desarrollo en la máquina del iaas. Se recomienda usar su propio portátil o Codespaces.
# Extendiendo la calculadora
Queremos extender nuestra calculadora para que soporte operaciones de coma, identificadores, asignación y print
de manera que podamos hacer algo como esto:
➜ calc2js-solution git:(develop) ✗ cat test/data/input/test-id.calc
a = 4+i,
b = 2-2i,
print(a*b)
➜ calc2js-solution git:(develop) ✗ bin/calc2js.mjs test/data/input/test-id.calc
#!/usr/bin/env node
const Complex = require("/Users/casianorodriguezleon/campus-virtual/2223/pl2223/practicas/drafts/calc2js-solution/src/complex.js");
const print = x => { console.log(x); return x; };
let $a, $b;
($a = Complex("4").add(Complex("i")), $b = Complex("2").sub(Complex("2i"))), print($a.mul($b));
➜ calc2js-solution git:(develop) ✗ bin/calc2js.mjs test/data/input/test-id.calc | node -
{ re: 10, im: -6 }
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# ast-types
En esta clase hablamos de:
- Runtime support and Dependency Analysis
- ast-types
- AST builders
- AST path objects
- parentpath vs parent
- replace, prune, shift, insertBefore, insertAfter, insertAt
- Scope Analysis
See the themes:
# Related labs
Prácticas en curso: