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