private void AttachToStack(Stack <IContextExpression> stack, IContextExpression newNode)
        {
            if (stack.Any())
            {
                var parent = stack.Pop();

                if (parent is ParentExpression)
                {
                    if ((parent as ParentExpression).Child != null)
                    {
                        throw new ExpressionParseException(string.Format(
                                                               "Parent for {0} already full.",
                                                               newNode.GetType().Name));
                    }

                    (parent as ParentExpression).Child = newNode;

                    AttachToStack(stack, parent);
                }

                if (parent is NodeExpression)
                {
                    if ((parent as NodeExpression).RightChild != null)
                    {
                        throw new ExpressionParseException(string.Format(
                                                               "Parent for {0} already full.",
                                                               newNode.GetType().Name));
                    }

                    (parent as NodeExpression).RightChild = newNode;

                    AttachToStack(stack, parent);
                }
            }
            else
            {
                stack.Push(newNode);
            }
        }