A framework is a set of tools additional to a programming language, and to the respective compiler. Sometimes it is mandatory; sometime it is optional, and assists the development of an application.
One of the most common mistakes in Software Development (Programming), is that developing an application, it is restricted only to the usage of a text editor, a programming language, and an existing compiler for the given programming language.
Although, these are the basic tools required for software development, the complexity of this discipline, has increase exponentially, requiring more additional tools, in order to "get the job done".
The most common tool, is the usage of libraries or modules, for avoiding recoding programming tasks, yet restricted to a domain. Some of these libraries, are included, de facto, with the compiler, other may be supplied by third party.
Another important tool, to be consider as part of a framework, is an application or set of applications that allow to integrate the other tools, commonly known as Integrated Development Environment or Integrated Programming Environment. Started from a simple text / code editor, now includes several other options to access other tools, that in general, share the same purpose, develop an application.
Some of these tools include applications or application modules that perform tasks visually, instead of the text approach, that eventually generate textual code. Other tools simply allow to interact to other programs, and exchange data for a particular purpose. Database connectivity, storing backup in a Control Version System, modules for images and resources in an application, are example of additional tools.