Beispiel #1
0
        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());
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
        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));
        }