private IExpression GetExpressionFromSymbol(string p) { IExpression e; if (_expressionCache.ContainsKey(p)) { e = _expressionCache[p]; } else if (OperatorExpression.IsSymbol(p)) { e = new OperatorExpression(p); _expressionCache.Add(p, e); } else if (FunctionExpression.IsFunction(p)) { e = new FunctionExpression(p, false); _expressionCache.Add(p, e); } else if (ConvertExpression.IsConvertExpression(p)) { e = new ConvertExpression(p); _expressionCache.Add(p, e); } else { throw new ParseException(Resources.InvalidSymbolOnStack + p); } return(e); }
private bool TryEndGroup(char c) { if (c != ')') { return(false); } bool hasStart = false; while (_symbolStack.Count > 0) { string p = _symbolStack.Pop(); if (p == "(") { hasStart = true; if (_symbolStack.Count == 0) { break; } string n = _symbolStack.Peek(); if (FunctionExpression.IsFunction(n)) { p = _symbolStack.Pop(); IExpression f = GetExpressionFromSymbol(p); _expressionQueue.Enqueue(f); } break; } IExpression e = GetExpressionFromSymbol(p); _expressionQueue.Enqueue(e); } if (!hasStart) { throw new ParseException(Resources.UnbalancedParentheses); } return(true); }