Used when high-level programming languages are converted into machine code, ready to be executed by the CPU. There are 4 stages of complication
Lexical analysis
Comments and unneeded spaces are removed
Keywords, constants and identifiers are replaced by 'tokens'
A symbol table is created which holds the addresses of variables, labels and subroutines
Syntax analysis
Tokens are checked to see if they match the spelling and grammar expected, using standard language definitions. This is done by parsing each token to determine if it uses the correct syntax for the programming language
If syntax errors are found, error messages are produced
Semantic analysis
Variables are checked to ensure they have been properly declared and used
Variables are checked to ensure they are of the correct data type, e.g. real values are not being assigned to integers
Operations are checked to ensure they are legal for the type of variable being used, e.g. you would not try to store the result of a division operation as an integer
Code generation
Machine code is generated
Code optimisation may be employed to make it more efficient/faster/less resource intense.