De Infijo a Egg usando PEG.js
Descripción
Re-escriba la fase de análisis sintáctico del lenguaje de infijo que diseñó en la práctica
usando PEG.js para re-escribir el analizador sintáctico.
En su parser irá:
- El análisis léxico y sintáctico del lenguaje.
- Conviene dividir el analizador en dos secciones bien diferenciadas con la parte de tokens en un lado y la gramática en el otro
- Este es un buen momento para meditar su diseño del lenguaje de infijo e introducir modificaciones y extensiones
- Las acciones semánticas a ejecutar dentro del analizador son las de construcción del AST
Opciones del Compilador
Haga que el ejecutable admita opciones en línea de comandos. Algo parecido a esto:
[.../p9-t4-peg-infix2egg-04-16-2020-03-18-25/davafons(master)]$ bin/infix2egg.js --help
Usage: infix2egg [options]
Options:
-V, --version output the version number
-r --run <fileName> compiles the input infix program and runs it using the egg interpreter
-c --compile <fileName> compile the infix program to produce a JSON containing the input egg AST
-i --interpret <fileName> interprets the egg AST
-h, --help output usage information
Buenos módulos para parsear la línea de comandos son commander y yargs
Ejemplo de posible sintáxis
[.../p9-t4-peg-infix2egg-04-16-2020-03-18-25/davafons(master)]$ cat examples/array.pl
begin
let emptyArray = [];
call print(emptyArray);
let x = [2, 3, [1, 2, 3]];
call print(x[2][1]);
x[2][1] = 100;
call print(x[2]);
end
Ejecución:
[.../p9-t4-peg-infix2egg-04-16-2020-03-18-25/davafons(master)]$ bin/infix2egg.js -r examples/array.pl
[]
2
[ 1, 100, 3 ]
Return value: 1,100,3
Recursos
- Un ejemplo breve de como hacer esta práctica: pegjs-infix-2-egg
- PEGs Viejos apuntes del profesor
- PEG.js PEG.js Documentation
- El lenguaje egg: repo en GitHub
- Eloquent JS: Chapter 11. Project: A Programming Language
- Repo interpreter-egg
- NodeJS Readline gist
- Apuntes de PL: Análisis Sintáctico Predictivo Recursivo
- Mocha
- Chai
- Covering
- Blanket