public Expression3 expression(boolean isExpressionInBrackets) throws ParsingException {
        Expression3 left = summand();
        while (true) {
            if (tryConsume("+"))
                left = new BinaryOperation<T>(left, summand(), arithmetics.get("+"));
            else if (tryConsume("-"))
                left = new BinaryOperation<T>(left, summand(), arithmetics.get("-"));
            else if (tryConsume(")")) {
                if (!isExpressionInBrackets)
                    throw new NoBracketException(source, currentIndex, false);
                cancelSpacesConsumption();
                currentIndex--;
                break;
            } else if (currentIndex < source.length() - 1)
                throw new IncorrectPositionException(source, currentIndex);
            else
                break;
        }

        return left;
    }