public void compute_expression(string expr) { System.Collections.Generic.Stack<char> myStack = new System.Collections.Generic.Stack<char>(); string output = ""; // Rewriting the string into Reverse Polish Notation(RPN) format foreach(char token in expr) { //Read a token. //If the token is a number, then add it to the output queue. if (Char.IsNumber(token) == true) { output = output + ' ' +token; } if(token == '+' || token == '-') { if (myStack.Count() != 0) { while(myStack.Peek() == '*' || myStack.Peek() == '/' || myStack.Peek() == '-') { if (myStack.Count() != 0) { output = output + ' ' + myStack.Peek(); myStack.Pop(); } if (myStack.Count() == 0) { break; } } } myStack.Push(token); } if(token == '(') { myStack.Push(token); } if (token == ')') { if (myStack.Count() != 0) { while (myStack.Peek() != '(') { if (myStack.Count() != 0) { output = output + ' ' + myStack.Peek(); myStack.Pop(); } } myStack.Pop(); } } } while(myStack.Count() != 0) { output = output + " " + myStack.Peek(); myStack.Pop(); } //Done RPN //Now we need to Evaluate the RPN evalu(output); }