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