Ein Compiler ist ein spezielles Programm, das in einer bestimmten Programmiersprache geschriebene Anweisungen verarbeitet und in Maschinensprache oder „Code“ umwandelt, den der Prozessor eines Computers verwendet. Normalerweise schreibt ein Programmierer Sprachanweisungen in einer Sprache wie Pascal oder C Zeile für Zeile mit einem Editor. Die erstellte Datei enthält die so genannten Source-Anweisungen. Der Programmierer führt dann den entsprechenden Sprachcompiler aus und gibt den Namen der Datei an, die die Quellanweisungen enthält.
Beim Ausführen (running) analysiert (oder analysiert) der Compiler zuerst alle Sprachanweisungen syntaktisch nacheinander und erstellt dann in einer oder mehreren aufeinanderfolgenden Stufen oder „Pässen“ den Ausgabecode, um sicherzustellen, dass Anweisungen, die sich auf andere Anweisungen beziehen, im endgültigen Code korrekt referenziert werden. Traditionell wurde die Ausgabe der Kompilierung als Objektcode oder manchmal als Objektmodul bezeichnet . (Beachten Sie, dass der Begriff „Objekt“ hier nicht mit objektorientierter Programmierung zusammenhängt.) Der Objektcode ist Maschinencode, mit dem der Prozessor jeweils eine Anweisung ausführen kann.Die Programmiersprache Java, eine Sprache, die in der objektorientierten Programmierung verwendet wird, führte die Möglichkeit ein, Ausgaben (Bytecode genannt ) zu kompilieren, die auf jeder Computersystemplattform ausgeführt werden können, für die eine Java Virtual Machine oder ein Bytecode-Interpreter bereitgestellt wird, um den Bytecode in Anweisungen umzuwandeln, die vom eigentlichen Hardwareprozessor ausgeführt werden können. Mit dieser virtuellen Maschine kann der Bytecode optional auf der Ausführungsplattform durch einen Just-in-Time-Compiler neu kompiliert werden. (Siehe auch: Java Compiler)
Traditionell war in einigen Betriebssystemen nach der Kompilierung ein zusätzlicher Schritt erforderlich – das Auflösen der relativen Position von Anweisungen und Daten, wenn mehr als ein Objektmodul gleichzeitig ausgeführt werden sollte und sie sich gegenseitig referenzierten Befehlssequenzen oder Daten. Dieser Prozess wurde manchmal Linkage Editing genannt und die Ausgabe als Lademodul bezeichnet.
Ein Compiler arbeitet mit sogenannten 3GL- und übergeordneten Sprachen. Ein Assembler arbeitet an Programmen, die mit der Assemblersprache eines Prozessors geschrieben wurden.