Was ist ein Compiler-Design? Typen, Bauwerkzeuge, Beispiel
Was ist ein Compiler?
Ein Compiler ist ein Computerprogramm, das Ihnen hilft, in einer Hochsprache geschriebenen Quellcode in eine Maschinensprache auf niedriger Ebene umzuwandeln. Es รผbersetzt den in einer Programmiersprache geschriebenen Code in eine andere Sprache, ohne die Bedeutung des Codes zu รคndern. Der Compiler macht auรerdem den Endcode effizient, der hinsichtlich Ausfรผhrungszeit und Speicherplatz optimiert ist.
Der Kompilierungsprozess umfasst grundlegende รbersetzungsmechanismen und Fehlererkennung. Der Compilerprozess durchlรคuft am Frontend eine lexikalische, syntaktische und semantische Analyse sowie am Backend eine Codegenerierung und -optimierung.
Funktionen von Compilern
- Richtigkeit
- Geschwindigkeit der Kompilierung
- Behalten Sie die korrekte Bedeutung des Codes bei
- Die Geschwindigkeit des Zielcodes
- Erkennen Sie legale und illegale Programmkonstrukte
- Gute Fehlerberichterstattung/-behandlung
- Hilfe zum Code-Debuggen
Arten von Compilern
Im Folgenden sind die verschiedenen Compilertypen aufgefรผhrt:
- Single-Pass-Compiler
- Zwei-Pass-Compiler
- Multipass-Compiler
Single-Pass-Compiler

In einem einzigen Durchgang wird der Compiler-Quellcode direkt in Maschinencode umgewandelt. Zum Beispiel die Pascal-Sprache.
Zwei-Pass-Compiler

Der Two-Pass-Compiler ist in zwei Abschnitte unterteilt, nรคmlich:
- Frontend: Es ordnet den Rechtscode der Intermediate Representation (IR) zu.
- Backend: Es ordnet IR dem Zielcomputer zu
Die Two-Pass-Compiler-Methode vereinfacht auch den Retargeting-Prozess. Es ermรถglicht auch mehrere Frontends.
Multipass-Compiler

Der Multipass-Compiler verarbeitet den Quellcode oder Syntaxbaum eines Programms mehrmals. Es teilt ein groรes Programm in mehrere kleine Programme auf und verarbeitet diese. Es entwickelt mehrere Zwischencodes. Alle diese Multipass-Vorgรคnge verwenden die Ausgabe der vorherigen Phase als Eingabe. Es benรถtigt also weniger Speicher. Es ist auch als โWide Compilerโ bekannt.
Aufgaben des Compilers
Die Hauptaufgaben des Compilers sind:
- Zerlegt das Quellprogramm in Teile und legt ihnen eine grammatikalische Struktur auf
- Ermรถglicht Ihnen, aus der Zwischendarstellung das gewรผnschte Zielprogramm zu konstruieren und auch die Symboltabelle zu erstellen
- Kompiliert Quellcode und erkennt Fehler darin
- Verwalten Sie die Speicherung aller Variablen und Codes.
- Unterstรผtzung fรผr separate Kompilierung
- Lesen, analysieren Sie das gesamte Programm und รผbersetzen Sie es in semantisch รquivalente
- Je nach Maschinentyp wird der Quellcode in Objektcode รผbersetzt
Geschichte des Compilers
Ein wichtiger Meilenstein in der Geschichte des Compilers ist wie folgt:
- Das Wort โCompilerโ wurde erstmals in den frรผhen 1950er Jahren von Grace Murray Hopper verwendet.
- Der erste Compiler wurde von John Backum und seiner Gruppe zwischen 1954 und 1957 gebaut IBM.
- COBOL war der erste Programmiersprache das 1960 auf mehreren Plattformen kompiliert wurde
- Die Untersuchung der Scan- und Parsing-Probleme wurde in den 1960er und 1970er Jahren fortgesetzt, um eine vollstรคndige Lรถsung bereitzustellen.
Schritte fรผr Sprachverarbeitungssysteme
Bevor Sie das Konzept von Compilern kennenlernen, mรผssen Sie zunรคchst einige andere Tools verstehen, die mit Compilern arbeiten.

