public abstract void Accept(IExpressionVisitor visitor);
protected virtual void Visit(Expression exp) { exp.Accept(this); }