/// <summary>
        /// Recusively decompose an expression into a tree of ExpressionElements
        /// </summary>
        /// <param name="expressionElement"></param>
        /// <param name="level"></param>
        /// <returns>The ExpressionElement with the SubExpressionElements property populated</returns>
        private ExpressionElement Decompose(ExpressionElement expressionElement, int level = 0)
        {
            IEnumerable<ExpressionElement> expressionElementChildren
                    = FindExpressionsAtSameLevel(expressionElement.Expression, level);

                expressionElement.PopulateSubExpressionElements(expressionElementChildren.Select(e => Decompose(e, level + 1)));

                return expressionElement;
        }