| Compiler | |||||
|
Ein Compiler (oder Übersetzer) ist eine Software, die einen Quelltext in ein lauffähiges Programm übersetzt. Die Übersetzung erfolgt meist von einer strukturierten höheren Programmiersprache in eine semantisch äquivalente Zielsprache wie Assembler, Bytecode oder Maschinensprache. Die Kompilierung erfolgt meist in 3 Phasen: 1. Lexikalische Analyse: Durchsuchen des Quelltextes und Zerteilen in Tokens verschiedener Klassen wie: Schlüsselwörter, Operatoren, Bezeichner, Zahlen und Formulierungen. Dieser Teil des Compilers wird auch als Scanner oder Lexer bezeichnet. 2. Syntaktische Analyse und 3. Semantische Analyse: Validierung der Befehle, der Variablen, der Datentypen und der korrekten Beziehung der Befehle untereinander. Codegenerierung: Auswertung der Datenstrukturen aus Phase 2 und Erzeugung des korrekten Maschinencodes (Bytecode, Assemblercode). Einige Compiler erzeugen einen Zwischencode. Dieser ist schon maschinennah. Auf diesem Zwischencode werden z. B. Optimierungen durchgeführt, wenn mehrere Zielplattformen unterstützt werden. Wenn ein Compiler den Code für die Plattform, auf der er selber ausgeführt wird, erzeugt, so spricht man von einem Native Compiler. Ansonsten handelt es sich um einen Cross-Compiler. Ein Single-pass Compiler erzeugt den Zielcode in einem Durchlauf. Ein Multi-pass Compiler benötigt dafür mehrere Zwischenschritte und kann daher auch weitergehendere Optimierungen durchführen. Wenn ein Compiler aus dem Quellcode einer Programmiersprache den Quellcode einer anderen erzeugt (z. B. C in C++) so spricht man von einem Transcompiler. Ein Compiler-Compiler ist in der Lage, einen Compiler oder Compilerteile zu erzeugen. Der Compreter erzeugt aus dem Quellcode zunächst einen Zwischencode, welcher dann nicht in einen fertigen, lauffähigen Bytecode übersetzt wird, sondern zur Laufzeit interpretiert wird. Bekannte Compiler-Sprachen sind COBOL, Fortran, PASCAL, C, C++ oder Java. |
|||||
| Siehe auch: Assembler Byte Interpreter Parser Linker Lexer Programmiersprache-C JIT-Compiler C-Plus-Plus Java | |||||