¿Por qué podemos generar una vez en PEG.js? ¿Alguien sabe alguna otra forma de implementar muchos resultados? Estoy usando Stack 🙂 y una función, código a continuación:
function evalStack() { for (var i = stack.length - 1; 0 <= i; i--) { stack[i](); } return result; }Mi entrada personalizada:
start A=4; A B=8; BResultado que esperaba:
4 8Resultado que obtuve:
4por favor, ayúdame
prueba esta sucia solución:
all = _ ptp:putThenPrint+ _ { var all = []; ptp.forEach(it => { all.push(it); }); var r = [] all.forEach(tp => { tp.toPrint.forEach(p => { r.push(tp.values[p]) }); }); return "\n" + r.join("\n") + "\n"; } putThenPrint = _ mn:multiPutN _ pn:multiPrintN _ { return {values:mn,toPrint:pn}; } multiPrintN = _ mp:printN+ _ { var r = []; mp.forEach(it => { r.push(it); }); return r; } multiPutN = _ mp:putN+ _ { var r = {}; mp.forEach(it => { r[it[0]]=it[1]; }); return r; } putN = _ vn:varName _ "=" _ nn:n _ ";" _ nl+ { return [vn, nn]} printN = _ n:varName _ nl+ {return n;} varName = [a-zA-Z]+ {return text();} n "integer number" = _ [0-9]+ { return parseInt(text(), 10); } nl "new line" = [\n] _ "whitespace or new line" = [ \t]*en lo anterior, solo le da el valor de la variable en la misma sección, por lo que una vez que imprime las variables, no puede volver a imprimirlas; sin embargo, si cambia el código js dentro de la gramática del bloque "todos", puede hacer un escaneo completo primero y luego imprime todas las variables si esto es lo que quieres, pero luego imprimirás los valores antes de asignarlos. como mencioné, esta es solo una solución sucia que necesita optimizarse y limpiarse