Übersetzer (Programmierung)

Aus MARJORIE-WIKI
Wechseln zu: Navigation, Suche

Übersetzer werden in der Programmierung und in der Informatik Computerprogramme genannt, die den Programmcode eines Programms aus einer formalen Sprache in den Code einer anderen formalen Sprache transformieren. Diese zur Ausführung der Programme erforderliche Code-Übersetzung kann je nach verwendeter Programmiersprache und Entwicklungsumgebung auf unterschiedliche Art und Weise geschehen, die gebräuchlichsten sind der Einsatz eines Compilers oder eines Interpreters.

Der Prozessor kann nur Maschinencode ausführen

Damit ein Programm auf einem Computer ausgeführt (d. h. wirken) kann, müssen die spezifizierten Anweisungen (als Quelltext oder in einer anderen Form vorliegend) letztlich in Maschinenbefehle umgewandelt werden, die der Prozessor 'ausführen' kann. Denn die programmierten Anweisungen sind eine einer kontextfreien Grammatik (= der Syntax einer Programmiersprache) genügende Zeichenfolge (z. B. „A = B + 100 * C“), die der Prozessor nicht 'versteht'. Von außen sichtbar (z. B. für die Anwender oder die Benutzer) wirken die Befehle über die vom Prozessor ausgelösten Eingabe-/Ausgabe-Aktionen an externen Geräten.

Abweichende Bedeutungen: Den Ausdruck Übersetzer verwenden verschiedene Literaturquellen unterschiedlich: Einerseits als Überbegriff für Compiler und Interpreter,[1] andererseits im engeren Sinn nur als Synonym für Compiler (z. B. in [2]). Übersetzer kann man auch Konvertierer nennen.

Überblick[Bearbeiten]

Die Entwicklung in der Computertechnik und der Softwaretechnologie brachte im Zeitverlauf hochgradig unterschiedliche Verfahren und Techniken mit sich, mit deren Hilfe diese 'Transformation' vorgenommen wird. Diese Verfahren sind nachfolgend kurz als Überblick beschrieben. Je nach verwendeter Entwicklungsumgebung können mehrere der genannten Verfahren zum Einsatz kommen. Siehe auch Beispiele.

Kompilierung
  • Compiler: Ein Compiler ist ein Programm, das Programme einer Quellsprache Q in semantisch äquivalente Programme einer Zielsprache Z übersetzt.[3] Siehe Hauptartikel Compiler.
