为什么我们可以在PEG.js中输出一次?,有人知道实现许多输出的其他方法吗?,我正在使用堆栈和一个函数,下面的代码如下:
function evalStack() {
for (var i = stack.length - 1; 0 <= i; i--) {
stack[i]();
}
return result;
}我的自定义输入:
start
A=4;
A
B=8;
B我预期的结果:
4
8结果我得到:
4请帮帮我
发布于 2021-10-27 15:11:07
试试这个肮脏的解决方案:
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]*在上面的内容中,它只给出同一节中变量的值,因此一旦打印变量,就不能再次打印它们。但是,如果您更改了" all“块语法中的js代码,您可以先进行完全扫描,然后打印所有变量,如果这是您想要的,那么您将在赋值之前打印出值。正如我提到的,这只是一个肮脏的解决方案,需要优化和清理。
https://stackoverflow.com/questions/69664470
复制相似问题