public abstract class Expr {
	public abstract Expr apply (Expr target, double value);
	public abstract String compile ();
	public abstract Expr differentiate (Expr dx);
	public abstract Expr simplify ();
	public abstract Expr simplify (UnaryExpr parent);
	public abstract Expr simplify (BinaryExpr parent, Expr sibling);

	public Expr add (Expr other) {
		return new AddExpr(this, other);
	}

	public Expr mul (Expr other) {
		return new MulExpr(this, other);
	}

	public Expr sub (Expr other) {
		return new SubExpr(this, other);
	}
}

@@ -319,24 +319,27 @@
 );%0A%0A%09public 
+Add
 Expr add (Ex
@@ -342,32 +342,32 @@
  (Expr other) %7B%0A
-
 %09%09return new Add
@@ -393,24 +393,27 @@
 %09%7D%0A%0A%09public 
+Mul
 Expr mul (Ex
@@ -463,24 +463,24 @@
 r);%0A%09%7D%0A%0A
-
 %09public 
 Expr sub
@@ -471,16 +471,19 @@
 %09public 
+Sub
 Expr sub

Clarify types of common operations.