Este es el PEG de partida::
start
= comma
comma
= assign COMMA comma
/ assign
assign
= ID ASSIGN assign
/ additive
additive
= multiplicative (ADDOP multiplicative)*
multiplicative
= primary (MULOP primary)*
primary
= integer
/ ID
/ LEFTPAR comma RIGHTPAR
args = !COMMA assign? (COMMA assign)*
params = (ID COMMA)* ID? RIGHTPAR
integer "integer"
= NUMBER
_ = [ \t\n\r]* ("#" [^\n\r\u2028\u2029]*)*
ADDOP = PLUS / MINUS
MULOP = MULT / DIV
COMMA = _","_
PLUS = _"+"_
MINUS = _"-"_
MULT = _"*"_
DIV = _"/"_
LEFTPAR = _"("_
RIGHTPAR = _")"_
NUMBER = _ $[0-9]+ _
ID = _ $([a-z_]i$([a-z0-9_]i*)) _
ASSIGN = _ '=' _
- Construya el árbol de análisis sintáctico abstracto
- Escriba una función
genCode
que recorra el árbol de análisis sintáctico abstracto retornado produciendo como salida una función javascript que computa las expresiones especificadas: - Ejemplo de entrada:
a = 4,
b = 5+a,
c = 2*a
- Ejemplo de salida para la entrada anterior:
module.exports = () => {
var sym = {};
sym['a'] = 4,
sym['b'] = 5+sym['a'],
sym['c'] = 2*sym['a']
return sym;
}
- Añada funciones y llamadas a función
- Modifique las pruebas para que comprueben el buen funcionamiento de su código
- Su fichero
README.md
debe contener su gramática final.
- PEGs
- Repo del que parte esta asignación
- Mocha
- Chai
- Rakefile:
[~/srcPLgrado/pegjs-calc-translate(master)]$ rake -T
rake clean # rm grammar.js
rake compile # Compile grammar.pegjs
rake exe # Run main.js
rake run # Run mainfromfile.js input1