Schlagworte

Compiler

Der Compiler erzeugt aus Quellcode ausführbaren Maschinencode. Die Sprachdefinition, d.h. die Syntax des Quellcodes, wird mittels EBNF festgelegt. Die bekannteste Compilersprache ist C.

Ein Compiler besteht aus den folgenden Komponenten:

GCC Schema
  • Präprozessor:
    • Einbinden von Quellcode Dateien
    • Textuelle Ersetzungen und Macros
    • Bedingte Compilation
  • Lexikalische Analyse: Zerlegung des Quellcodes in Schlüsselworte (token)
  • Parser: Ãœberprüfung des zerlegten Quellcodes auf sprachliche Korrektheit (Ãœbereinstimmung mit der EBNF der jeweiligen Programmiersprache)
  • Code Generator:
    • Ãœbersetzung des geparsten Quellcodes in eine Maschinencode-ähnliche Zwischensprache (anhand des EBNF Ableitungsbaums)
    • Optimierung der Zwischensprache
    • Ãœbersetzung der Zwischensprache in die Maschinensprache der jeweiligen Plattform
  • Linker: Zusammenfassung von übersetzten Modulen in ein ablauffähiges Programm

Komponenten, die nicht Bestandteil des Compilers, aber dennoch unverzichtbar und daher Bestandteil der Entwicklungsumgebung sind:

  • Editor: Programm zum bequemen Erstellen von Quelltexten
  • Debugger: Programm zur Fehlerauffindung

Der Quellcode ist (im Optimalfall) unabhängig von Plattform und Betriebssystem, wobei jedoch der Compiler Maschinencode für eine bestimmte Plattform erzeugt, d.h. im Normalfall für diejenige, auf der er selber läuft.

Der Compiler selber ist ein Programm, das als Quellcode vorliegt. Beim Übersetzen des Compilers in Maschinencode hat man ein klassisches Henne-Ei Problem, da ohne ein bereits übersetztes Programm man keinen Compiler hat, der sich selbst übersetzen könnte. Die Lösung dieses Problems ist unter dem Begriff Bootstrapping bekannt.

Erzeugt ein Compiler Maschinencode für eine andere Plattform als derjenigen, auf der er läuft, nennt man ihn Cross-Compiler. Mit Hilfe eines solchen Compilers ist das Henne-Ei Problem lösbar, wenn der Cross-Compiler den Compiler-Quellcode einmalig für die andere Zielplattform übersetzt. Danach kann sich der Compiler auf dieser Plattform selbst compilieren, sich also selbst an den Haaren aus dem Sumpf ziehen (Bootstrapping).

Der bekannteste Compiler ist der gcc (aus der GNU Compiler Collection). Er ist frei erhältlich (Open-Source, GPL Lizenz) und integraler Bestandteil von Linux. Siehe auch das GCC Tutorial.

Ein anderer bekannter “Compiler” ist der MSVC von Micro$$$oft, über den man nicht viel sagen kann, ausser dass er nervt. Der integrierte Debugger ist allerdings exzellent.

Options: