Un compilateur est un programme spécial qui traite des instructions écrites dans un langage de programmation particulier et les transforme en langage machine ou « code » utilisé par le processeur d’un ordinateur. En règle générale, un programmeur écrit des instructions de langage dans un langage tel que Pascal ou C une ligne à la fois à l’aide d’un éditeur. Le fichier créé contient ce qu’on appelle les instructions source. Le programmeur exécute ensuite le compilateur de langage approprié, en spécifiant le nom du fichier contenant les instructions source.
Lors de l’exécution (exécution), le compilateur analyse d’abord (ou analyse) toutes les instructions de langage syntaxiquement les unes après les autres, puis, en une ou plusieurs étapes successives ou « passes », construit le code de sortie, en s’assurant que les instructions qui font référence à d’autres instructions sont correctement référencées dans le code final. Traditionnellement, la sortie de la compilation a été appelée code objet ou parfois module objet. (Notez que le terme « objet » ici n’est pas lié à la programmation orientée objet.) Le code objet est un code machine que le processeur peut exécuter une instruction à la fois.
Le langage de programmation Java, un langage utilisé dans la programmation orientée objet, a introduit la possibilité de compiler une sortie (appelée bytecode) pouvant s’exécuter sur n’importe quelle plate-forme de système informatique pour laquelle une machine virtuelle Java ou un interpréteur de bytecode est fourni pour convertir le bytecode en instructions pouvant être exécutées par le processeur matériel réel. À l’aide de cette machine virtuelle, le bytecode peut éventuellement être recompilé sur la plate-forme d’exécution par un compilateur juste à temps. (Voir aussi: Compilateur Java)
Traditionnellement, dans certains systèmes d’exploitation, une étape supplémentaire était nécessaire après la compilation – celle de résoudre l’emplacement relatif des instructions et des données lorsque plus d’un module objet devait être exécuté en même temps et qu’ils faisaient référence les uns aux autres aux séquences d’instructions ou aux données. Ce processus était parfois appelé édition de liaison et la sortie connue sous le nom de module de charge.
Un compilateur fonctionne avec ce qu’on appelle parfois 3GL et des langages de niveau supérieur. Un assembleur travaille sur des programmes écrits en utilisant le langage assembleur d’un processeur.