/// <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; } }