package com.coding.basic.stack.expr;
import java.util.Collections;
import java.util.List;
import java.util.Stack;
public class PrefixExpr {
String expr = null;
public PrefixExpr(String expr) {
this.expr = expr;
}
public float evaluate() {
Stack<String> stack = new Stack<String>();
TokenParser parser = new TokenParser();
List<Token> tokens = parser.parse(expr);
Collections.reverse(tokens);
for(Token token :tokens){
if(token.isNumber()){
stack.push(token.toString());
}
if(token.isOperator()){
int num1 = Integer.parseInt(stack.pop());
int num2 = Integer.parseInt(stack.pop());
String result = parseToResult(num1,num2,token.toString());
stack.push(result);
}
}
return Float.parseFloat(stack.pop());
}
private String parseToResult(int num1, int num2, String oper) {
// TODO Auto-generated method stub
String result = "";
if(oper.equals("*"))
result = (num1*num2)+"";
if(oper.equals("/"))
result = (num1/num2)+"";
if(oper.equals("+"))
result = (num1+num2)+"";
if(oper.equals("-"))
result = (num1-num2)+"";
return result;
}
}