Compiler übersetzen ein Quellprogramm als Ganzes und generieren daraus ein Objektprogramm. Es kann, wenn es nicht verändert werden soll, gespeichert und ohne nochmaliges Übersetzen beliebig oft abgearbeitet werden.
Die Übersetzung läuft in der Regel in mehreren Durchgängen (,,pass``) ab. Der erste Durchgang beinhaltet eine lexikalische Analyse auf der Ebene einzelner Wörter und eine Syntaxüberprüfung des Programms. Dabei werden die Anweisungen und die syntaktische Programmstruktur auf Zulässigkeit geprüft. Die Compiler geben Fehlermeldungen aus, die von einfachen Fehlercodes (,,error no. xxx in line yyy``) bis hin zu komfortablen Diagnosemeldungen mit Angabe der fehlerhaften Programmabschnitte reichen. In weiteren Durchgängen wird eine Tabelle für die Zuordnung von Namen zu Adressen (,,cross reference list``) erzeugt und das Programm in Objektcode übertragen. Hieran können sich Optimierungsläufe anschließen, in denen der Objektcode nach unterschiedlichen Gesichtspunkten (meist Programmausführungszeit -- ,,execution time``) und in verschiedenen Stufen optimiert wird.
Die Compilation lässt sich durch Optionen beim Compileraufruf oder durch spezielle Quellcodeanweisungen steuern. So kann der Ausdruck des Quellcodes, des Übersetzungsprotokolls (,,compiler listing``) der Fehlermeldungen, des Objektcodes, des Assemblercodes u.a. angefordert werden. Weitere Optionen sind das Einbinden von Quellprogrammen oder -programmteilen aus Bibliotheken in den Quelltext (,,include``) sowie bedingte Compilation.
Neben den Compilern gibt es die Interpreter. Sie gehen befehlsweise vor, indem sie jeweils einen Programmbefehl übersetzen und diesen unmittelbar abarbeiten. Interpretierendes übersetzen, wie es insbesondere von der Programmiersprache BASIC her bekannt ist, hat den Nachteil, dass das Programm bei jeder Ausführung erneut übersetzt werden muss und nicht optimiert werden kann. Von Vorteil ist jedoch die Möglichkeit des interaktiven und befehlsweisen Abarbeitens der Programme. Die Shell ist ein Interpreter, der die eingegebenen Befehle direkt übersetzt und ausführt.