07.02.2013 Aufrufe

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

Vorlesungsskript - Institut für Programmierung und Reaktive Systeme

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

1 Einführung<br />

Eventuell schließt sich an die Phase der Code-Generierung noch eine maschinenabhängige<br />

Code-Optimierung an, die Ineffizienzen im erzeugten Maschinencode beseitigt<br />

(z.B. überflüssige Kopierbefehle entfernt oder einzelne Maschinenbefehle durch<br />

effizientere Befehle mit derselben Wirkung ersetzt).<br />

1.5.3 Front-End, Back-End<br />

Bei der Einteilung des Compilers in Phasen werden häufig die Begriffe Front-End<br />

<strong>und</strong> Back-End verwendet. Das Front-End eines Compilers umfaßt alle zielsprachenunabhängigen<br />

Compilerphasen, das Back-End entsprechend alle quellsprachenunabhängigen<br />

Phasen des Compilers.<br />

Für die Portierung eines Compilers auf eine andere Zielsprache kann i. allg. das Front-<br />

End unverändert weiterverwendet werden, so daß nur das entsprechende Back-End<br />

neu implementiert werden muß. Im umgekehrten Fall kann die Verbindung mehrerer<br />

Front-Ends mit einem gemeinsamen Back-End sinnvoll sein, um innerhalb eines Programms<br />

Teilprogramme in einer jeweils <strong>für</strong> das Teilproblem optimalen Programmiersprache<br />

zu schreiben <strong>und</strong> aus diesen Teilprogrammen ein gemeinsames Zielprogramm<br />

zu erzeugen.<br />

1.5.4 Läufe<br />

Es ist üblich, mehrere Übersetzungsphasen in einem einzelnen Lauf (pass) zu implementieren.<br />

Ein Lauf steht dabei <strong>für</strong> einen Durchlauf durch eine Darstellung des<br />

Programms. Dabei kann es sich sowohl um den Quelltext als auch um eine interne<br />

Darstellung des Programms wie z.B. den Syntaxbaum handeln. Dabei bietet es<br />

sich an, Phasen, deren Arbeitsschritte eng miteinander verzahnt sind, in einem Lauf<br />

zusammenzufassen. Eine Möglichkeit wäre zum Beispiel die Integration von lexikalischer<br />

<strong>und</strong> syntaktischer Analyse in einem Lauf sowie der semantischen Analyse <strong>und</strong><br />

der Codegenerierung in einem zweiten Lauf.<br />

Einen Extremfall stellt der Ein-Pass-Compiler dar, der die Analyse des Quellprogramms<br />

<strong>und</strong> die Synthese des Zielprogramms während eines einzigen Durchlaufs<br />

durch den Programmtext durchführt. In diesem Fall muß gewährleistet sein, daß<br />

jeder Bezeichner vor seiner Verwendung deklariert wurde, da nachträgliche Änderungen<br />

am Zielprogramm nicht mehr möglich sind. Aus diesem Gr<strong>und</strong> ist in vielen<br />

Compilern <strong>für</strong> die Sprache Pascal [JW91] die Vordeklaration von Bezeichnern mit<br />

der forward-Anweisung vorgesehen.<br />

Andere Programmiersprachen wie z.B. Algol-68 [OT97] erlauben die Verwendung von<br />

Bezeichnern vor ihrer Deklaration, so daß <strong>für</strong> diese Sprachen die Implementierung<br />

mittels eines Ein-Pass-Compilers nicht möglich ist.<br />

Bei der Implementierung einer Sprache mittels einer virtuellen Maschine gilt: Der<br />

12

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!