To solve this optimization problem, we first need to define the decision variables and the objective function. The decision variables are x1 (the number of regular ice creams made) and x2 (the number of premium ice creams made). The objective is to maximize profit, which can be represented as 1*x1 + 2.50*x2.

The constraints given in the problem are:
- x1 ≤ 40 (demand for regular ice cream)
- x2 ≤ 25 (demand for premium ice cream)
- x1 + x2 ≤ 60 (total number of ice creams that can be made)
- x1 ≥ 0 and x2 ≥ 0 (non-negativity constraints, as the shop cannot make a negative number of ice creams)

Here's how we translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
model = Model("Ice Cream Production")

# Define the decision variables
x1 = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Regular_Ice_Cream")
x2 = model.addVar(lb=0, vtype=GRB.CONTINUOUS, name="Premium_Ice_Cream")

# Set the objective function to maximize profit
model.setObjective(1*x1 + 2.50*x2, GRB.MAXIMIZE)

# Add constraints
model.addConstr(x1 <= 40, "Regular_Demand")
model.addConstr(x2 <= 25, "Premium_Demand")
model.addConstr(x1 + x2 <= 60, "Total_Production")

# Optimize the model
model.optimize()

# Print the results
if model.status == GRB.OPTIMAL:
    print(f"Optimal solution: x1 = {x1.x}, x2 = {x2.x}")
    print(f"Maximum profit: {model.objVal}")
else:
    print("The model is infeasible")
```