importjava.util.Scanner;importjava.util.Stack;public classMain {//(sub (mul 2 4) (div 9 3))
public static voidmain(String[] args) {
Scanner scanner= newScanner(System.in);
String line=scanner.nextLine();
calculatorLISP(line);
scanner.close();
}private static voidcalculatorLISP(String str) {
Stack numStack = new Stack();
Stack operStack =new Stack();int mark = 0;int paramOne = 0;int paramTwo = 0;for(int i = 0; i < str.length() ; i++) {char c =str.charAt(i);if(c == '('){
operStack.push(str.substring(i+1,i+4));
i+=4;
mark= i+1;
}else if(c == ')'){if(mark
numStack.push(Integer.valueOf(str.substring(mark,i)));
i++;
mark= i+1;
}
paramTwo=numStack.pop();
paramOne=numStack.pop();
calc(numStack,operStack,paramOne,paramTwo);
}else{if(c == ' '){if(mark
numStack.push(Integer.valueOf(str.substring(mark,i)));
mark= i + 1;
}
}
}
}while(!operStack.isEmpty()) {
paramTwo=numStack.pop();
paramOne=numStack.pop();
calc(numStack,operStack,paramOne,paramTwo);
}
System.out.println(numStack.pop().toString());
}public static void calc(Stack numStack,Stack operStack,int paramOne, intparamTwo){switch(operStack.pop()) {case "add":
numStack.push(paramOne+paramTwo);break;case "sub":
numStack.push(paramOne-paramTwo);break;case "mul":
numStack.push(paramOne*paramTwo);break;case "div":if(paramTwo == 0) {
System.out.println("error");
}else{
numStack.push(paramOne/paramTwo);
}break;
}
}
}