A program that translates a high-level language program, source code, into a computer’s machine code or some other low-level language. Generally each high-level language instruction generates several machine-code instructions. It produces an independent program which can be run.