The shunting yard algorithm produces the output in Reverse Polish Notation form. This form does not require the use of parenthesis and can be parsed very easily using a single stack. Just read the RPN form left to read. When a number is found, push it on the stack. When an operator is found, pop the two last numbers from the stack (or however many operands the operator requires), apply the operator to them, and push the result back on the stack. That's it really. However, I'm not really sure how to apply that to functions such as sin, cos, etc. I'm sure it's possible though.

I only got the very basics: being able to convert a simple expression (using only binary operators such as +, *, -, ^, etc) to an RPN expression and finally calculating the value from that. It did not support anything like functions like sin, or functions with multiple values, etc, basically because it reads the expression left to read, one character at a time. For sin(x) it would suddenly read an 's' and that is neither an operator nor a value, so it would have to do something special there, but I never finished that.