// $Id: ToString.java,v 1.2 1999/11/25 01:25:11 leavens Exp $

package lib.atomic_expression;

public class ToString implements Visitor {
    public ToString() {}
    public Object visitNil(Nil n) {
        return "()";
    }
    public Object visitAtom(Atom a) {
        Object ao = a.getObject();
        return (ao == null) ? "null" : ao.toString();
    }
    public Object visitExpr(Expr e) {
        return "("
            + ((String)(e.getLeft().visit(this)))
            + " . "
            + ((String)(e.getRight().visit(this)))
            + ")";
    }

    /** to test, execute "java lib.atomic_expression.ToString" **/
    public static void main(String [] argv) {
        ToString ts = new ToString();
        System.out.println("new Nil().visit(ts) = "
                           + new Nil().visit(ts));
        System.out.println("new Atom(new Double(3.0)).visit(ts) = "
                           + new Atom(new Double(3.0)).visit(ts));
        AtomicExpression myExp
            = new Expr(new Atom(new Double(4.0)),
                       new Expr(new Atom(new Double(2.0)), new Nil()));
        System.out.println("myExp.visit(ts) = "
                           + myExp.visit(ts));
    }

    public String toString() {
        return "new ToString()";
    }
}
