Compiler Design Tutorial: Was ist, Typen, Werkzeuge, Beispiel
Was ist ein Compiler?
Ein Compiler ist ein Computerprogramm, das dabei hilft, in einer Hochsprache geschriebenen Quellcode in eine niedrigere Maschinensprache umzuwandeln. Er übersetzt den in einer Programmiersprache geschriebenen Code in eine andere Sprache, ohne die Bedeutung des Codes zu verändern. Der Compiler sorgt auch für einen effizienten Endcode, der hinsichtlich der Ausführungszeit und des Speicherplatzes optimiert ist.
Der Compiliervorgang umfasst grundlegende Übersetzungsmechanismen und Fehlererkennung. Der Compilerprozess durchläuft eine lexikalische, syntaktische und semantische Analyse am Front-End und eine Codegenerierung und -optimierung am Back-End.
In diesem Lehrgang zum Compilerentwurf lernen Sie
- Was ist ein Compiler?
- Features of Compilers
- Types of Compiler
- Tasks of Compiler
- History of Compiler
- Steps for Language processing systems
- Compiler Construction Tools
- Why use a Compiler?
- Application of Compilers
Features of Compilers
- Correctness
- Speed of compilation
- Preserve the correct the meaning of the code
- The speed of the target code
- Recognize legal and illegal program constructs
- Good error reporting/handling
- Code debugging help
Types of Compiler
Following are the different types of Compiler:
- Single Pass Compilers
- Two Pass Compilers
- Multipass Compilers
Single Pass Compiler
In single pass Compiler source code directly transforms into machine code. For example, Pascal language.
Two Pass Compiler
Two pass Compiler is divided into two sections, viz.
- Front end: It maps legal code into Intermediate Representation (IR).
- Back end: It maps IR onto the target machine
The Two pass compiler method also simplifies the retargeting process. It also allows multiple front ends.
Multipass Compilers
Der Multipass-Compiler verarbeitet den Quellcode oder Syntaxbaum eines Programms mehrfach. Er unterteilt ein großes Programm in mehrere kleine Programme und verarbeitet diese. Er entwickelt mehrere Zwischencodes. Alle diese Multipass-Programme nehmen die Ausgabe der vorherigen Phase als Eingabe. Daher benötigt es weniger Speicherplatz. Er ist auch als ‚Wide Compiler‘ bekannt.
Aufgaben des Compilers
Die Hauptaufgaben des Compilers sind:
- Zerlegt dem Quellprogramm eine grammatikalische Struktur
- Ermöglicht es, das gewünschte Zielprogramm aus der Zwischendarstellung zu konstruieren und die Symboltabelle zu erstellen
- Kompiliert den Quellcode und erkennt Fehler darin
- Verwaltet die Speicherung aller Variablen und Codes.
- Unterstützung für getrennte Kompilierung
- Lesen, Analysieren des gesamten Programms und Übersetzen in semantisch Äquivalentes
- Übersetzen des Quellcodes in Objektcode je nach Maschinentyp
Geschichte des Compilers
Wichtige Meilensteine in der Geschichte des Compilers sind wie folgt:
- Der Begriff „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 bei IBM gebaut
- COBOL war die erste Programmiersprache, die 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 zu finden
Schritte für Sprachverarbeitungssysteme
Bevor man das Konzept der Compiler kennt, muss man zunächst einige andere Werkzeuge verstehen, die mit Compilern arbeiten.
- Präprozessor: Der Präprozessor wird als Teil des Compilers betrachtet. Er ist ein Werkzeug, das Input für den Compiler erzeugt. Er befasst sich mit Makroverarbeitung, Augmentation, Spracherweiterung, etc.
- Interpreter: Ein Interpreter ist wie ein Compiler, der die Hochsprache in die niedrige Maschinensprache übersetzt. Der Hauptunterschied zwischen beiden besteht darin, dass der Interpreter den Code Zeile für Zeile liest und umwandelt. Der Compiler liest den gesamten Code auf einmal und erstellt den Maschinencode.
- Assembler: Er übersetzt Assemblercode in maschinenverständliche Sprache. Das Ergebnis des Assemblers wird als Objektdatei bezeichnet, die eine Kombination aus Maschinenbefehlen und den für die Speicherung dieser Befehle im Speicher erforderlichen Daten ist.
- Linker: Der Linker hilft Ihnen, verschiedene Objektdateien zu verknüpfen und zusammenzuführen, um eine ausführbare Datei zu erstellen. All diese Dateien können mit verschiedenen Assemblern kompiliert worden sein. Die Hauptaufgabe eines Linkers ist es, nach aufgerufenen Modulen in einem Programm zu suchen und den Speicherplatz herauszufinden, an dem alle Module gespeichert sind.
- Lader: Der Lader ist ein Teil des Betriebssystems, der die Aufgabe hat, ausführbare Dateien in den Speicher zu laden und sie auszuführen. Er berechnet auch die Größe eines Programms, was zusätzlichen Speicherplatz schafft.
- Cross-Compiler: Ein Cross-Compiler ist im Compilerbau eine Plattform, die bei der Erzeugung von ausführbarem Code hilft.
- Source-to-source Compiler: Von einem Source-to-Source-Compiler spricht man, wenn der Quellcode einer Programmiersprache in den Quellcode einer anderen Sprache übersetzt wird.
Compilerbauwerkzeuge
Compilerbauwerkzeuge wurden mit der weltweiten Verbreitung von Computertechnologien eingeführt. Sie werden auch als Compiler-Compiler, Compiler-Generatoren oder Übersetzer bezeichnet.
Diese Werkzeuge verwenden eine bestimmte Sprache oder einen bestimmten Algorithmus, um die Komponenten des Compilers zu spezifizieren und zu implementieren. Nachfolgend ein Beispiel für Compilerbauwerkzeuge.
- Scanner-Generatoren: Dieses Werkzeug nimmt reguläre Ausdrücke als Eingabe. Zum Beispiel LEX für das Unix-Betriebssystem.
- Syntax-geleitete Übersetzungsmaschinen: Diese Software-Tools bieten einen Zwischencode unter Verwendung des Parse-Baums. Ihr Ziel ist es, jedem Knoten des Parse-Baums eine oder mehrere Übersetzungen zuzuordnen.
- Parser-Generatoren: Ein Parsergenerator nimmt eine Grammatik als Eingabe und erzeugt automatisch Quellcode, der mit Hilfe einer Grammatik Zeichenströme parsen kann.
- Automatische Code-Generatoren: Nimmt Zwischencode und wandelt ihn in Maschinensprache um
- Data-flow engines: Dieses Tool ist hilfreich bei der Code-Optimierung. Hier werden die Informationen vom Benutzer geliefert und der Zwischencode wird verglichen, um jede Beziehung zu analysieren. Es ist auch als Datenflussanalyse bekannt. Es hilft Ihnen herauszufinden, wie Werte von einem Teil des Programms zu einem anderen Teil übertragen werden.
Warum einen Compiler benutzen?
- Compiler überprüft das gesamte Programm, so dass keine Syntax- oder semantischen Fehler vorhanden sind
- Die ausführbare Datei wird vom Compiler optimiert, so dass sie schneller ausgeführt werden kann
- Ermöglicht die Erstellung interner Strukturen im Speicher
- Es besteht keine Notwendigkeit, das Programm auf demselben Rechner auszuführen, auf dem es erstellt wurde
- Übersetzen Sie das gesamte Programm in eine andere Sprache
- Erzeugen Sie Dateien auf der Festplatte
- Verknüpfen Sie die Dateien in ein ausführbares Format
- Prüfen Sie auf Syntaxfehler und Datentypen
- Hilft Ihnen, Ihr Verständnis der Sprachsemantik zu verbessern
- Hilft Ihnen, Probleme mit der Sprachleistung zu behandeln
- Gelegenheit für ein nichttrivial programming project
- The techniques used for constructing a compiler can be useful for other purposes as well
Application of Compilers
- Compiler design helps full implementation Of High-Level Programming Languages
- Support optimization for Computer Architecture Parallelism
- Design of New Memory Hierarchies of Machines
- Widely used for Translating Programs
- Used with other Software Productivity Tools
Summary
- A compiler is a computer program which helps you transform source code written in a high-level language into low-level machine language
- Correctness, Geschwindigkeit der Kompilierung, Erhaltung der korrekten Bedeutung des Codes sind einige wichtige Merkmale des Compilerentwurfs
- Compiler werden 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 ein Sprachverarbeitungssystem sind: Präprozessor, Interpreter, Assembler, Linker/Loader
- Wichtige Werkzeuge für den Compilerbau sind 1) Scanner-Generatoren, 2)Syntax-3) gerichtete Übersetzungsmaschinen, 4) Parser-Generatoren, 5) automatische Code-Generatoren
- Die Hauptaufgabe des Compilers ist es, das gesamte Programm zu überprüfen, so dass keine syntaktischen oder semantischen Fehler vorhanden sind