发布于 2018-12-25 08:14:42
为了使调车场直接产生AST,应将输出更改为节点堆栈。
当输入中遇到数字、变量或其他终端时,将其转换为叶节点,并推送到输出堆栈。当遇到运算符时,其按常规推送到运算符堆栈。
最大的变化是当操作符从操作符堆栈中弹出时会发生什么。如果它是一个二进制操作符,那么输出堆栈上的最后两个节点被弹出,一个新的二进制节点作为子节点被构造,并被推回输出堆栈上。
在psudo代码中
Stack<Node> output
Stack<Operator> operators
function popOperator
Operator op = operators.pop()
Node right = output.pop()
Node left = output.pop()
Node n = makeNode( op, left, right )
output.push(n)https://stackoverflow.com/questions/53839427
复制相似问题