Ein Compiler ist ein Programm, das Quellcode in Objektcode übersetzt, der von einer bestimmten Zentraleinheit (CPU) verstanden wird. Das Übersetzen von Quellcode in Objektcode wird als Kompilierung bezeichnet. Die Kompilierung wird normalerweise für Programme verwendet, die Quellcode von einer höheren Programmiersprache (z. B. C ++) in eine niedrigere Programmiersprache (z. B. Maschinencode) übersetzen, um ein ausführbares Programm zu erstellen. Wenn eine Sprache auf niedriger Ebene in eine Sprache auf hoher Ebene konvertiert wird, wird der Prozess ebenfalls als Dekompilierung bezeichnet.
Phasen eines Compilers
Ein Compiler führt seine Prozesse in Phasen aus, um ein effizientes Design und korrekte Transformationen der Quelleneingabe zur Zielausgabe zu fördern. Die Phasen sind wie folgt:
1. Lexikalischer Analysator
Es wird auch als Scanner bezeichnet. Der Compiler konvertiert die im Quellcode angezeigte Zeichenfolge in eine Reihe von Zeichenfolgen, die als Token bezeichnet werden. Diese Token werden durch reguläre Ausdrücke definiert, die vom lexikalischen Analysator verstanden werden. Außerdem werden lexikalische Fehler, Kommentare und Leerzeichen entfernt.
2. Syntaxanalysator
Der Syntaxanalysator erstellt den Analysebaum, mit dem die Mehrdeutigkeit der angegebenen Grammatik überprüft wird. Der Syntaxanalysator nimmt alle Token einzeln und verwendet die kontextfreie Grammatik, um den Analysebaum zu erstellen. Ein Syntaxfehler kann erkannt werden, wenn die Eingabe nicht der Grammatik entspricht.
3. Semantic Analyzer
Der semantische Analysator überprüft den vom Syntaxanalysator erstellten Analysebaum. Es werden auch Typprüfungen, Etikettenprüfungen und Flusskontrollprüfungen durchgeführt.
4. Intermediate Code Generator
Der Zwischencodegenerator erzeugt Zwischencode zur Ausführung durch eine Maschine. Zwischencode wird mithilfe der letzten beiden plattformabhängigen Phasen in Maschinensprache konvertiert.
5. Code Optimizer
Der Code-Optimierer transformiert den Code so, dass er weniger Ressourcen verbraucht und mehr Geschwindigkeit erzeugt. Die Bedeutung des zu transformierenden Codes wird nicht geändert.
6. Zielcode-Generator
Dies ist der letzte Schritt in der letzten Phase der Kompilierung. Der Zielcodegenerator schreibt Code, den eine Maschine verstehen kann, und registriert auch Zuordnung, Anweisung und Auswahl. Die Ausgabe ist abhängig vom Assembler-Typ. Der optimierte Code wird dann in Maschinencode umgewandelt und bildet die Eingabe für den Linker und den Lader.
Arten von Compilern
Es gibt viele Arten von Compilern, wie zum Beispiel:
- Cross Compiler: Das kompilierte Programm wird auf einem Computer ausgeführt, der ein anderes Betriebssystem oder eine andere CPU hat als der Compiler. Es ist in der Lage, Code für eine andere Plattform als die zu erstellen, auf der der Compiler ausgeführt wird
- Quelle-zu-Quelle-Compiler: Auch als Transcompiler bekannt, übersetzt er in einer Programmiersprache geschriebenen Quellcode in Quellcode einer anderen Programmiersprache.
- Just-in-Time-Compiler (JIT): Ein Compiler, der die Kompilierung bis zur Laufzeit verzögert. Dieser Compiler wird für Sprachen wie Python und JavaScript verwendet und läuft im Allgemeinen in einem Interpreter.