/// <summary>
        /// Collects all variable accesses within the given expression.
        /// </summary>
        /// <param name="expression">The expression to collect the accesses from.</param>
        /// <returns>The collected variable accesses.</returns>
        public static VariableAccesses Collect(Expression expression)
        {
            var accesses = new VariableAccesses();

            accesses.Visit(expression);
            return(accesses);
        }
        /// <summary>
        /// Collects all variable accesses within the given code.
        /// </summary>
        /// <param name="code">The code to collect the accesses from.</param>
        /// <returns>The collected variable accesses.</returns>
        public static VariableAccesses Collect(Code code)
        {
            var accesses = new VariableAccesses();

            foreach (var node in code.Root)
            {
                accesses.Visit(node);
            }
            return(accesses);
        }