Design 2 example (1)
interface ASTVisitor {
visitAssign(Assign a);
visitCall(Call c);
...
}
class Assign
{
Exp left;
Exp right;
...
accept(ASTVisitor v) {
left.accept(v);
right.accept(v);
v.visitAssign(this);
}
}