interface Op
  class Plus implements Op 
  class Minus implements Op 
  class Times implements Op 
  class Divide implements Op 

interface Expr
  class Binop ( lhs : Expr, op : Op, rhs : Expr ) implements Expr
  class Unop ( op : Op, exp : Expr ) implements Expr
  class Ident ( x : String ) implements Expr
  class Const ( i : Int ) implements Expr

interface Statement
  class Assign ( x : String, rhs : Expr ) implements Statement
  class Sequence ( lhs : Statement, rhs : Statement ) implements Statement
  class For ( loopVar : String, from : Expr, to : Expr, body : Statement ) implements Statement