- Prรคprozessor: Der Prรคprozessor wird als Teil des Compilers betrachtet. Es ist ein Tool, das Eingaben fรผr den Compiler erzeugt. Es befasst sich mit Makroverarbeitung, Erweiterung, Spracherweiterung usw.
- Dolmetscher: Ein Interpreter ist wie ein Compiler, der Hochsprache in Maschinensprache auf niedriger Ebene รผbersetzt. Der Hauptunterschied zwischen beiden besteht darin, dass der Interpreter Code Zeile fรผr Zeile liest und transformiert. Der Compiler liest den gesamten Code auf einmal und erstellt den Maschinencode.
- Monteur: Es รผbersetzt Assemblercode in eine maschinenverstรคndliche Sprache. Das Ausgabeergebnis des Assemblers ist eine sogenannte Objektdatei, die eine Kombination aus Maschinenanweisungen und den zum Speichern dieser Anweisungen im Speicher erforderlichen Daten darstellt.
- Links: Der Linker hilft Ihnen, verschiedene Objektdateien zu verknรผpfen und zusammenzufรผhren, um eine ausfรผhrbare Datei zu erstellen. Alle diese Dateien wurden mรถglicherweise mit separaten Assemblern kompiliert. Die Hauptaufgabe eines Linkers besteht darin, in einem Programm nach aufgerufenen Modulen zu suchen und den Speicherort herauszufinden, in dem alle Module gespeichert sind.
- Radlader: Der Loader ist ein Teil des Betriebssystems, der die Aufgabe ausfรผhrt, ausfรผhrbare Dateien in den Speicher zu laden und auszufรผhren. Auรerdem wird die Grรถรe eines Programms berechnet, wodurch zusรคtzlicher Speicherplatz entsteht.
- Cross-Compiler: Ein Cross-Compiler im Compiler-Design ist eine Plattform, die Ihnen hilft, ausfรผhrbaren Code zu generieren.
- Source-to-Source-Compiler: Source-to-Source-Compiler ist ein Begriff, der verwendet wird, wenn der Quellcode einer Programmiersprache in den Quellcode einer anderen Sprache รผbersetzt wird.
Compiler-Konstruktionswerkzeuge
Tools zum Erstellen von Compilern wurden eingefรผhrt, als sich Computertechnologien auf der ganzen Welt verbreiteten. Sie werden auch als Compiler-Compiler, Compiler-Generatoren oder รbersetzer bezeichnet.
Diese Tools verwenden eine bestimmte Sprache oder einen bestimmten Algorithmus zum Angeben und Implementieren der Compiler-Komponente. Nachfolgend finden Sie Beispiele fรผr Compiler-Konstruktionstools.
- Scannergeneratoren: Dieses Tool verwendet regulรคre Ausdrรผcke als Eingabe. Zum Beispiel LEX fรผr Unix Operating-System.
- Syntaxgesteuerte รbersetzungsmaschinen: Diese Software-Tools Bieten Sie mithilfe des Analysebaums einen Zwischencode an. Ziel ist es, jedem Knoten des Analysebaums eine oder mehrere รbersetzungen zuzuordnen.
- Parsergeneratoren: Ein Parser-Generator verwendet eine Grammatik als Eingabe und generiert automatisch Quellcode, der Zeichenstrรถme mit Hilfe einer Grammatik analysieren kann.
- Automatische Codegeneratoren: Nimmt Zwischencode und wandelt ihn in Maschinensprache um.
- Datenfluss-Engines: Dieses Tool ist hilfreich fรผr die Codeoptimierung. Hier werden vom Benutzer Informationen bereitgestellt und der Zwischencode verglichen, um etwaige Beziehungen zu analysieren. Sie wird auch als Datenflussanalyse bezeichnet. Es hilft Ihnen herauszufinden, wie Werte von einem Teil des Programms an einen anderen Teil รผbertragen werden.
Warum einen Compiler verwenden?
- Der Compiler รผberprรผft das gesamte Programm, sodass keine Syntax- oder Semantikfehler auftreten.
- Die ausfรผhrbare Datei wird vom Compiler optimiert, sodass sie schneller ausgefรผhrt wird.
- Ermรถglicht Ihnen, eine interne Struktur im Speicher zu erstellen.
- Es ist nicht erforderlich, das Programm auf demselben Computer auszufรผhren, auf dem es erstellt wurde.
- รbersetzen Sie das gesamte Programm in eine andere Sprache.
- Generieren Sie Dateien auf der Festplatte.
- Verknรผpfen Sie die Dateien in einem ausfรผhrbaren Format.
- Suchen Sie nach Syntaxfehlern und Datentypen.
- Hilft Ihnen, Ihr Verstรคndnis der Sprachsemantik zu verbessern.
- Hilft bei der Bewรคltigung von Sprachleistungsproblemen.
- Gelegenheit fรผr ein nicht triviales Programmierprojekt.
- Die zum Erstellen eines Compilers verwendeten Techniken kรถnnen auch fรผr andere Zwecke nรผtzlich sein.
Anwendung von Compilern
- Das Compiler-Design unterstรผtzt die vollstรคndige Implementierung von High-Level-Programmiersprachen.
- Support-Optimierung fรผr Computer Architektur Parallelitรคt.
- Entwurf neuer Speicherhierarchien von Maschinen.
- Wird hรคufig zum รbersetzen von Programmen verwendet.
- Wird mit anderen Software-Produktivitรคtstools verwendet.
Zusammenfassung
- Ein Compiler ist ein Computerprogramm, das Ihnen hilft, in einer Hochsprache geschriebenen Quellcode in eine Maschinensprache auf niedriger Ebene umzuwandeln.
- Korrektheit, Geschwindigkeit der Kompilierung und die Wahrung der korrekten Bedeutung des Codes sind einige wichtige Merkmale des Compiler-Designs.
- Compiler sind in drei Teile unterteilt: 1) Single-Pass-Compiler, 2) Two-Pass-Compiler und 3) Multipass-Compiler.
- Der Begriff โCompilerโ wurde erstmals in den frรผhen 1950er Jahren von Grace Murray Hopper verwendet.
- Schritte fรผr das Sprachverarbeitungssystem sind: Prรคprozessor, Interpreter, Assembler, Linker/Loader.
- Wichtige Tools zum Erstellen von Compilern sind 1) Scannergeneratoren, 2) Syntax-3) gerichtete รbersetzungsmaschinen, 4) Parsergeneratoren und 5) automatische Codegeneratoren.
- Die Hauptaufgabe des Compilers besteht darin, das gesamte Programm zu รผberprรผfen, damit keine Syntax- oder Semantikfehler auftreten.

