|:eval: * $x $y| :@math: multiply $x $y |:eval: / $x $y| :@math: divide $x $y |:eval: + $x $y| :@math: add $x $y |:eval: - $x $y| :@math: subtract $x $y |:precedence: *| :precedence: * 2 |:precedence: /| :precedence: / 2 |:precedence: +| :precedence: + 1 |:precedence: -| :precedence: - 1 |:precedence: $x| :not an operator: |:: ) :ops: (| |:: $token| :: classify token :token: $token :: push to its stack |:: classify token :token: +?| :operator: |:: classify token :token: -?| :operator: |:: classify token :token: /?| :operator: |:: classify token :token: *?| :operator: |:: classify token :token: [?| :operator: |:: classify token :token: ]?| :operator: |:: classify token :token: $x?| :value: |:: push to its stack :token: $token? :operator:| :: evaluate token |:: push to its stack :token: $token :value:| :values: $token |:: evaluate token :token: [| :operators: [ |:: evaluate token :token: ] :operators: [| |:: evaluate token :token: $token :operators: [| :operators: $token :operators: [ |:: evaluate token :token: ]? :operators: $op :values: ($a $b)| :eval: $op $b $a :: push result :: evaluate token |:: evaluate token :token: $incoming :operators: $top?| :: get precedence for $top :: get precedence for $incoming :: compare precedence |:: push result :@math: $result| :values: $result |:: evaluate token :token: $token| :operators: $token |:: get precedence for $token| :precedence: $token |:: compare precedence :precedence: $incoming $x :precedence: $top $y| :@math: compare $x $y :: push $incoming operator |:: push $incoming operator :@math: greater| :operators: $incoming |:: push $incoming operator :@math: $not-greater :operators: ($eval $next) :values: ($a $b)| :: push result :eval: $eval $b $a :: get precedence for $next :: get precedence for $incoming :: compare precedence :operators: $next |:: push $incoming operator :@math: $not-greater :operators: $eval :values: ($a $b)| :: push result :eval: $eval $b $a :operators: $incoming |:operators: $eval :values: ($a $b)| :: push result :eval: $eval $b $a || :: (142 + 20 * [ 40 + 5 * 3 ] + 4 * 79 / 4 - 2)