There are interpreters and compilers to translate a high level language into machine code.

Interpreters directly translate the source into activities (like groups of m/c instructions) and execute them. Basic, for example executes a line and then forgets it executed it, making it slow. Python interpreter translates the entire source code into an intermediate language that is then executed by a much faster interpreter.
Interpreters have an advantage that transition from writing to interpretation is almost immediate. And the source code is always available, so the interpreter can be much more specific when locating errors. Ease of interaction and rapid development are advantages.
However, interpreters are severely limited when building large applications, with python as an exception.
- The interpreter must always be in memory to execute the code
- The source code should always be available all at once.
This causes several limitations.
Other examples of interpreted languages are Perl, Javascript, PHP etc

Compilers convert the source into assembly language or machine instructions. Eventually, it generates files containing m/c code. There are several steps involved. In most compilers different parts of the code can be compiled separately and linked together by a linker. Thus one can build separate libraries independently and use them later. Compilers also provide good debugging features, with some source level powerful debuggers to show exactly what is happening in the program by tracing its progress through execution. The steps involved in C/C++ compilation are
-Preprocessor: Preprocessor is a simple program that finds patterns in a source code and replaces it with other text that the programmer has defined. It helps in reducing code size and increasing understandability of the source. The pre-processed code is written to an intermediate file.
-Compilation 1st pass: The compilation usually happens in two phases. In the first phase, the compiler breaks the source into smaller units and organizes them in structures/trees. For ex, the expression A+B is broken into A, +, B and each is stored as leaves of the tree.
-Compilation Optional Global optimizer: It is run sometimes between first and second to produce faster smaller code.
-Compilation 2nd pass: In the second pass the compiler walks through the pass tree to generate code for the nodes of the tree. If the code is assembly then the assembler has to be run. In both cases the output is an object (goal) file. A peephole optimizer is sometimes run to eliminate redundant assembly code.

Linker combines the object modules into an executable that can then be loaded into memory and run by the Operating System. The linker looks for all the references that were made from one object module to another and resolves them. It makes sure that all the external functions that we claimed during compilation, actually exist. Else we get a Linker error. The linker also adds a special module to enable startup activities. The linker can search through special files called libraries to resolve references. A library contains a collection of object modules in a single file. These libraries are created and maintained by a program called Librarian.
The compiler does static type checking to make sure that the types are not violated. Dynamic type checking is also possible in C++, but static type checking is important for higher execution speed. Separate compilation of subprograms or functions is possible by placing them in separate files.
The compiler allocates storage for identifiers at the point of definition. For a variable, the compiler determines how big the variable is and allocates memory to hold the data for that variable. For a function, the compiler generates code which ends up occupying memory space. We can declare functions and variables in any different places, but there should be only one definition. This is called ODR(One definition Rule).
A detailed discussion of these can be found here:
http://www.antlr.org/wiki/display/ANTLR3/The+difference+between+compilers+and+interpreters
The link below discusses their characteristics very briefly
http://web.cs.wpi.edu/~gpollice/cs544-f05/CourseNotes/maps/Class1/Compilervs.Interpreter.html