internal bool RpnConvert() { if (convertedToken != null) { return(true); } if (tokens.Count == 0) { return(false); } tryConvert = true; if (tokens.Count == 1) { convertedToken = tokens[0]; return(true); } List <ExpressionTermToken> stack = new List <ExpressionTermToken>(); List <ExpressionTermToken> source = new List <ExpressionTermToken>(); try { source.AddRange(tokens); while (source.Count != 0) { ExpressionTermToken token = source[0]; source.RemoveAt(0); if (token.IsOperator) { OperandToken right = (OperandToken)stack[stack.Count - 1]; stack.RemoveAt(stack.Count - 1); OperandToken left = (OperandToken)stack[stack.Count - 1]; stack.RemoveAt(stack.Count - 1); stack.Add((ExpressionTermToken)(new SubExpressionToken(left, right, (OperatorToken)token))); } else { stack.Add(token); } } } catch (Exception) { return(false); } if (stack.Count != 1) { return(false); } convertedToken = stack[0]; return(true); }
internal SubExpressionToken(OperandToken leftToken, OperandToken rightToken, OperatorToken opToken) { p1 = leftToken; p2 = rightToken; op = opToken; }