To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. This involves defining variables for the quantities of cakes and pies to be made, formulating the objective function that represents the total revenue, and expressing the constraints related to the availability of sugar and flour.

Let's denote:
- \(x_1\) as the number of cakes made,
- \(x_2\) as the number of pies made.

The objective is to maximize the revenue. Given that each cake generates $4 in revenue and each pie generates $3, the objective function can be written as:
\[ \text{Maximize} \quad 4x_1 + 3x_2 \]

The constraints are based on the availability of sugar and flour:
- Each cake requires 4 units of sugar, and each pie requires 5 units. The total sugar available is 1000 units. Thus, the sugar constraint can be expressed as: \( 4x_1 + 5x_2 \leq 1000 \).
- Each cake requires 5 units of flour, and each pie requires 3 units. The total flour available is 1200 units. Thus, the flour constraint can be expressed as: \( 5x_1 + 3x_2 \leq 1200 \).

Additionally, we have non-negativity constraints since the number of cakes and pies cannot be negative:
- \( x_1 \geq 0 \)
- \( x_2 \geq 0 \)

The symbolic representation of the problem is thus:
```json
{
    'sym_variables': [('x1', 'number of cakes'), ('x2', 'number of pies')],
    'objective_function': '4*x1 + 3*x2',
    'constraints': ['4*x1 + 5*x2 <= 1000', '5*x1 + 3*x2 <= 1200', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this problem using Gurobi in Python, we will use the following code:
```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(name="cakes", lb=0)
x2 = m.addVar(name="pies", lb=0)

# Set the objective function
m.setObjective(4*x1 + 3*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(4*x1 + 5*x2 <= 1000, name="sugar_constraint")
m.addConstr(5*x1 + 3*x2 <= 1200, name="flour_constraint")

# Optimize the model
m.optimize()

# Print the results
for v in m.getVars():
    print(f"{v.varName}: {v.x}")

print("Objective:", m.objVal)
```