It is a software tool that converts a high level language to a machine understandable language i.e. the binary language. The compiler sometimes has an in-built assembler. The compiler converts the high level language like 'C' or "C++" etc into assembly language of the required microprocessor / microcontroller and then to the machine language. While in some compilers the assembler is separately required. Thus in these type of compilers the conversion is done only from the high level language to the assembly language, then a separate assembler is used to convert the assembly language to the machine or binary language.
The cross compiler is a special type of compiler. This is a software tool that converts the high level language program to the machine or binary language of another microprocessor / microcontroller which is not the same platform i.e. may be the compiler software runs on the Pentium based system and the conversion of a "c" program is done to its corresponding machine language of the 8051 microcontroller. Such a compiler that performs cross platform compilation is called as cross compiler.
Integrated Development Environment (IDE):
This is a combination of multiple tools that are required to do the programming. For example the editor, pre-processor, compiler, linker and loader is a set of all the tools required to do the programming. The editor is used to type and edit the program. The pre-processor is mainly used to include the header files with certain in-built functions required in the program. The compiler as discussed converts the high level program into the machine language. The linker links all the function calls and the branches while the loader loads and gets the program executed by the processor.
This is a hardware-cum-software tool. This tool accepts the program, downloads it into the actual circuit, checks its functioning and gives the result according to the actual result in the circuit. The speciality is that it gives the real time performance of the system, as against simulator which gives the actual result but without considering the actual timings.