class PP implements Visitor{
    StringBuffer buf = new StringBuffer();
    public void visit(Var x){buf.append(x.x);}
    public void visit(Num x){buf.append(x.i+"");}
    public void visit(Assign as){
       as.l.welcome(this);
       buf.append(" = ");
       as.r.welcome(this);
    }
    public void visit(Not as){
       buf.append("!");
       as.l.welcome(this);
    }
    public void visit(Eq as){
       as.l.welcome(this);
       buf.append(" == ");
       as.r.welcome(this);
    }
    public void visit(Add as){
       as.l.welcome(this);;
       buf.append(" + ");
       as.r.welcome(this);
    }
    public void visit(Sub as){
       as.l.welcome(this);
       buf.append(" - ");
       as.r.welcome(this);
    }
    public void visit(Mul as){
       as.l.welcome(this);
       buf.append(" * ");
       as.r.welcome(this);
    }
    public void visit(Div as){
       as.l.welcome(this);
       buf.append(" / ");
       as.r.welcome(this);
    }
    public void visit(While w){
	buf.append("while (");
	w.cond.welcome(this);
	buf.append("){\n");
	w.body.welcome(this);
	buf.append("\n}");
    }
    public void visit(Seq s){
	for (Klip klip:s.klips){
	    klip.welcome(this);;
	    buf.append(";\n");
	}
    }
}
