*/
public class Calculator {
public static void main(String[] args) throws NoSuchMethodException, IOException {
ExpressionFactory factory = new ExpressionFactoryImpl();
SimpleContext context = new SimpleContext();
// variables e, pi
context.setVariable("e", factory.createValueExpression(Math.E, double.class));
context.setVariable("pi", factory.createValueExpression(Math.PI, double.class));
// functions sin, cos, tan, exp, log, abs, sqrt, min, max, pow
context.setFunction("", "sin", Math.class.getMethod("sin", double.class));
context.setFunction("", "cos", Math.class.getMethod("cos", double.class));
context.setFunction("", "tan", Math.class.getMethod("tan", double.class));
context.setFunction("", "exp", Math.class.getMethod("exp", double.class));
context.setFunction("", "log", Math.class.getMethod("log", double.class));
context.setFunction("", "abs", Math.class.getMethod("abs", double.class));
context.setFunction("", "sqrt", Math.class.getMethod("sqrt", double.class));
context.setFunction("", "min", Math.class.getMethod("min", double.class, double.class));
context.setFunction("", "max", Math.class.getMethod("max", double.class, double.class));
context.setFunction("", "pow", Math.class.getMethod("pow", double.class, double.class));
// print out the rules of the game...
System.out.println("> Enter one expression per line (without \"${\" and \"}\"). An expressions matching");
System.out.println("> \"m[0-9]*\" saves the previous evaluation result to \"memory\". Other expressions");
System.out.println("> are simply evaluated. Functions are sin, cos, tan, exp, log, abs, sqrt, min,");