private static double Brackets(string expression, ref int index)
{
bool isMinus = false;
double value;
if((index == 0 || expression[index - 1] == '(' || expression[index - 1] == '[' || expression[index - 1] == '|') && (expression[index] == '+' || expression[index] == '-'))
{
isMinus = expression[index] == '-';
++index;
}
if(expression[index] == '(')
{
++index;
double result = Sum(expression, ref index);
if(index == expression.Length || expression[index] != ')')
{
throw new ArgumentException("Brackets");
}
++index;
value = result;
}
else if(expression[index] == '[')
{
++index;
double result = Sum(expression, ref index);
if(index == expression.Length || expression[index] != ']')
{
throw new ArgumentException("Brackets");
}
++index;
value = Math.Floor(result);
}
else if(expression[index] == '|')
{
++index;
double result = Sum(expression, ref index);
if(index == expression.Length || expression[index] != '|')
{
throw new ArgumentException("Brackets");
}
++index;
value = Math.Abs(result);
}
else
{
value = Number(expression, ref index);
}
return isMinus ? -value : value;
}