Ü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.

    1. 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

  1. Liest eine Anweisung des Quellprogramms.
  2. Untersucht den Befehl, um die syntaktische Gültigkeit gemäß der Grammatik der Quellsprache festzustellen.
  3. 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.
  4. Unmittelbar danach führt der Interpreter die generierten Maschinenanweisungen aus. Falls zutreffend, werden Teilergebnisse für die spätere Verwendung gespeichert.
  5. 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.
  6. Der Zyklus wird ab Schritt 1 wiederholt.
  7. 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.

Verwandte Einträge: