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 interest (space allocated to headsets and keyboards), formulating the objective function that represents the total revenue, and specifying the constraints based on labor hours and costs.

Let's define:
- \(x_1\) as the space in square feet allocated for headset production.
- \(x_2\) as the space in square feet allocated for keyboard production.

The objective function aims to maximize the net revenue. Given that headsets produce a net revenue of $45 per square foot and keyboards produce a net revenue of $80 per square foot, the objective function can be represented algebraically as:
\[ \text{Maximize:} \quad 45x_1 + 80x_2 \]

The constraints are based on the available space, labor hours, and budget:
1. **Space Constraint:** The total allocated space cannot exceed 120 square feet.
   \[ x_1 + x_2 \leq 120 \]
2. **Labor Hours Constraint:** Headsets require 2.5 hours of labor per square foot, and keyboards require 3.5 hours of labor per square foot. The total labor hours available are 2500.
   \[ 2.5x_1 + 3.5x_2 \leq 2500 \]
3. **Cost Constraint:** Headsets cost $10 for each square foot, and keyboards cost $12 for each square foot. The maximum budget is $5500.
   \[ 10x_1 + 12x_2 \leq 5500 \]

Symbolic representation in JSON format:
```json
{
  'sym_variables': [('x1', 'space allocated to headsets'), ('x2', 'space allocated to keyboards')],
  'objective_function': '45*x1 + 80*x2',
  'constraints': [
    'x1 + x2 <= 120',
    '2.5*x1 + 3.5*x2 <= 2500',
    '10*x1 + 12*x2 <= 5500',
    'x1 >= 0', 
    'x2 >= 0'
  ]
}
```

Here is the Gurobi code in Python to solve this optimization problem:
```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="headsets_space")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="keyboards_space")

# Set objective function: Maximize revenue
m.setObjective(45*x1 + 80*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 + x2 <= 120, "space_constraint")
m.addConstr(2.5*x1 + 3.5*x2 <= 2500, "labor_hours_constraint")
m.addConstr(10*x1 + 12*x2 <= 5500, "cost_constraint")
m.addConstr(x1 >= 0, "non_neg_headsets")
m.addConstr(x2 >= 0, "non_neg_keyboards")

# Optimize the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Headsets space: {x1.x} sq. feet")
    print(f"Keyboards space: {x2.x} sq. feet")
    print(f"Maximum revenue: ${m.objVal}")
else:
    print("No optimal solution found.")
```