public static double EvaluateExpression(string strExp) { Stack <AbstractExpression> stack = new Stack <AbstractExpression>(); string[] tokenList = strExp.Split(' '); foreach (string s in tokenList) { if (IsOperator(s)) { AbstractExpression rightExpression = stack.Pop(); Console.WriteLine("Pop: " + rightExpression.Interpret()); AbstractExpression leftExpression = stack.Pop(); Console.WriteLine("Pop: " + leftExpression.Interpret()); AbstractExpression op = GetOperatorExpression(s, leftExpression, rightExpression); Console.WriteLine("Applica operatore: " + s); double result = op.Interpret(); stack.Push(new NumberExpression(result)); Console.WriteLine("Push result: " + result); } else { AbstractExpression i = new NumberExpression(s); Console.WriteLine("Push: " + s); stack.Push(i); } } AbstractExpression exp = stack.Pop(); return(exp.Interpret()); }
public Expression Evaluate(String s) { int pos = s.Length - 1; while (pos > 0) { if (Char.IsDigit(s[pos])) { pos--; } else { Expression left = Evaluate(s.Substring(0, pos)); int number = int.Parse(s.Substring(pos + 1)); Expression right = new NumberExpression(number); Char oprt = s[pos]; switch (oprt.ToString()) { case "-": return(new MinusExpression(left, right)); case "+": return(new PlusExpression(left, right)); } } } int result = int.Parse(s); return(new NumberExpression(result)); }
public IExpression Evaluate(string s) { int pos = s.Length - 1; while (pos > 0) { if (Char.IsDigit(s[pos])) { pos--; } else { IExpression left = Evaluate(s.Substring(0, pos)); IExpression right = new NumberExpression(int.Parse(s.Substring(pos + 1, s.Length - pos - 1))); char oper = s[pos]; switch (oper) { case '-': return(new MinusExpression(left, right)); break; case '+': return(new PlusExpression(left, right)); break; } } } int result = int.Parse(s); return(new NumberExpression(result)); }