dimanche 7 juin 2015

Infix Calculator on java interpreter pattern

I need to create an infix calculator that supports Division, Multiplication, Addition and Subtraction using Interpreter pattern. I have postfix version of it. How can i turn into infix?

My Evaluator Class;

package Calculator;

import java.util.Stack;

public class Evaluator {

    private Expression syntaxTree;

    public Evaluator(String Expression) {
        String[] tokens = Expression.split(" ");

        Stack<Expression> expressionStack = new Stack<Expression>();

        for (String token : tokens) {
            if (token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/"))   {
                Expression right = expressionStack.pop();
                Expression left = expressionStack.pop();

                if (token.equals("+")) {
                    expressionStack.push(new DataExpression(new AddExpression(left, right).interpret()));
                } 
                else if (token.equals("-")) {
                    expressionStack.push(new DataExpression(new SubstractExpression(left, right).interpret()));
                }
                else if (token.equals("*")){
                    expressionStack.push(new DataExpression(new MultiplicationExpression(left, right).interpret()));
                }
                else if (token.equals("/")){
                    expressionStack.push(new DataExpression(new DivisionExpression(left, right).interpret()));
                }


            } else {
                expressionStack.push(new DataExpression(Integer.parseInt(token)));
            }
        }
         syntaxTree = expressionStack.pop();
    }

    public int interpret(){
      return syntaxTree.interpret();
   }

}

Add Expression Class;

public class AddExpression implements Expression{
Expression Left;
Expression Right;

    public AddExpression(Expression Left, Expression Right) {
        this.Left = Left;
        this.Right = Right;
    }



    @Override
    public int interpret() {
       return this.Left.interpret() + this.Right.interpret();
    }

Client(Main) Class;

public class Client {

    public static void main(String[] args) {
        // (10 + 6) – (7 – 2) 
   String context = "15 2 +";
   Evaluator e1 = new Evaluator(context);
   System.out.println(e1.interpret());
    }

}

Aucun commentaire:

Enregistrer un commentaire