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.
Im Detail
Phasen
- Lexikalische Analyse: Zerlegt den Text in Token (Schlüsselwörter, Namen, Zahlen).
- Syntaxanalyse (Parser): Baut aus den Token einen Syntaxbaum (Baum) und meldet Syntaxfehler.
- Semantische Analyse: Prüft Typen, Namen und Regeln.
- Optimierung: Vereinfacht den Code (Inlining, Schleifenoptimierung, Entfernen toten Codes).
- Code-Erzeugung: Erzeugt Maschinencode oder Bytecode.
- 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.sBekannte 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