// Language Level Converter line number map: dj*->java. Entries: 73 // 1->12 2->13 3->14 4->15 5->46 6->47 7->48 8->49 // 9->50 10->51 11->52 12->53 13->92 14->93 15->94 16->95 // 17->96 18->97 19->98 20->99 21->138 22->139 23->140 24->141 // 25->142 26->143 27->144 28->145 29->193 30->194 31->195 32->196 // 33->197 34->198 35->199 36->200 37->248 38->249 39->250 40->251 // 41->252 42->253 43->254 44->255 45->303 46->304 47->305 48->306 // 49->307 50->308 51->309 52->310 53->358 54->359 55->360 56->361 // 57->362 58->393 59->394 60->395 61->396 62->397 63->398 64->424 // 65->425 66->426 67->427 68->428 69->429 70->430 71->431 72->432 // 73->433 abstract class ArithExpr { public abstract double eval(final Env enf); public abstract String exprString(); /** This method is automatically generated by the Language Level Converter. */ public ArithExpr() { super(); } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { ArithExpr cast = ((ArithExpr) o); return true; } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode(); } } class Const extends ArithExpr { private final double value; public double eval(final Env env) { return value; } public String exprString() { return Double.toString(value); } /** This method is automatically generated by the Language Level Converter. */ public Const(double value) { super(); this.value = value; } /** This method is automatically generated by the Language Level Converter. */ public double value() { return value; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + value() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { Const cast = ((Const) o); return (value() == cast.value()); } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode() ^ (int) value(); } } class Var extends ArithExpr { private final String name; public double eval(final Env env) { return env.lookup(name); } public String exprString() { return name; } /** This method is automatically generated by the Language Level Converter. */ public Var(java.lang.String name) { super(); this.name = name; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String name() { return name; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + name() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { Var cast = ((Var) o); return (name() != null && name().equals(cast.name())); } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode() ^ (name() == null ? 0 : name().hashCode()); } } class Sum extends ArithExpr { private final ArithExpr left, right; public double eval(final Env env) { return left.eval(env) + right.eval(env); } public String exprString() { return "(" + left.exprString() + " + " + right.exprString() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public Sum(ArithExpr left, ArithExpr right) { super(); this.left = left; this.right = right; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr left() { return left; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr right() { return right; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + left() + ", " + right() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { Sum cast = ((Sum) o); return (left() != null && left().equals(cast.left())) && (right() != null && right().equals(cast.right())); } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode() ^ (left() == null ? 0 : left().hashCode()) ^ (right() == null ? 0 : right().hashCode()); } } class Diff extends ArithExpr { private final ArithExpr left, right; public double eval(final Env env) { return left.eval(env) - right.eval(env); } public String exprString() { return "(" + left.exprString() + " - " + right.exprString() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public Diff(ArithExpr left, ArithExpr right) { super(); this.left = left; this.right = right; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr left() { return left; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr right() { return right; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + left() + ", " + right() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { Diff cast = ((Diff) o); return (left() != null && left().equals(cast.left())) && (right() != null && right().equals(cast.right())); } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode() ^ (left() == null ? 0 : left().hashCode()) ^ (right() == null ? 0 : right().hashCode()); } } class Prod extends ArithExpr { private final ArithExpr left, right; public double eval(final Env env) { return left.eval(env) * right.eval(env); } public String exprString() { return "(" + left.exprString() + " * " + right.exprString() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public Prod(ArithExpr left, ArithExpr right) { super(); this.left = left; this.right = right; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr left() { return left; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr right() { return right; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + left() + ", " + right() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { Prod cast = ((Prod) o); return (left() != null && left().equals(cast.left())) && (right() != null && right().equals(cast.right())); } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode() ^ (left() == null ? 0 : left().hashCode()) ^ (right() == null ? 0 : right().hashCode()); } } class Quot extends ArithExpr { private final ArithExpr left, right; public double eval(final Env env) { return left.eval(env) / right.eval(env); } public String exprString() { return "(" + left.exprString() + " / " + right.exprString() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public Quot(ArithExpr left, ArithExpr right) { super(); this.left = left; this.right = right; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr left() { return left; } /** This method is automatically generated by the Language Level Converter. */ public ArithExpr right() { return right; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + left() + ", " + right() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { Quot cast = ((Quot) o); return (left() != null && left().equals(cast.left())) && (right() != null && right().equals(cast.right())); } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode() ^ (left() == null ? 0 : left().hashCode()) ^ (right() == null ? 0 : right().hashCode()); } } abstract class Env { public abstract Double lookup(final String name); public Env cons(final String vn, final double v) { return new ConsEnv(vn, v, this); } /** This method is automatically generated by the Language Level Converter. */ public Env() { super(); } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { Env cast = ((Env) o); return true; } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode(); } } class EmptyEnv extends Env { public final static EmptyEnv ONLY = new EmptyEnv(); private EmptyEnv() { } public Double lookup(final String name) { return null; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { EmptyEnv cast = ((EmptyEnv) o); return true; } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode(); } } class ConsEnv extends Env { private final String varName; private final double value; private final Env rest; public Double lookup(final String name) { if (name.equals(varName)) return value; else return rest.lookup(name); } /** This method is automatically generated by the Language Level Converter. */ public ConsEnv(java.lang.String varName, double value, Env rest) { super(); this.varName = varName; this.value = value; this.rest = rest; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String varName() { return varName; } /** This method is automatically generated by the Language Level Converter. */ public double value() { return value; } /** This method is automatically generated by the Language Level Converter. */ public Env rest() { return rest; } /** This method is automatically generated by the Language Level Converter. */ public java.lang.String toString() { return getClass().getName() + "(" + varName() + ", " + value() + ", " + rest() + ")"; } /** This method is automatically generated by the Language Level Converter. */ public boolean equals(java.lang.Object o) { if (this == o) { return true; } else if ((o == null) || (! o.getClass().equals(getClass()))) { return false; } else { ConsEnv cast = ((ConsEnv) o); return (varName() != null && varName().equals(cast.varName())) && (value() == cast.value()) && (rest() != null && rest().equals(cast.rest())); } } /** This method is automatically generated by the Language Level Converter. */ public int hashCode() { return getClass().hashCode() ^ (varName() == null ? 0 : varName().hashCode()) ^ (int) value() ^ (rest() == null ? 0 : rest().hashCode()); } }