I think the Element rule generates an object. Since there is no assignment, it becomes current. A second unassigned call to the Place rule will also return an object. But the current pointer already contains a class of type Element and cannot contain the class Place. So, what you can try is assign a place to the factoid member called location:
factoid: item=Element location=Place ;
I'm not sure if element assignment to element is required. If Element is not assigned to a member, I expect this place to become a member of Element or something similar.
source share