Чтобы шунтирующий завод напрямую генерировал AST, вывод должен быть изменен на стек узлов.
Когда на входе встречается число, переменная или другой терминал, он преобразуется в конечный узел и помещается в стек вывода.Когда оператор встречается, его помещают в стек оператора как обычно.
Самое большое изменение - это то, что происходит, когда оператор выталкивается из стека операторов.Если это двоичный оператор, то последние два узла в выходном стеке выталкиваются, новый двоичный узел создается с этими узлами в качестве дочерних и перемещается обратно в выходной стек.
В псевдокоде
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)