## Step 1: Define the symbolic variables
Let's define the symbolic variables for the problem:
- $x_1$ represents the number of lumbers
- $x_2$ represents the number of plywood

## Step 2: Translate the objective function into symbolic notation
The profit per lumber is $10 and the profit per plywood is $35. The objective function to maximize profit is:
\[ \text{Maximize:} \quad 10x_1 + 35x_2 \]

## 3: Translate the constraints into symbolic notation
The factory has the following constraints:
- Total worker-hours: $3x_1 + 2x_2 \leq 2500$
- Total machine-hours: $8x_1 + 12x_2 \leq 4000$
- Minimum lumbers: $x_1 \geq 200$
- Minimum plywood: $x_2 \geq 300$
- Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$

However, since $x_1$ and $x_2$ represent quantities of products, we can implicitly assume $x_1 \geq 0$ and $x_2 \geq 0$. The explicit non-negativity constraints are not necessary given the minimum requirements.

## 4: Compile the symbolic representation
The symbolic representation of the problem is:
```json
{
'sym_variables': [('x1', 'lumbers'), ('x2', 'plywood')],
'objective_function': '10*x1 + 35*x2',
'constraints': [
    '3*x1 + 2*x2 <= 2500',
    '8*x1 + 12*x2 <= 4000',
    'x1 >= 200',
    'x2 >= 300'
]
}
```

## 5: Write the Gurobi code
Now, let's write the Gurobi code in Python to solve this problem:
```python
import gurobipy as gp

# Create a new model
model = gp.Model("WoodFactory")

# Define the variables
x1 = model.addVar(name="lumbers", lb=200)  # At least 200 lumbers
x2 = model.addVar(name="plywood", lb=300)  # At least 300 plywood

# Define the objective function
model.setObjective(10*x1 + 35*x2, gp.GRB.MAXIMIZE)

# Add constraints
model.addConstr(3*x1 + 2*x2 <= 2500, name="worker_hours")
model.addConstr(8*x1 + 12*x2 <= 4000, name="machine_hours")

# Solve the model
model.solve()

# Print the solution
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution: lumbers = {x1.varValue}, plywood = {x2.varValue}")
    print(f"Maximum profit: ${model.objVal:.2f}")
else:
    print("No optimal solution found")
```