import java.util.StringTokenizer; public class calculator { public static void main(String[] Args) { String input = ""; int result; for (int i = 0; i < Args.length; i++) { // System.out.println("Got a chunk: \""+Args[i]+"\"\n"); input = input+Args[i]; } System.out.println("Here's what I saw: \""+input+"\""); float ans = parse(input); System.out.println("That equals "+ans+"\n"); } public static float parse(String input) { StringTokenizer Tokenizer = new StringTokenizer(input,"()+-x/",true); mathNode tree = parseRec(Tokenizer, false); float value = 0; try { value = tree.eval(); } catch (NullPointerException e) { System.out.println("That input is not accepted."); System.exit(0); } return value; } public static mathNode parseRec(StringTokenizer Tokenizer, boolean paren) { mathNode tree = null; mathNode pointer = tree; mathNode parent = null; while (Tokenizer.hasMoreTokens()) { String chunk = Tokenizer.nextToken(); // chunk.replaceAll("~","-"); // System.out.println("Got a symbol: \""+chunk+"\""); if (chunk.equals("(")) { pointer = parseRec(Tokenizer, true); pointer.parent = parent; if (parent.left == null) parent.left = pointer; else parent.right = pointer; pointer = parent.right; } else if (chunk.equals(")")) { // System.out.println(tree.left.op+":"+tree.op+":"+tree.right.op); return tree; } else if (chunk.equals("x") || chunk.equals("/")) { mathNode node = new mathNode(chunk); tree = pointer.insertUp(node, tree); pointer = node.right; // System.out.println(node.op+":"+node.left.op+" Treetop="+tree.op); parent = node; } else if (chunk.equals("+") || chunk.equals("-")) { mathNode node = new mathNode(chunk); node.left = tree; node.left.parent = node; tree = node; pointer = node.right; parent = node; } else { // System.out.println("Got a character: \""+chunk+"\""); mathNode node = new mathNode(chunk); pointer = node; if (parent != null) parent.right = node; pointer.parent = parent; if (parent != null) pointer = parent.right; if (tree == null) tree = node; // System.out.println("Terminal: "+pointer.op+" Treetop:"+tree.op); } if (tree == null) {System.out.println("WTF Mate!");} } return tree; } }