EMZETT.
Login

Compiler

Kurz: Ein Compiler übersetzt den gesamten Quelltext einer Programmiersprache in eine andere Form – meist in Maschinencode oder Bytecode –, bevor das Programm läuft.

Genauer: Dabei prüft er Syntax und (bei statisch typisierten Sprachen) Typen und meldet Fehler schon vor dem Start. Das Ergebnis läuft anschließend ohne weitere Übersetzung. Compiler-Sprachen sind unter anderem C, C++, Rust, Go, Pascal und Fortran; Java und C# kompilieren zu Bytecode (Bytecode), den eine virtuelle Maschine ausführt.

Phasen eines Compilers

Im Detail

Phasen

  1. Lexikalische Analyse: Zerlegt den Text in Token (Schlüsselwörter, Namen, Zahlen).
  2. Syntaxanalyse (Parser): Baut aus den Token einen Syntaxbaum (Baum) und meldet Syntaxfehler.
  3. Semantische Analyse: Prüft Typen, Namen und Regeln.
  4. Optimierung: Vereinfacht den Code (Inlining, Schleifenoptimierung, Entfernen toten Codes).
  5. Code-Erzeugung: Erzeugt Maschinencode oder Bytecode.
  6. Linken: Verbindet die Teile und Bibliotheken zur ausführbaren Datei.
gcc hallo.c -o hallo      # kompilieren und linken
./hallo                   # ausführen
gcc -O2 hallo.c -o hallo  # mit Optimierungen
gcc -S hallo.c            # nur bis Assembler: Datei hallo.s

Bekannte Compiler

GCC und Clang/LLVM (C, C++, Rust, Swift, Zig u. a.), javac (Java), Roslyn (C#), rustc, go build, GHC (Haskell). Ein Transpiler übersetzt zwischen Hochsprachen (TypeScript → JavaScript). Dem gegenüber steht der Interpreter; Mischformen beschreibt JIT-Compilation.

Siehe auch den Vergleich im Artikel Kompiliert oder interpretiert?.

Siehe auch: Interpreter, Bytecode, JIT-Compiler, Quellcode