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.