/**
* ITI 1521. Introduction informatique II (Hiver 2007).
* ITI 1121. Introduction to Computer Science II (Winter 2007).
*
* Uasage:
* In DrJava, System.out.println( RPN.eval( "9 3 / 10 2 3 * - +" ) );
* From the command line:
* java RPN "9 3 / 10 2 3 * - +"
*
* @author Marcel Turcotte, Université d'Ottawa/University of Ottawa
*/
import java.io.IOException;
import java.io.StreamTokenizer;
import java.io.StringReader;
import java.util.Stack; // Java's implementation of a Stack
public class RPN {
public static int eval(String input) throws IOException {
Stack s = new Stack();
StringReader sr = new StringReader(input);
StreamTokenizer st = new StreamTokenizer(sr);
st.eolIsSignificant(false); // expressions may contain newlines
st.ordinaryChar('/'); // should not be interpreted as a comment
int token = st.nextToken();
while (token != StreamTokenizer.TT_EOF) {
switch (token) {
case StreamTokenizer.TT_NUMBER:
s.push(new Integer((int) st.nval));
break;
default:
int r = ((Integer) s.pop()).intValue();
int l = ((Integer) s.pop()).intValue();
int res = 0;
switch (st.ttype) {
case '+':
res = l + r;
break;
case '-':
res = l - r;
break;
case '*':
res = l * r;
break;
case '/':
res = l / r;
break;
}
s.push(new Integer(res));
}
token = st.nextToken();
}
return ((Integer) s.pop()).intValue();
}
public static void main(String[] args) throws IOException {
System.out.println(args[0] + " = " + eval(args[0]));
}
}