首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PEGjs /多输出问题

PEGjs /多输出问题
EN

Stack Overflow用户
提问于 2021-10-21 15:09:56
回答 1查看 35关注 0票数 0

为什么我们可以在PEG.js中输出一次?,有人知道实现许多输出的其他方法吗?,我正在使用堆栈和一个函数,下面的代码如下:

代码语言:javascript
复制
function evalStack() {
        for (var i = stack.length - 1; 0 <= i; i--) {
            stack[i]();
        }
        return result;
    }

我的自定义输入:

代码语言:javascript
复制
start
A=4;
A
B=8;
B

我预期的结果:

代码语言:javascript
复制
4
8

结果我得到:

代码语言:javascript
复制
4

请帮帮我

EN

回答 1

Stack Overflow用户

发布于 2021-10-27 15:11:07

试试这个肮脏的解决方案:

代码语言:javascript
复制
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代码,您可以先进行完全扫描,然后打印所有变量,如果这是您想要的,那么您将在赋值之前打印出值。正如我提到的,这只是一个肮脏的解决方案,需要优化和清理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69664470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档