public static string GetMemberName <T>(Sle.Expression <Func <T, object> > expr)
 {
     Sle.Expression       body             = ((Sle.LambdaExpression)expr).Body;
     Sle.MemberExpression memberExpression = body as Sle.MemberExpression;
     if (memberExpression == null)
     {
         memberExpression = (Sle.MemberExpression)((Sle.UnaryExpression)body).Operand;
     }
     return(memberExpression.Member.Name);
 }
            /// <summary>
            /// Parse the input and create a function.
            /// </summary>
            private void Parse()
            {
                // Build the expression
                Sle.Expression expression = GetExpression();

                // Ensure we exhausted the input
                int   finalPosition = Lexer.Position;
                Token finalToken    = Lexer.Get();

                if (finalToken != null)
                {
                    throw new FormatException(string.Format(CultureInfo.InvariantCulture, "Unexpected token {0} at position {1}!", finalToken.TokenType, finalPosition));
                }

                // Wrap the expression in a function
                Sle.Expression <Func <double, double> > functionExpression =
                    Sle.Expression.Lambda <Func <double, double> >(
                        expression,
                        Parameter ?? Sle.Expression.Parameter(typeof(double), "x"));

                // Compile the expression into a function
                Function = functionExpression.Compile();
            }