private static Expression GenerateOperation(ExpressionEnumerables.operations operation, Expression left, Expression right)
        {
            Expression exp = null;

            switch (operation)
            {
            case (ExpressionEnumerables.operations.SUM):
                exp = Expression.Add(left, right);
                break;

            case (ExpressionEnumerables.operations.SUBTRACT):
                exp = Expression.Subtract(left, right);
                break;

            case (ExpressionEnumerables.operations.MULTIPLY):
                exp = Expression.Multiply(left, right);
                break;

            case (ExpressionEnumerables.operations.DIVIDE):
                exp = Expression.Divide(left, right);
                break;

            case (ExpressionEnumerables.operations.NEGATE):
                exp = Expression.Negate(right);
                break;

            case (ExpressionEnumerables.operations.POWER):
                exp = Expression.Power(left, right);
                break;

            default:
                break;
            }
            return(exp);
        }
        private static string GenerateExpression(ExpressionEnumerables.operations operation, string input, List <ComplexExpression> expressionList, List <ParameterExpression> parameters)
        {
            var  expReg    = string.Empty;
            char splitChar = '+';

            switch (operation)
            {
            case (ExpressionEnumerables.operations.MULTIPLY):
                expReg    = "(\\w+\\s*[*]\\s*\\w+)";
                splitChar = '*'; break;

            case (ExpressionEnumerables.operations.SUM):
                expReg    = "(\\w+\\s*[+]\\s*\\w+)";
                splitChar = '+'; break;

            case (ExpressionEnumerables.operations.SUBTRACT):
                expReg    = "(\\w+\\s*[-]\\s*\\w+)";
                splitChar = '-'; break;

            case (ExpressionEnumerables.operations.NEGATE):
                expReg    = "(?:[(+*/ -)])([-]\\w+)";
                splitChar = '-'; break;

            case (ExpressionEnumerables.operations.DIVIDE):
                expReg    = "(\\w+\\s*[/]\\s*\\w+)";
                splitChar = '/'; break;

            case (ExpressionEnumerables.operations.POWER):
                expReg    = "(\\w+\\s*[\\^]\\s*\\w+)";
                splitChar = '^'; break;
            }
            var regex   = new Regex(expReg);
            var matches = regex.Matches(input);

            while (matches.Count > 0)
            {
                foreach (var match in matches)
                {
                    var    item       = ((Match)match).Groups[1].Value;
                    var    values     = item.Split(splitChar);
                    var    expression = GenerateOperation(operation, CheckParameter(values[0], parameters, expressionList), CheckParameter(values[1], parameters, expressionList));
                    string varName    = "internal_val_" + expressionList.Count().ToString();
                    expressionList.Add(new ComplexExpression()
                    {
                        Expression = expression, VariableName = varName
                    });
                    input = input.Replace(item, varName);
                }
                matches = regex.Matches(input);
            }
            return(input);
        }