Skip to content

Instantly share code, notes, and snippets.

@fakedrake
Created October 23, 2012 15:44
Show Gist options
  • Save fakedrake/3939559 to your computer and use it in GitHub Desktop.
Save fakedrake/3939559 to your computer and use it in GitHub Desktop.
import java.text.*;
import java.util.*;
// Calculator will only accept numbers of type T
// A calculator knows how to parse a given string
public class Calculator <T extends Number> {
Stack<T> st = new Stack<T>();
List<IOperator<T>> operators = new LinkedList<IOperator<T>>();
Calculator (List<IOperator<T>> ops) {
operators.addAll(ops);
}
private IOperator<T> getOperator(String token) {
for (IOperator<T> op : operators) {
if (op.match_name(token))
return op;
}
return null;
}
public void read (String expr) {
Scanner sc = new Scanner(expr);
String token;
IOperator<T> op;
while (sc.hasNext()) {
token = sc.next();
if ((op = getOperator(token)) == null) {
op.apply(st);
continue;
}
// Read type T
try {
st.push( (T)NumberFormat.getInstance().parse(token));
} catch (ParseException e) {
System.err.println("Unrecognized token.");
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment