public override Node ExitInExpression(Production node)
        {
            IList childValues = this.GetChildValues(node);

            if (childValues.Count == 1)
            {
                this.AddFirstChildValue(node);
                return(node);
            }

            ExpressionElement operand = childValues[0] as ExpressionElement;

            childValues.RemoveAt(0);

            object    second = childValues[0];
            InElement op     = default(InElement);

            if ((second) is IList)
            {
                op = new InElement(operand, (IList)second);
            }
            else
            {
                InvocationListElement il = new InvocationListElement(childValues, MyServices);
                op = new InElement(operand, il);
            }

            node.AddValue(op);
            return(node);
        }
        public override Node ExitMemberExpression(Production node)
        {
            IList  childValues = this.GetChildValues(node);
            object first       = childValues[0];

            if (childValues.Count == 1 && !(first is MemberElement))
            {
                node.AddValue(first);
            }
            else
            {
                InvocationListElement list = new InvocationListElement(childValues, MyServices);
                node.AddValue(list);
            }

            return(node);
        }