To solve the given optimization problem, we first need to translate the natural language description into a symbolic representation. This involves defining variables for the quantities of interest (regular tables and standing tables), formulating the objective function that represents the total profit, and listing all constraints based on production limits.

Let's denote:
- \(x_1\) as the number of regular tables produced.
- \(x_2\) as the number of standing tables produced.

The objective function aims to maximize profit. Given that each regular table generates $150 in profit and each standing table generates $180, the total profit can be represented by the equation:
\[ \text{Maximize:} \quad 150x_1 + 180x_2 \]

Constraints are based on production capacities:
1. Team A can produce at most 25 regular tables per day: \( x_1 \leq 25 \).
2. Team B can produce at most 50 standing tables per day: \( x_2 \leq 50 \).
3. The woodworking machine can make at most 60 total tables: \( x_1 + x_2 \leq 60 \).

Additionally, the number of tables cannot be negative:
- \( x_1 \geq 0 \)
- \( x_2 \geq 0 \)

Thus, the symbolic representation in JSON format is:

```json
{
    'sym_variables': [('x1', 'number of regular tables'), ('x2', 'number of standing tables')],
    'objective_function': '150*x1 + 180*x2',
    'constraints': ['x1 <= 25', 'x2 <= 50', 'x1 + x2 <= 60', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this linear programming problem using Gurobi in Python, we'll write the following code:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(name="regular_tables", vtype=GRB.INTEGER, lb=0)
x2 = m.addVar(name="standing_tables", vtype=GRB.INTEGER, lb=0)

# Set objective function: Maximize profit
m.setObjective(150*x1 + 180*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(x1 <= 25, name="regular_table_limit")
m.addConstr(x2 <= 50, name="standing_table_limit")
m.addConstr(x1 + x2 <= 60, name="woodworking_machine_limit")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Regular tables: {x1.x}")
    print(f"Standing tables: {x2.x}")
    print(f"Total profit: ${150*x1.x + 180*x2.x:.2f}")
else:
    print("No optimal solution found")
```