1. Lexical analysis - converting source code to fixed length binary tokens
2. Pre-processing - including library code for classes within the source code
3. Syntax analysis - checks that all statements follow the rules of grammar
4. Semantic analysis - checking variables are declared before they are used in the program
5. Code generation - creating the machine code from source code
6. Code optimisation - making the executable program as efficient as possible