public bool CheckExpression(IExpression expression)
        {
            int count = 0;

            foreach (var symbol in expression.Expression)
            {
                if ("()*/-+^".Contains(symbol.ToString()))
                {
                    count++;
                }
            }
            if (count > 50)
            {
                return(true);
            }
            var Elements = new List <PrimitiveElement>();

            Elements.AddRange(expression.Arguments
                              .ConvertAll(a => new Argument($"{a.Name} = {a.Value}")));
            Elements.AddRange(UserFunctions.ConvertAll(f => new Function(f.GetExpression)));
            Elements.AddRange(UserConstants.ConvertAll(c => new Argument(c.Name, c.Value)));
            Expression test = new Expression(expression.Expression, Elements.ToArray());

            return(!test.checkSyntax());
        }
        public double Calculate(string expression)
        {
            if (CheckExpression(expression))
            {
                throw new ArgumentException();
            }
            var Elements = new List <PrimitiveElement>();

            Elements.AddRange(UserFunctions.ConvertAll(f => new Function(f.GetExpression)));
            Elements.AddRange(UserConstants.ConvertAll(c => new Argument(c.Name, c.Value)));
            Expression exp = new Expression(expression, Elements.ToArray());

            return(exp.calculate());
        }