package com.ecust.jvm4; import java.util.List; import java.util.Stack; public class PrefixExpr { private String expr; public PrefixExpr(String expr) { this.expr = expr; } public float evaluate(){ TokenParser tokenParser = new TokenParser(); List<Token> tokens = tokenParser.parse(expr); Stack<Float> numStack = new Stack(); Stack<Float> oprStack = new Stack(); for (int i = tokens.size() - 1; i > -1; i--) { if (tokens.get(i).isNumber()) { numStack.push(new Float(tokens.get(i).getIntValue())); } else { Float num1 = numStack.pop(); Float num2 = numStack.pop(); numStack.push(caculate(tokens.get(i).toString(), num1, num2)); } } return numStack.pop(); } private Float caculate(String oper, Float num1, Float num2){ if (oper.equals("+")) { return num1 + num2; } else if (oper.equals("-")) { return num1 - num2; } else if (oper.equals("/")) { return num1 / num2; } else if (oper.equals("*")) { return num1 * num2; } throw new RuntimeException("illeagal operation token"); } }