To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. This involves defining variables, an objective function, and constraints.

Let's denote:
- $x_1$ as the number of acres of peaches grown,
- $x_2$ as the number of acres of nectarines grown.

The objective is to maximize profit. Given that the profit per acre of peaches is $300 and the profit per acre of nectarines is $350, the objective function can be represented as:
\[ \text{Maximize:} \quad 300x_1 + 350x_2 \]

The constraints are based on the available budget for bug-spray and the time available to spray it. Each acre of peaches requires $40 worth of bug-spray, and each acre of nectarines requires $50 worth of bug-spray. The total budget for bug-spray is $1350. This gives us our first constraint:
\[ 40x_1 + 50x_2 \leq 1350 \]

For the time constraint, each acre of peaches requires 50 minutes to spray, and each acre of nectarines requires 70 minutes. The total available time is 2000 minutes, leading to our second constraint:
\[ 50x_1 + 70x_2 \leq 2000 \]

Additionally, we have non-negativity constraints since the number of acres cannot be negative:
\[ x_1 \geq 0 \]
\[ x_2 \geq 0 \]

And finally, since we only have 30 acres of land in total, we have:
\[ x_1 + x_2 \leq 30 \]

So, the symbolic representation of our problem is:
```json
{
    'sym_variables': [('x1', 'acres of peaches'), ('x2', 'acres of nectarines')],
    'objective_function': '300*x1 + 350*x2',
    'constraints': ['40*x1 + 50*x2 <= 1350', '50*x1 + 70*x2 <= 2000', 'x1 + x2 <= 30', 'x1 >= 0', 'x2 >= 0']
}
```

To solve this linear programming problem using Gurobi in Python, we can use the following code:

```python
from gurobipy import *

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

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

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

# Add constraints
m.addConstr(40*x1 + 50*x2 <= 1350, "bug_spray_budget")
m.addConstr(50*x1 + 70*x2 <= 2000, "spray_time_limit")
m.addConstr(x1 + x2 <= 30, "total_land")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Acres of peaches: {x1.x}")
    print(f"Acres of nectarines: {x2.x}")
    print(f"Maximum profit: ${300*x1.x + 350*x2.x:.2f}")
else:
    print("No optimal solution found")
```