To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. The problem involves deciding how many regular and premium pies a shop should make to maximize profit, given certain constraints on demand and total production capacity.

The variables in this problem can be represented symbolically as:
- `x1`: The number of regular pies made.
- `x2`: The number of premium pies made.

The objective function, which is to maximize profit, can be represented algebraically using these symbolic variables. Since each regular pie makes a profit of $8 and each premium pie makes a profit of $10, the total profit `P` can be expressed as:
\[ P = 8x1 + 10x2 \]

The constraints given in the problem are:
1. The demand for regular pies is at most 50: \( x1 \leq 50 \)
2. The demand for premium pies is at most 30: \( x2 \leq 30 \)
3. The shop can only make 60 pies in total: \( x1 + x2 \leq 60 \)
4. Both `x1` and `x2` must be non-negative since they represent quantities of pies: \( x1 \geq 0, x2 \geq 0 \)

Thus, the symbolic representation of the problem is:
```json
{
    'sym_variables': [('x1', 'regular pies'), ('x2', 'premium pies')],
    'objective_function': '8*x1 + 10*x2',
    'constraints': ['x1 <= 50', 'x2 <= 30', 'x1 + x2 <= 60', 'x1 >= 0', 'x2 >= 0']
}
```

Now, let's write the Gurobi code in Python to solve this optimization problem:

```python
from gurobipy import *

# Create a new model
m = Model("Pie_Shop_Optimization")

# Add variables
x1 = m.addVar(name="regular_pies", lb=0)  # Number of regular pies
x2 = m.addVar(name="premium_pies", lb=0)  # Number of premium pies

# Set the objective function: Maximize profit
m.setObjective(8*x1 + 10*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 <= 50, name="regular_pie_demand")  # Demand constraint for regular pies
m.addConstr(x2 <= 30, name="premium_pie_demand")  # Demand constraint for premium pies
m.addConstr(x1 + x2 <= 60, name="total_production_capacity")  # Total production capacity

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of regular pies: {x1.x}")
    print(f"Number of premium pies: {x2.x}")
    print(f"Maximum profit: ${8*x1.x + 10*x2.x:.2f}")
else:
    print("No optimal solution found")
```