To solve this problem, we first need to convert the natural language description into a symbolic representation. Let's define the variables as follows:

- $x_1$: Number of coats produced
- $x_2$: Number of shirts produced

The objective function is to maximize profit. The profit per coat is $6, and the profit per shirt is $11. Therefore, the objective function can be represented algebraically as:

Maximize: $6x_1 + 11x_2$

Now, let's represent the constraints symbolically:

- Measuring team constraint: $0.7x_1 + 0.2x_2 \leq 50$
- Cutting team constraint: $0.5x_1 + 0.3x_2 \leq 35$
- Sewing team constraint: $0.9x_1 + 0.5x_2 \leq 40$

Non-negativity constraints:
- $x_1 \geq 0$
- $x_2 \geq 0$

The symbolic representation in JSON format is:

```json
{
    'sym_variables': [('x1', 'Number of coats produced'), ('x2', 'Number of shirts produced')], 
    'objective_function': '6*x1 + 11*x2', 
    'constraints': ['0.7*x1 + 0.2*x2 <= 50', '0.5*x1 + 0.3*x2 <= 35', '0.9*x1 + 0.5*x2 <= 40', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this linear programming problem, we can use the Gurobi Python library. Here's how you could write and execute the code:

```python
from gurobipy import *

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

# Create variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="coats", lb=0)
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="shirts", lb=0)

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

# Add constraints
m.addConstr(0.7*x1 + 0.2*x2 <= 50, "measuring_team")
m.addConstr(0.5*x1 + 0.3*x2 <= 35, "cutting_team")
m.addConstr(0.9*x1 + 0.5*x2 <= 40, "sewing_team")

# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Number of coats: {x1.x}")
    print(f"Number of shirts: {x2.x}")
    print(f"Maximum profit: {m.objVal}")
else:
    print("No optimal solution found.")

```