Aufbau

Eine grobe Skizze wie ein Compiler Prinzipiell funktioniert:

QuellTextEnthält den Code in einer Sprache oder Hochsprache als Text.
FrontendDiese Compilerteile gehören zur Code-Analyse. Es können an verschiedenen stellen Codeoptimierungen durchgeführt werden um den Ausführbaren Code zu beschleunigen zB kann X ^ 2 durch X * X ersetzt werden da Multiplikationen viel schneller ausgeführt werden als Potenzen.
Scanner, LexerSchneidet den Code in Worte (Tokens) auf, und führt bereits eine einfache Syntaxprüfung durch.
Parser, SyntaxanalyseAnalysiert die Tokens und Ermittelt die Bedeutung jedes Wortes.
Dabei wird eine gründliche Syntaxprüfung durchgeführt, und es werden Codebäume erzeugt und eine Namensliste (Symboltable) erstellt welche Namen Typen und Namensräume (Namespace) enthält.
Zwischencode GeneratorErstellt aus dem Codebaum ein vorcompilierten Code vorzugsweise als eine Liste welcher bereits die gesamte Codestruktur enthält. Dieser Code ist interpretierbar ist aber noch nicht auf eine bestimmte Maschine compiliert. Ein Interpreter könnte den gleichen Zwischencode für verschiedene Hardware ausführen, da die Maschinencodes im Interpreter enthalten sind und nicht im Zwischencode.
BackendDiese Compilerteile gehören zur Code-Generierung. Auch hier lassen sich Optimierungen durchführen durch Berücksichtigung der Lade- und Laufzeiten von Prozessorbefehlen.
Maschinencode GeneratorEs wird ein Maschinencode erzeugt der von der Hardware ausgeführt werden kann. Vorzugsweise ist das ein Assembler Code (ASM) der die Prozessorbefehle als Text darstellt (Mnemonic).
ASM CompilerCompiliert den ASM Code in ein Maschinenverständliches Binärformat um zB. OBJ Dateien. Für jedes Modul wird eine eigene OBJ Datei erzeugt.
LinkerDer Linker verbindet die OBJ Dateien dann zu einem Ausführbaren Binärformat welches vom Betriebssystem ausgeführt werden kann zB. EXE/DLL.

Compiler/Aufbau.txt · Zuletzt geändert: 2009/02/15 16:03 (Externe Bearbeitung)