Übersetzer und Interpreter: Grundlagen der Sprachverarbeitung
Eingeordnet in Informatik
Geschrieben am in Deutsch mit einer Größe von 6,27 KB
Übersetzer und Interpreter: Eine Einführung
Was ist ein Übersetzer?
Ein Übersetzer ist ein Programm, das eine Eingabe in einer Sprache (Ausgangssprache) in eine Ausgabe einer anderen Sprache (Zielsprache) umwandelt, wobei deren Bedeutung beibehalten wird.
Arten von Übersetzern
Assembler
Ein Assembler ist für die Durchführung eines Prozesses namens Assemblierung verantwortlich. Dieser Prozess wandelt ein in Assemblersprache geschriebenes Programm in das entsprechende Maschinensprache-Programm um (ohne es auszuführen).
Compiler
Ein Compiler ist ein Programm, das als Eingabe ein Programm in einer mittleren oder höheren Sprache (Quellcode) erhält und es in den entsprechenden Code in Assemblersprache (Objektprogramm) oder sogar direkt in Maschinensprache (ausführbare Programmdatei) umwandelt, ohne es jedoch auszuführen.
Funktionen eines Compilers
Lexikalische Analyse
Die lexikalische Analyse erkennt die grundlegenden Elemente der Sprache und erzeugt Symboltabellen sowie Literale. Um diese Aufgabe zu erfüllen, muss jede Anweisung gelesen und in Tokens aufgeteilt werden. Das Token wird mit einer Tabelle von Schlüsselwörtern verglichen, und dann geht es zum nächsten Token über.
Syntaktische Analyse
Die syntaktische Analyse wird in der syntaktischen Phase durchgeführt. Ihre grundlegende Funktion ist es, die Gültigkeit der Quellanweisungen syntaktisch zu überprüfen und deren Typ (z.B. IF, WHILE) zu erkennen. Dabei werden die entsprechenden syntaktischen Regeln angewendet.
Semantische Analyse
Die semantische Analyse führt die Interpretationsphase durch, die für die Bestimmung der Bedeutung der Anweisungen verantwortlich ist und sicherstellt, dass keine Fehler vorliegen. Die Interpretation hängt davon ab, ob die Anweisung ausführbar ist. Im ersten Fall wird eine Zwischenform generiert, die in einer geeigneten Datenstruktur gespeichert wird.
Optimierung
Die Optimierung minimiert die Anzahl der Anweisungen im Objektprogramm oder verbessert die Nutzung von Ressourcen (z.B. Registern) der Maschine. Die Optimierung kann in zwei Phasen unterteilt werden:
- Phasenunabhängige Optimierung: Kann in mehreren Durchläufen erfolgen, je nach angewandter Technik. Diese Optimierung wird auf das Array von Zwischenformen angewendet.
- Phasenabhängige Optimierung: Wird zur besseren Nutzung der verfügbaren Maschinenregister durchgeführt; es besteht auch die Möglichkeit, weniger Anweisungen zu generieren.
Speicherzuweisung
Die Speicherzuweisung führt die Speicherverteilungsphase durch und zielt darauf ab, allen Bezeichnern und Literalen Adressen zuzuweisen.
Objektcode-Generierung
Der Zweck der Objektcode-Generierung ist offensichtlich. Am Ende des Übersetzungsprozesses muss der Übersetzer im Hauptspeicher gehalten werden. Wenn der Übersetzungsprozess erfolgreich war, muss der Objektcode in einem Speichermodul abgelegt werden, um ausgeführt werden zu können.
Interpreter
Ein Interpreter ist ein Programm, das jede Anweisung und Erklärung des Quellprogramms direkt ausführt (ohne ein Objekt- oder ausführbares Programm zu erzeugen). Die Ausführung erfolgt durch Routinen im Maschinencode, und die Ergebnisse oder Operationen sind ausschließlich durch die Bedeutung der Anweisungen oder Erklärungen definiert.
Ablauf eines Interpreters
- Liest eine Anweisung des Quellprogramms.
- Untersucht den Befehl, um die syntaktische Gültigkeit gemäß der Grammatik der Quellsprache festzustellen.
- Ist die Anweisung syntaktisch korrekt, wird sie interpretiert, um ihre Semantik zu bestimmen. Dabei kann eine Zwischen-Datenstruktur (z.B. ein binärer Baum) erzeugt werden, die die logische Abfolge der Implementierung darstellt und die Generierung der entsprechenden Maschinenbefehle erleichtert.
- Unmittelbar danach führt der Interpreter die generierten Maschinenanweisungen aus. Falls zutreffend, werden Teilergebnisse für die spätere Verwendung gespeichert.
- Tritt ein Syntaxfehler auf, wird der Prozess beendet, der Fehler gemeldet, und die Ausführung der aktuellen Anweisung ist erst nach Behebung des Fehlers möglich.
- Der Zyklus wird ab Schritt 1 wiederholt.
- Die Interpretation endet, wenn die letzte Quellanweisung gelesen wurde.
Weitere verwandte Konzepte
Präcompiler (Präprozessor)
Ein Präcompiler, auch als Präprozessor bekannt, ist ein Programm, das vor dem Aufruf des Compilers ausgeführt wird. Dieses Programm wird verwendet, wenn das Quellprogramm, das in der vom Compiler erkennbaren Sprache (im Folgenden "Host-Sprache") geschrieben ist, Strukturen, Anweisungen oder Deklarationen enthält, die in einer anderen Sprache (der eingebetteten Sprache) geschrieben sind.
Pseudocompiler
Ein Pseudocompiler ist ein Programm, das wie ein Compiler funktioniert, außer dass sein Produkt nicht auf einer realen Maschine, sondern auf einer virtuellen Maschine ausführbar ist.
Computer-Simulator
Ein Computer-Simulator ist ein Programm, das sich wie ein anderes verhält. Die Annahme, Verarbeitung und Ausgabe von Daten erfolgt scheinbar wie bei dem simulierten Computer. Anders als ein Übersetzer (der mit dem Quellprogramm arbeitet), arbeitet der Simulator mit dem Objektprogramm. Der größte Nachteil von Simulatoren ist, dass sie die Verarbeitungszeit erheblich verlängern und mehr Speicher benötigen, da das Simulatorprogramm zusammen mit dem zu verarbeitenden Objektprogramm im Speicher bleiben muss.
Grundlagen der Sprachverarbeitung
- Grammatik: Grundlegende Symbole aus mehreren Zeichen (Schlüsselwörter) + Grundelemente (Bezeichner, Werte, Literale, Zeichenketten).
- Syntax: Regeln (Ausdrücke, Anweisungen).
- Semantik: Bedeutung und Sinn.