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()); }