/// <summary>
 /// Process operators
 /// </summary>
 /// <param name="st">Expressions</param>
 /// <param name="element">Operator element</param>
 /// <param name="top">Top operator</param>
 public void ProcessOperators(Stack<IExpression> st, OperatorExpression element, OperatorExpression top)
 {
     while (st.Count > 0 && Precedence(element) >= Precedence(top))
     {
         IExpression p = st.Pop();
         if ((p as OperatorExpression).OperatorType == TokenType.OPENPAREN)
             break;
         converted.Add(p);
         if (st.Count > 0)
             top = st.First() as OperatorExpression;
     }
 }
 /// <summary>
 /// Get the operator precedence
 /// </summary>
 /// <param name="operatorExp">Operator token</param>
 /// <returns>Precedence</returns>
 int Precedence(OperatorExpression operatorExp)
 {
     switch (operatorExp.OperatorType)
     {
         case TokenType.PLUS:
         case TokenType.MINUS:
             return 4;
         case TokenType.MULTIPLY:
         case TokenType.DIVIDE:
             return 2;
         default:
             return int.MaxValue;
     }
 }