Javascript LL(1)解析时如何构建AST

Javascript LL(1)解析时如何构建AST,javascript,parsing,compiler-construction,stack,abstract-syntax-tree,Javascript,Parsing,Compiler Construction,Stack,Abstract Syntax Tree,我正在编写一个LL(1)解析器,该解析器工作得非常好。 但是解析器的所有目标都是处理令牌并生成AST。 我想知道在进行解析时如何管理对象以构建AST 我的代码: while (tokens.length) { let currentRule = rulesStack.pop(); let currentToken = tokens[0]; if (isTerminal(currentRule)) { // `S`->nonTerminal, `2`->T

我正在编写一个LL(1)解析器,该解析器工作得非常好。
但是解析器的所有目标都是处理令牌并生成AST。 我想知道在进行解析时如何管理对象以构建AST

我的代码:

  while (tokens.length) {
    let currentRule = rulesStack.pop();
    let currentToken = tokens[0];

    if (isTerminal(currentRule)) { // `S`->nonTerminal, `2`->Terminal
      if (currentRule === currentToken) tokens.shift();//[`3`,`+`,`2`] => [`+`,`2`]
      else {
        // throw error
        return;
      }
    } else { // currentRule is not Terminal
      let nextRule = parseTable[currentRule][currentToken];
      if (nextRule) { // if exists
        if (nextRule[0] === 'epsilon') {
          // do nothing
        } else rulesStack.push(...nextRule);
      } else {
        
        // throw error
        return;
      }
    }
  }

在这个解析器中构建AST的正确方法是什么?

答案中有一个可能的算法:“从值堆栈中弹出适当数量的值”是什么意思?每个被创建节点的子节点一个。或者,iow,生产rhs上的每个符号一个。一个可能的算法是在这个答案中:你所说的“从值堆栈中弹出适当数量的值”是什么意思?一个用于正在创建的节点的每个子节点。或者,照此,生产rhs上的每个符号对应一个。