Compiler erzeugen entweder Maschinencode (auch Objektprogramm genannt[2]) oder aus Gründen der Hardwareunabhängigkeit sog. Zwischencode (z. B. Bytecode oder auch Assemblercode, der durch weitere Transformationsschritte zu ausführbarem Code wird.
Übersetzungen durch einen Compiler sind in zwei Varianten möglich:
  • Bei der „Ahead-of-Time-Kompilierung“ wird der Programmcode nur einmalig in einen ausführbaren Code übersetzt und mehrfach zur Ausführung verwendet. Siehe Hauptartikel AOT-Compiler.
  • Bei der „Just-in-Time-Kompilierung“ wird der Programmtext direkt vor jedem Programmlauf übersetzt. Siehe Hauptartikel JIT-Compiler.
Um den Compiler herum gibt es weitere Werkzeuge, die integriert oder separat spezielle Aufgaben wahrnehmen: Minimierer, Präprozessor, Precompiler, Optimierer, Parallelisierer, Obfuscator.
  • Assembler zählen zur Familie der Compiler und übersetzen ein in maschinennaher Assemblersprache vorliegendes Computerprogramm in die Maschinensprache. Siehe Hauptartikel Assembler (Informatik).
  • Precompiler können spezielle, in der Programmiersprache selbst nicht vorgesehene Syntax-Konstrukte (zum Beispiel Entscheidungstabellen) bearbeiten, vor-übersetzen und als Quellcode oder Zwischentext der gewählten Programmiersprache ausgeben. Siehe Hauptartikel Precompiler.
Hilfsmittel i. Z. mit dem Kompilieren
  • In manchen Systemumgebungen wird der von einem Compiler oder Assembler erzeugte Maschinencode von einem Linker („Binder“, „Bindelader“) nachbearbeitet - was nur indirekt eine Transformation ist. Das ist ein Computerprogramm, das einzelne Programmmodule zu einer ausführbaren Datei zusammenstellt (verbindet), wodurch zum Beispiel Unterprogrammen im Hauptprogramm nutzbar sind. Siehe Hauptartikel Linker (Computerprogramm).
  • Ein Lader lädt den Maschinencode eines Programms aus einer ausführbaren Datei in den Arbeitsspeicher und startet dessen Ausführung. Siehe Hauptartikel Lader (Programmierung).
Interpretation
  • Interpreter sind Computerprogramme, die einen Programmcode nicht in eine ausführbare Datei übersetzen, sondern ihn – oder einen Zwischencode, man nennt dies dann ein Compiler-Interpreter System[3] oder „Compreter“ – zur Laufzeit des Programms einlesen, analysieren und einzeln in Anweisungen konvertieren, die der Prozessor jeweils sofort ausführt. Siehe Hauptartikel Interpreter.
Ausführung durch Laufzeitumgebungen
  • Nur indirekt erfolgt eine Übersetzung programmierter Anweisungen in Maschinenbefehle bei Nutzung von Laufzeitumgebungen: Dabei werden die meist deklarativ spezifizierten Vorgaben nicht in äquivalenten Code umgewandelt, sondern von einer dazu vorgesehenen Laufzeitumgebung wie "Daten" verarbeitet, d. h. von ihr entsprechend den Vorgaben berücksichtigt und so zur Ausführung gebracht.
Beispiele: Reportgenerator, Integrierte Entwicklungsumgebungen (IDE). Siehe Hauptartikel Laufzeitumgebung

Beispiele für Übersetzungsszenarien[Bearbeiten]

Zur Transformation (Umwandlung, Übersetzung, Konvertierung) von Programmcode der vom Programmierer erstellten Anweisungen in die zur physischen Ausführung im Prozessor erforderlichen Maschinenbefehle werden in den verschiedenen Entwicklungsumgebungen und Programmiersprachen unterschiedliche Verfahren angewendet. Die nachfolgenden Abschnitte zeigen dafür Beispiele.

Szenario IBM-Großrechner mit 3GL[Bearbeiten]

Ablaufbeispiel IBM-Großrechner / 3GL-Sprache

Der Compiler übersetzt den per Texteditor erzeugten, optional von Precompilern ergänzten oder vorübersetzten Quellcode für genau ein 'Programm' (PGM X) und erzeugt dabei prozessorspezifischen Objektcode. Soll das Programm direkt vom Betriebssystem aufrufbar sein, so wird dieser Code mit dem 'Linkage Editor' um sprachspezifische Systemmodule ergänzt und der Objektcode aufgerufener Unterprogramme hinzugebunden. Ergebnis ist ein ausführbares Lademodul für das 'Programm X'. Für nicht getrennt aufrufbare Unterprogramme wird nur der Objektcode erzeugt - der nur beim Linken der sie aufrufenden Programme verwendet wird.
Im Quellcode können Befehle enthalten sein, die nicht zur Programmiersprache selbst gehören (z. B. SQL-Code) und aus denen eigener Objektcode erzeugt wird. Diese Befehle werden im Quellcode meist 'auskommentiert' und durch den Aufruf des adäquaten Unterprogramms ergänzt, das beim Linken und/oder bei der Ausführung aufgerufen wird.
Analog diesem Schema werden auch Assemblerprogramme übersetzt; statt dem 3GL-Compiler kommt ein Assembler zum Erzeugen des Objektcodes zum Einsatz.

Szenario Laufzeitumgebung (IDE, Beispiel MS Access)[Bearbeiten]

Kompilierung nur bei VBA-Code, sonst Interpretertechnik

Anders als bei klassischen imperativen Programmiersprachen werden bei Software, die mit einer IDE erstellt wird (hier im Beispiel MS Access), der entwickelte Code mit anderen Verfahren in Maschinenbefehle überführt: Vom Softwareentwickler wird meist deklarativ nur spezifiziert, WAS entstehen soll (z. B. Formulare, Reports, SQL-Datenzugriffe, Makros etc.), also keine Befehle im imperativen Sinn. Daraus erzeugen die (Grafik-) Editoren beim Programmieren „Objektproperties“. Zum Ablauf der so entwickelten Anwendung wird die Datenbanksoftware (= Systemsoftware, auch Laufzeitumgebung genannt), nach objekt-/ereignisorientierten Prizinpien ausgeführt, wobei diese die programmierten Spezifikationen je Objekt beim Eintritt bestimmter Ereignisse bestimmungsgemäß verarbeitet – und diese damit praktisch ‚ausführt‘. Nach ähnlichem Prinzip arbeiten auch Reportgeneratoren wenn sie Berichte erzeugen.
Ausnahme (bei MS Access geltend): Falls in der Anwendung VBA-Anweisungen implementiert wurden, werden diese bei der ersten Ausführung der Anwendung (automatisch und einmalig) kompiliert, es entsteht ein optimierter Zwischencode, hier „P-Code“ genannt, der in der MDB gespeichert und über einen Interpreter 'Befehl für Befehl' ausgeführt wird.[4]
Alle Daten der Anwendung werden in einer Datei mit der Dateiendung MDB gespeichert, die somit eine sogenannte Ausführbare Datei ist. Sie enthält alle spezifizierten Angaben der Anwendung, sowohl aus der Softwareentwicklung als auch zur Ausführung. Dies sind Daten-, Formular- und Berichtsdefinitionen, Datenzugriffe, VBA-Befehle, Makros und auch der ggf. erzeugte P-Code. Optional können in der MDB auch die Anwendungsdaten selbst gespeichert werden.

Fazit: Der Programmcode wird ausnahmslos durch Teilkomponenten von MS Access verarbeitet. Der Prozessor führt dabei in erster Linie die gemäß den programmierten Anweisungen modifizierten Maschinenbefehle der Access-Ablaufumgebung aus sowie die aus dem VBA-P-Code vom Interpreter intern erzeugten Befehle.

Einzelnachweis[Bearbeiten]

Info Sign.svg Dieser Wikipedia-Artikel wurde, gemäß GFDL, CC-by-sa mit der kompletten History importiert.