To solve the optimization problem described, we first need to convert the natural language description into a symbolic representation. This involves defining variables for the quantities of ice cream cones and cups to be sold, formulating the objective function that represents the total revenue, and establishing constraints based on the limited resources (ice cream scoops and toppings).

Let's define:
- $x_1$ as the number of ice cream cones to be sold.
- $x_2$ as the number of ice cream cups to be sold.

The objective function, which aims to maximize revenue, can be represented as:
\[3x_1 + 3.5x_2\]

Given that each ice cream cone requires 3 scoops of ice cream and each cup requires 4 scoops, and there are 500 scoops available, the first constraint is:
\[3x_1 + 4x_2 \leq 500\]

For the toppings, with each cone requiring 5 grams and each cup requiring 6 grams, and having 1000 grams available, the second constraint is:
\[5x_1 + 6x_2 \leq 1000\]

Additionally, since the number of ice cream cones and cups cannot be negative, we have non-negativity constraints:
\[x_1 \geq 0\]
\[x_2 \geq 0\]

Now, let's summarize this in the requested format:

```json
{
    'sym_variables': [('x1', 'number of ice cream cones'), ('x2', 'number of ice cream cups')], 
    'objective_function': '3*x1 + 3.5*x2', 
    'constraints': ['3*x1 + 4*x2 <= 500', '5*x1 + 6*x2 <= 1000', 'x1 >= 0', 'x2 >= 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("Ice Cream Sales")

# Define variables
x1 = m.addVar(name="ice_cream_cones", vtype=GRB.CONTINUOUS, lb=0)
x2 = m.addVar(name="ice_cream_cups", vtype=GRB.CONTINUOUS, lb=0)

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

# Add constraints
m.addConstr(3*x1 + 4*x2 <= 500, name="ice_cream_scoops")
m.addConstr(5*x1 + 6*x2 <= 1000, name="toppings")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Ice Cream Cones: {x1.x}")
    print(f"Ice Cream Cups: {x2.x}")
    print(f"Total Revenue: {m.objVal}")
else:
    print("No optimal solution found")
```