## Step 1: Define the symbolic representation of the problem
Let's denote the number of pieces of fried fish as $x_1$ and the number of pieces of fried chicken as $x_2$. The objective is to maximize revenue, which is $4x_1 + 5x_2$. The constraints are based on the available batter and oil. Each piece of fried fish requires 3 units of batter and each piece of fried chicken requires 4 units of batter, with 400 units available. This gives us the constraint $3x_1 + 4x_2 \leq 400$. For oil, with 5 units required for each piece of fried fish and 6 units for each piece of fried chicken, and 500 units available, we have $5x_1 + 6x_2 \leq 500$. Also, $x_1 \geq 0$ and $x_2 \geq 0$ because the number of pieces sold cannot be negative.

## 2: Express the problem in the required symbolic format
The symbolic variables are:
- $x_1$ for fried fish
- $x_2$ for fried chicken

The objective function to maximize is: $4x_1 + 5x_2$

The constraints are:
- $3x_1 + 4x_2 \leq 400$ (batter constraint)
- $5x_1 + 6x_2 \leq 500$ (oil constraint)
- $x_1 \geq 0$ (non-negativity constraint for fried fish)
- $x_2 \geq 0$ (non-negativity constraint for fried chicken)

In the required format:
```json
{
'sym_variables': [('x1', 'fried fish'), ('x2', 'fried chicken')],
'objective_function': '4*x1 + 5*x2',
'constraints': ['3*x1 + 4*x2 <= 400', '5*x1 + 6*x2 <= 500', 'x1 >= 0', 'x2 >= 0']
}
```

## 3: Convert the problem into Gurobi code
To solve this linear programming problem using Gurobi, we will use the Gurobi Python API.

```python
import gurobi

def solve_fried_food_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    x1 = model.addVar(name="fried_fish", lb=0)  # Number of fried fish
    x2 = model.addVar(name="fried_chicken", lb=0)  # Number of fried chicken

    # Define the objective function
    model.setObjective(4 * x1 + 5 * x2, gurobi.GRB.MAXIMIZE)

    # Define the constraints
    model.addConstr(3 * x1 + 4 * x2 <= 400, name="batter_constraint")
    model.addConstr(5 * x1 + 6 * x2 <= 500, name="oil_constraint")

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Number of fried fish to sell: {x1.varValue}")
        print(f"Number of fried chicken to sell: {x2.varValue}")
        print(f"Maximum revenue: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_fried_food_problem()
```