public virtual void VisitFact(Fact fact)
        {
            this.contextStack.Push(fact);
            VisitConclusion(fact);
            DateInfo date = fact.Date;

            if (date != null)
            {
                date.Accept(this);
            }

            PlaceReference place = fact.Place;

            if (place != null)
            {
                place.Accept(this);
            }

            List <Field> fields = fact.Fields;

            if (fields != null)
            {
                foreach (Field field in fields)
                {
                    field.Accept(this);
                }
            }

            this.contextStack.Pop();
        }
        public virtual void VisitEvent(Event @event)
        {
            this.contextStack.Push(@event);
            VisitSubject(@event);
            DateInfo date = @event.Date;

            if (date != null)
            {
                date.Accept(this);
            }

            PlaceReference place = @event.Place;

            if (place != null)
            {
                place.Accept(this);
            }

            List <EventRole> roles = @event.Roles;

            if (roles != null)
            {
                foreach (EventRole role in roles)
                {
                    role.Accept(this);
                }
            }
            this.contextStack.Pop();
        }