To solve Nolan's farming equipment allocation problem, we first need to define the variables and the objective function symbolically. Let's denote:

- $x_p$ as the number of acres allocated for pumpkins.
- $x_t$ as the number of acres allocated for potatoes.

The revenue per acre from pumpkins is $150, and from potatoes is $200. Thus, the total revenue can be represented by the objective function: 

$$
\text{Maximize: } 150x_p + 200x_t
$$

Now, let's formulate the constraints based on the equipment usage:

1. **Tractor Constraint**: Harvesting an acre of pumpkins requires 0.5 hours on the tractor, and an acre of potatoes requires 0.9 hours. Given that the tractor can be used for up to 12 hours a day:
   $$
   0.5x_p + 0.9x_t \leq 12
   $$

2. **Plow Constraint**: An acre of pumpkins requires 0.6 hours on the plow, and an acre of potatoes requires 0.5 hours. Given that the plow can be used for up to 12 hours a day:
   $$
   0.6x_p + 0.5x_t \leq 12
   $$

3. **Combine Constraint**: An acre of pumpkins requires 0.4 hours on the combine, and an acre of potatoes requires 0.3 hours. Given that the combine can be used for up to 12 hours a day:
   $$
   0.4x_p + 0.3x_t \leq 12
   $$

Additionally, we have non-negativity constraints since acres allocated cannot be negative:
- $x_p \geq 0$
- $x_t \geq 0$

Now, let's represent the problem symbolically as requested:

```json
{
  'sym_variables': [('x_p', 'acres of pumpkins'), ('x_t', 'acres of potatoes')],
  'objective_function': '150*x_p + 200*x_t',
  'constraints': [
    '0.5*x_p + 0.9*x_t <= 12',
    '0.6*x_p + 0.5*x_t <= 12',
    '0.4*x_p + 0.3*x_t <= 12',
    'x_p >= 0',
    'x_t >= 0'
  ]
}
```

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

```python
from gurobipy import *

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

# Add variables to the model
x_p = m.addVar(lb=0, name="acres_of_pumpkins")
x_t = m.addVar(lb=0, name="acres_of_potatoes")

# Set the objective function
m.setObjective(150*x_p + 200*x_t, GRB.MAXIMIZE)

# Add constraints to the model
m.addConstr(0.5*x_p + 0.9*x_t <= 12, "Tractor_Constraint")
m.addConstr(0.6*x_p + 0.5*x_t <= 12, "Plow_Constraint")
m.addConstr(0.4*x_p + 0.3*x_t <= 12, "Combine_Constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print(f"Optimal acres of pumpkins: {x_p.x}")
    print(f"Optimal acres of potatoes: {x_t.x}")
    print(f"Maximum revenue: {m.objVal}")
else:
    print("No optimal solution found")
```