Ein Compiler ist ein Systemprogramm, das ein in einer höheren Programmiersprache geschriebenes Quellprogramm in ein Maschinenprogramm übersetzt. Er ist damit ein zentraler Mechanismus, der Quellcode überhaupt erst ausführbar macht.
Auch genannt: Übersetzer
Menschen schreiben Programme in Programmiersprachen, die für sie verständlich sind, Prozessoren verarbeiten aber nur Maschinenbefehle. Ein Compiler überbrückt diese Lücke: Er liest den Quellcode vollständig ein und erzeugt daraus ein eigenständiges Programm in Maschinensprache, das anschließend direkt ausgeführt werden kann.
Die Übersetzung läuft in mehreren Phasen ab. Zunächst zerlegt ein Scanner den Quelltext in einzelne Bestandteile (Token), ein Parser prüft anschließend, ob diese Token eine gültige Struktur gemäß der Programmiersprache ergeben. In der semantischen Analyse wird geprüft, ob die Bedeutung korrekt ist, etwa ob Datentypen zusammenpassen. Daraus entsteht ein Zwischencode, der in weiteren Schritten optimiert und schließlich in den Maschinencode der Zielplattform übersetzt wird. Im Unterschied dazu übersetzt ein Interpreter Programmcode nicht vorab vollständig, sondern führt ihn Zeile für Zeile direkt aus.
Ein in einer höheren Programmiersprache geschriebenes Programm wird vor der Auslieferung einmal vollständig durch einen Compiler übersetzt. Das Ergebnis ist eine ausführbare Datei, die auf der Zielplattform direkt läuft, ohne dass der ursprüngliche Quellcode zur Laufzeit noch benötigt wird.
Compiler werden bei der Entwicklung von Anwendungssoftware, Systemsoftware und eingebetteten Programmen eingesetzt, immer dann, wenn Quellcode in eine ausführbare Form überführt werden muss. Sie sind damit ein unverzichtbarer Bestandteil praktisch jeder professionellen Softwareentwicklung, unabhängig von der eingesetzten Programmiersprache oder Zielplattform.
Ein Compiler übersetzt Code, prüft aber nicht dessen fachliche Richtigkeit – ein Programm kann fehlerfrei kompilieren und trotzdem falsches Verhalten zeigen. Häufig wird zudem übersehen, dass Compiler und Interpreter unterschiedliche Ausführungsmodelle darstellen: Manche Programmiersprachen kombinieren beide Ansätze, etwa indem Quellcode zunächst in einen Zwischencode übersetzt wird, der dann interpretiert oder zur Laufzeit weiter übersetzt wird.
Nicht verwechseln mit dem Betriebssystem: Dieses stellt die Laufzeitumgebung bereit, in der Programme ausgeführt werden, übersetzt aber selbst keinen Quellcode. Ebenfalls abzugrenzen ist Firmware: Sie ist gerätenahe Software, die häufig mit einem Compiler erzeugt wurde, aber ein fertiges Produkt und kein Übersetzungswerkzeug ist. Auch Git ist ein eigenständiger Begriff: Es verwaltet Versionen von Quellcode, hat mit dessen Übersetzung in Maschinencode aber nichts zu tun.
Eng verbunden sind Werkzeuge und Prozesse rund um die Erstellung und Qualitätssicherung von Programmen, die auf übersetztem Code aufbauen.