Compiler Design - Phasen des Compilers

Der Kompilierungsprozess ist eine Folge verschiedener Phasen. Jede Phase nimmt Eingaben von ihrer vorherigen Stufe entgegen, hat eine eigene Darstellung des Quellprogramms und leitet ihre Ausgabe an die nächste Phase des Compilers weiter. Lassen Sie uns die Phasen eines Compilers verstehen.

Lexikalische Analyse

Die erste Phase des Scanners arbeitet als Textscanner. Diese Phase scannt den Quellcode als Zeichenstrom und konvertiert ihn in aussagekräftige Lexeme. Der lexikalische Analysator repräsentiert diese Lexeme in Form von Token als:

<token-name, attribute-value>

Syntaxanalyse

Die nächste Phase heißt Syntaxanalyse oder parsing. Es verwendet das durch lexikalische Analyse erzeugte Token als Eingabe und generiert einen Analysebaum (oder Syntaxbaum). In dieser Phase werden Token-Anordnungen anhand der Quellcode-Grammatik überprüft, dh der Parser prüft, ob der von den Token erzeugte Ausdruck syntaktisch korrekt ist.

Semantische Analyse

Die semantische Analyse prüft, ob der erstellte Analysebaum den Sprachregeln entspricht. Die Zuweisung von Werten erfolgt beispielsweise zwischen kompatiblen Datentypen und das Hinzufügen einer Zeichenfolge zu einer Ganzzahl. Außerdem verfolgt der semantische Analysator die Bezeichner, ihre Typen und Ausdrücke. ob Bezeichner vor der Verwendung deklariert werden oder nicht usw. Der semantische Analysator erzeugt einen mit Anmerkungen versehenen Syntaxbaum als Ausgabe.

Zwischencode-Generierung

Nach der semantischen Analyse generiert der Compiler einen Zwischencode des Quellcodes für den Zielcomputer. Es repräsentiert ein Programm für eine abstrakte Maschine. Es liegt zwischen der Hochsprache und der Maschinensprache. Dieser Zwischencode sollte so generiert werden, dass er leichter in den Zielmaschinencode übersetzt werden kann.

Code-Optimierung

In der nächsten Phase wird der Zwischencode Code optimiert. Die Optimierung kann als etwas angesehen werden, das unnötige Codezeilen entfernt und die Reihenfolge der Anweisungen anordnet, um die Programmausführung zu beschleunigen, ohne Ressourcen (CPU, Speicher) zu verschwenden.

Codegenerierung

In dieser Phase nimmt der Codegenerator die optimierte Darstellung des Zwischencodes und ordnet ihn der Zielmaschinensprache zu. Der Codegenerator übersetzt den Zwischencode in eine Folge von (allgemein) umsetzbarem Maschinencode. Die Reihenfolge der Anweisungen des Maschinencodes führt die Aufgabe wie der Zwischencode aus.

Symboltabelle

Es ist eine Datenstruktur, die in allen Phasen eines Compilers gepflegt wird. Hier werden alle Namen der Kennung sowie deren Typen gespeichert. Die Symboltabelle erleichtert es dem Compiler, den Bezeichnerdatensatz schnell zu durchsuchen und abzurufen. Die Symboltabelle wird auch für die Bereichsverwaltung verwendet.