• Keine Ergebnisse gefunden

Springer-Verlag Berlin Heidelberg GmbH

N/A
N/A
Protected

Academic year: 2022

Aktie "Springer-Verlag Berlin Heidelberg GmbH"

Copied!
14
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Springer-Lehrbuch

(2)

Springer-Verlag Berlin Heidelberg GmbH

(3)

Reinhard Wilhelm · Dieter Maurer

Obersetzerbau

Theorie, Konstruktion, Generierung

Zweite, iiberarbeitete und erweiterte Auflage

Mit 166 Abbildungen und 70 Tabellen

i Springer

(4)

Prof. Dr. Reinhard Wilhelm

Universitiit des Saarlandes Fachbereich 14. Informatik Postfach 15 11 50

D-66041Saarbrficken

Dr. Dieter Maurer

Saarbrficker Zeitung Verlag und Druckerei GmbH Abteilung Informationssysteme

GutenbergstraGe 11-23 D-66117 Saarbrficken

Die Deutsche Bibliothek - CIP-Einheitsaufnahme Wilhelm, Reinhard:

Obersetzerbau : Theorie, Konstruktion. Generierung ; mit 70 TabeUen / Reinhard Wtlhelm ; Dieter Maurer. -2. •• Oberarb. und erw. Aufl. -

Berlin; Heidelberg ; New York; Barcelona • Budapest; Hongkong ; London ; Mailand ; Paris; Santa Clara; Singapur ; Tokio : Springer. 1997

(Springer-Lehrbuch)

ISBN 978-3-540-61692-4 ISBN 978-3-642-59081-8 (eBook) DOI 10.1007/978-3-642-59081-8

NE: Maurer. Dieter

ISBN 978-3-540-61692-4

Dieses Werk ist urheberrechtiich geschiltzt. Die dadurch begrilndeten Rechte. insbesondere die der Obersetzung. des Nachdrucks. des Vortrags. der Entnahme von Abbildungen und TabeUen, der Funk- sendung, der Mikroverfilmung oder der Vervie1fl1ltigung auf anderen Wegen und der Speicherung in DatenverarbeitungsanIagen. bleiben. auch bei nur auszugsweiser Verwertung, vorbehaIten. Eine Ver- vielfllltigung dieses Werkes oder von Teilen dieses Werkes ist auch int Einzelfa1l nur in den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9. Sep- tember 1965 in der jeweils geltenden Fassung zulllssig. Sie ist grundsiltzlich vergOtungspflichtig. Zuwi- derhandlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes.

C Springer-Verlag Berlin Heidelberg 1992., 1997

Urspriinglich erschienen bei Springer-Verlag Berlin Heide\berg New York 1997

Die Wiedergabe von Gebrauchsnamen, Hande1snamen. Warenbezeichnungen usw. in diesem Werk be- rechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme. daG solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wilren und daher von jeder- mann benutzt werden dOrften.

Satz: Reproreife Vorlage der Autoren

EinbandgestaItung: design & prodllction GmbH. Heide1berg

SPIN: 10543571 45/3142. - 5 4 3 2. 1 o - Gedruckt auf silurefreiem Papier

(5)

Fur Margret, Hannah, Eva, Barbara

R. W.

(6)

Vorwort zur zweiten Auflage

Die wesentliche Anderung gegeniiber der ersten Auflage besteht in der Erwei- terung urn ein Kapitel iiber die Ubersetzung objektorientierter Sprachen. Darin wird gezeigt, wie einfache und mehrfache Vererbung implementiert werden.

AuBerdem wurden Fehler und Inkonsistenzen aus der ersten Auflage besei- tigt. Hinweise dazu haben wir von zahlreichen Lesern erhalten. Besonders danken mochten wir Hans Briiggemann, Reinhold Heckmann, Sonke Kannapinn, Mario Kroplin, Bernhard Moller, Heinrich Roscheisen, Helmut Seidl, Fran~ois Thomas- set, Martin Zentner und vor allem Helmut Partsch. Die J~TEX-Quellen und -Styles wurden von Henning Biermann und Patrik Zeimetz sorgfaltig iiberarbeitet.

Saarbriicken, November 1996 Reinhard Wilhelm, Dieter Maurer

Weiteres Material zu diesem Buch, u.a. Beschreibungen von Projekten, unterstiitzende Software und Visualisierungen, findet man im Internet unter:

http://www.cs.uni-sb.de/RW/compbook.html

(7)

Vorwort zur erst en A ufiage

Ubersetzer fUr h6here Programmiersprachen sind groBe komplexe Softwaresy- sterne. Sie haben aber einige besondere Eigenschaften, die sie vor den meisten anderen Softwaresystemen auszeichnen.

Ihre Funktionalitat ist (fast) wohldefiniert. Idealerweise existieren vollstan- dige formale oder zumindest prazise Beschreibungen der Quellsprache und der Zielsprache. Haufig gibt es dazu noch Beschreibungen von Schnittstellen zum Betriebssystem, zum Programmiersystem und zu Programmierumgebungen, zu anderen Ubersetzern und zu Programmbibliotheken.

Die Zerlegung der Ubersetzungsaufgabe in Teilaufgaben mit wohldefinierten Schnittstellen ist wohlverstanden. Daraus ergibt sich eine natiirliche modulare Struktur, die iibrigens auch die iibliche Struktur der Ubersetzerbaubiicher indu- ziert.

Die verschiedenen Teilaufgaben der Ubersetzung sind teilweise sehr weitge- hend untersucht. Die entsprechenden Theorien wurden eigens entwickelt oder etwa aus der Theorie der formalen Sprachen und Automaten iibernommen. Sie liefern gute Grundlagen fiir die Realisierung von Moduln fiir Ubersetzerteilauf- gaben. Fiir einige der Teilaufgaben gibt es sogar Mechanismen fUr die form ale Beschreibung von Teilaufgaben und Generierungsverfahren, die aus solchen for- malen Beschreibungen automatisch Ubersetzerteile erzeugen. Viele solche Gene- ratoren sind verfiigbar und in Gebrauch.

Dieses Buch ist kein Kochbuch. Man findet hier keine Rezepte der Art: "Urn einen Ubersetzer von der Quellsprache X in die Maschinensprache Y zu kon- struieren, nehme man .... " Die Darstellung reflektiert die oben aufgezahlten Besonderheiten des Ubersetzerbaus, insbesondere die Existenz der Theorie und der automatischen Generierungsverfahren.

Dieses Buch ist fiir Studenten im Hauptstudium des Studienfachs Informatik bestimmt. Die Kenntnis zumindest einer imperativen Programmiersprache wird vorausgesetzt. In den Kapiteln zur Ubersetzung von funktionalen und logischen Programmiersprachen wird zwar eine langere Einleitung in die Konzepte dieser Sprachklassen gegebenj es ist jedoch ratsam, eine moderne funktionale Sprache und Prolog zu erlernen, urn die entsprechenden Kapitel besser zu verstehen. Au- Berdem wird der Leser von einer guten Grundlage an Kenntnissen in der Theorie der formalen Sprachen und der Automaten profitieren, obwohl die notwendige Theorie jeweils vollstandig dargestellt ist.

(8)

x

Vorwort zur ersten Auftage Autbau des Buches

Die Kapitel 2 bis 5 beschreiben, was ein Ubersetzer tut, also welche Korrespon- denz zwischen einem Quellprogramm und einem Zielprogramm er herstellt. Dazu werden fUr eine imperative, eine funktionale und eine logische Programmierspra- che jeweils eine geeignete abstrakte Maschine angegeben und die Ubersetzung von Programmen in der jeweiligen Quellsprache in die Sprache der zugehorigen abstrakten Maschine prazise beschrieben.

Ausgangspunkt der Ubersetzung ist allerdings jeweils so etwas wie ein ana- lysiertes Quellprogramm, spater als zugehOrige dekorierte abstrakte Syntax be- zeichnet.

In den Kapiteln 6 bis 12 wird dann das Wie der Ubersetzung beschrieben, niimlich wie unterteilt man den Ubersetzungsprozef3 in einzelne Phasen, welche Aufgaben erledigen die einzelnen Phasen, welche Techniken benutzt man in ih- nen, wie kann man formal beschreiben, was sie tun, und wie aus einer solchen Beschreibung sogar automatisch ein Ubersetzermodul erzeugen.

Je nach zur Verfiigung stehender Zeit kann aus diesem Buch Stoff fiir eine einsemestrige oder eine zweisemestrige Veranstaltung ausgewiihlt werden. Eine eher konventionelle, einsemestrige Vorlesung iiber die Ubersetzung imperativer Sprachen wiirde das Kapitel 2 und Material aus den Kapiteln 6 bis 12 behandeln.

Eine zweisemestrige Vorlesung wird in jedem Fall auch die Ubersetzung funktio- naler und logischer Programmiersprachen und die Gebiete mit abdecken konnen, die Gegenstand aktueller Forschung sind, wie die abstrakte Interpretation und die Codeerzeugung fUr parallele Zielarchitekturen.

Danksagungen

Das Buch ist wiihrend mehrerer Vorlesungen der beiden Autoren an der Univer- sitiit des Saarlandes in Saarbriicken entstanden. Der erste Durchlauf durch einen damals dreisemestrigen Zyklus fand in den Jahren 1987/88 statt.

Engagierte Mitarbeit und konstruktive Kritik haben wir von so vielen Mitar- beitern und Horern erfahren, daf3 wir hier nicht allen namentlich danken konnen.

Besonders verpflichtet sind wir Martin Alt, Ingrid Biehl, Christian Fecht, Christi- an Ferdinand, Reinhold Heckmann, Andreas Hense, Stefan Kahrs, Peter Lipps, Gudula Riinger, Georg Sander und Helmut Seidl. Die 1EXnikerInnen Christine Wentz und Patrik Zeimetz haben geduldig mehrere Revisionen durchlitten.

Saarbriicken, St. Ingbert, April 1992 Reinhard Wilhelm, Dieter Maurer

(9)

Inhalt

1 1.1 1.2 1.2.1 1.2.2 1.2.3 2 2.1 2.2 2.3 2.4 2.5 2.6 2.6.1 2.6.2 2.7 2.8 2.9 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 2.10 2.11 2.12 3 3.1 3.2 3.3 3.3.1 3.4

Einleitung . . . . Hohere Programmiersprachen . . . . Implementierung von Programmiersprachen Interpreter . . . .

Ubersetzer. . . . Reale und abstrakte Maschinen

Ubersetzung imperativer Programmiersprachen Sprachkonzepte und ihre Ubersetzung

Die Architektur der P-Maschine . . . . Wertzuweisungen und Ausdriicke . . . . Bedingte und iterative Anweisungen, Anweisungsfolgen Speicherbelegung fiir Variablen einfachen Typs

Speicherbelegung fiir Felder Statische Felder. . . . Dynamische Felder . . . . Speicherbelegung fiir Verbunde

Zeiger und dynamische Speicherbelegung . Prozeduren . . . . Speicherorganisation fur Prozeduren Adressierung von Variablen . . . . . Berechnung der AdreBumgebungen Prozedureintritt und Prozedurverlassen . Parameteriibergabe. . . . Zugriff auf Variablen und formale Parameter.

Formale Prozeduren als Parameter Hauptprogramm

Ubungen ...

Literaturhinweise .

Ubersetzung funktionaler Programmiersprachen . Sprachtyp und einleitendes Beispiel . . . . LaMa, eine einfache funktionale Programmiersprache Einfiihrung in die Ubersetzung von LaMa

Die Ubersetzungsfunktionen .

Umgebungen und Bindungen . . . .

1 1 2 2 3 4 7 7 8 9 12 17 18 18 23 26 27 31 36 39 43 46 49 52 53 56 58 62 63 63 72 78 81 82

(10)

XII

3.5 3.5.1 3.5.2 3.6 3.6.1 3.6.2 3.7 3.7.1 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.8 3.9 3.10

4

4.1 4.2 4.3 4.4 4.5 4.5.1 4.5.2 4.6 4.6.1 4.6.2 4.7 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.8 4.8.1 4.8.2 4.8.3 4.8.4 4.8.5 4.9 4.10

Die Architektur der MaMa Der Keller der MaMa ...

Die Halde der MaMa . . . . Kellerverwaltung und Adressierung Adressierung von Namen in der MaMa Aufbau von Bindungen. . . . . Befehlsvorrat und Ubersetzung Programmausdriicke . . . . Einfache Ausdriicke . . . . Angewandte Vorkommen von Variablen Funktionsdefinitionen . . . . Funktionsanwendungen . . . . Aufbau und Auswertung von Abschliissen Letrec-Ausdriicke und lokale Variablen Implementierung von Listen

Ubungen . . .

Literaturhinweise . . . .

Ubersetzung logischer Programmiersprachen Logische Programmiersprachen

Pradikatenlogische Grundlagen . . . . . Unifikation . . . . Ausfiihrung von logischen Programmen . Prolog ....

Beweisbaume . . . . Umgebungen . . . . Prolog: Abstrakte Maschine und Ubersetzung Entwicklung der Prolog Implementierung . Die Architektur der WiM

Ubersetzung von Prolog Ziele . . . . Kopfterme . . . . Ubersetzung von Klauseln Zuriicksetzen (Backtracking) .

Prozeduren, Programme und Anfragen Ein Beispiel . . . .

Effizienzver besserungen Argumentregister . . . . Riicksetzrahmen . . . .

Verkleinerung der lokalen Umgebung Letztes Ziel und Endrekursion . Indizieren von Klauseln

Ubungen . . . Literaturhinweise . . . .

Inhalt

84 85 87 89 89 91 92 92 93 94 96 97 100 104 105

III

113 115 115 119 122 126 136 134 138 140 140 141 144 144 146 151 153 156 158 162 162 163 165 166 168 169 171

(11)

Inhalt XIII

5 Ubersetzung objektorientierter Sprachen 173

5.1 Konzepte objektorientierter Sprachen . 173

5.1.1 Objekte.... 174

5.1.2 Objektklassen . 175

5.1.3 Vererbung . . . 176

5.1.4 Generizitat.. 179

5.1.5 Informationskapselung 180

5.1.6 Zusammenfassung.. 180

5.2 Die Ubersetzung von Methoden 182

5.3 Schemata zur Ubersetzung von Vererbung 184

5.3.1 Ein Ubersetzungsschema fiir einfache Vererbung . 185 5.3.2 Ubersetzungsschemata fiir mehrfache Vererbung . 189

5.4 Generizitat. . . . 210

5.5 Ubungen. . . 218

5.6 Literaturhinweise . 223

6 Struktur von Ubersetzern 225

6.1 Ubersetzerteilaufgaben . 226

6.2 Die lexikalische Analyse 227

6.3 Der Sieber. . . 227

6.4 Die syntaktische Analyse. 228

6.5 Die semantische Analyse . 228

6.6 Die maschinenunabhiingige Optimierung 230

6.7 Die Adrefizuordnung . . . 232

6.8 Die Erzeugung des Zielprogramms ... 232

6.9 Die maschinenabhiingige Codeverbesserung 234

6.10 Reale Ubersetzerstrukturen . . . 234 6.11 Formale Spezifikation und Generierung von Ubersetzermoduln 236

6.12 Literaturhinweise . . . . 237

7 Lexikalische Analyse 239

7.1 Die Aufgabe der lexikalischen Analyse 239

7.2 Theoretische Grundlagen . . . 240

7.2.1 Worte und Sprachen . . . 240 7.2.2 Regulare Sprachen, reguliire Ausdriicke und endliche Automaten. 241 7.3 Sprache zur Spezifikation der lex. Analyse 252

7.3.1 Zeichenklassen... 252

7.3.2 Folgen von reguliiren Definitionen . 253

7.3.3 Nichtrekursive Klammerung . . 254

7.4 Die Generierung eines Scanners . . 254

7.4.1 Zeichenklassen... 254

7.4.2 Folgen von reguliiren Definitionen . 255

7.4.3 Implementierung des until-Konstrukts 257

7.4.4 Die Darstellung eines Scanners .... 261

(12)

XIV 7.5 7.5.1 7.5.2 7.5.3 7.6 7.6.1 7.6.2 7.7 7.8

8 8.1 8.2 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.2.7 8.2.8 8.3 8.3.1 8.3.2 8.3.3 8.3.4 8.3.5 8.3.6 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.4.6 8.4.7 8.5.1 8.5 8.5.2 8.6 8.7

Der Sieber . . . . Die Erkennung von Schliisselwortern . . . . Scanner mit Aufrufschnittstelle zum Sieber Symbolklassen . . . . Flex, ein Scanner-Generator unter UNIX . . Die Arbeitsweise von Flex-generierten Scannern Flex-Spezifikationen

Ubungen ...

Literaturhinweise . .

Syntaktische Analyse . . . . Die Aufgabe der syntaktischen Analyse.

Theoretische Grundlagen

Kontextfreie Grammatiken. . . . Kellerautomaten . . . .

Der Item-Kellerautomat einer kontextfreien Grammatik Grammatikfluf3analyse

Ein lineares Verfahren . . . . FIRST und FOLLOW ... . Der Spezialfall FIRSTl und FOLLOWl •

Reine Vereinigungsprobleme .

Top-down-Syntaxanalyse. . . . Einfiihrung . . . .

Top-down-Syntaxanalyse mit Zuriicksetzen in Prolog LL( k): Definition, Beispiele, Eigenschaften . . . . (Starke) LL(k)-Parser . . . . LL-Parser fur rechtsreguHire kontextfreie Grammatiken . Fehlerbehandlung in LL(k)-Parsern .

Bottom-up-Syntaxanalyse . . . . Einfiihrung . .. .. .. .. .. . .. .. . .. . Bottom-up-Analyse mit Zuriicksetzen in Prolog LR(k)-Analysatoren . . . . LR(k): Definition, Eigenschaften, Beispiele . LR(k)-Parser . . . . Fehlerbehandlung in LR-Parsern .. . Scannergenerierung mit LR-Techniken Bison, ein LALR(l)-Parsergenerator Bison-Eingabe ..

Fehlerbehandlung . Ubungen . . . Literaturhinweise .

Inhalt 262 263 263 263 266 266 266 268 269

. 271 271

275 275 283 286 292 300 302 306 312 308 312 313 317 325 329 339 353 353 354 357 368 372 383 390 394 394 396 396

401

(13)

Inhalt

9 9.1 9.1.1 9.1.2 9.1.3 9.1.4 9.2 9.2.1 9.2.2 9.3 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5 9.4.6 9.5 9.6 10 10.1 10.1.1 10.1.2 10.1.3 10.1.4 10.2 10.2.1 10.2.2 10.2.3 10.2.4 10.3 10.3.1 10.3.2 10.3.3 10.3.4 10.4 11 11.1 11.1.1 11.1.2 11.1.3

Semantische Analyse . . . . Aufgabe der semantischen Analyse Giiltigkeits- und Sichtbarkeitsregeln.

Uberpriifung der Kontext bedingungen Uberladung von Bezeichnern

Polymorphismus . . . . Attributgrammatiken. . . . Die Semantik einer Attributgrammatik . Eine Notation fiir Attributgrammatiken Einige Attributgrammatiken. . . . Die Generierung von Attributauswertern Attributabhiingigkeiten .. .

Attributauswertung . . . . Besuchsorientierte Auswerter ..

l-geordnete Attributgrammatiken

Absolut zyklenfreie Attributgrammatiken Parsergesteuerte Attributauswertung Ubungen .... .

Literaturhinweise . . . . Abstrakte Interpretation . Einfiihrung . . . . Beispiel 1: Rechnen mit Resten Beispiel 2: Neunerprobe . . . . Beispiel 3: Vorzeichenregeln . .

Bestandteile einer abstrakten Interpretation Abstrakte Interpretation (denotationelle Semantik) Die denotationelle Methode . . . . Grundprinzip der abstrakten Interpretation Verwendung von Hilfssemantiken . . . . Fallbeispiel: Striktheitsanalyse. . . . Abstrakte Interpretation (operationelle Semantik) . Die operationelle Methode . . . . Grundprinzip der abstrakten Interpretation Konstruktion abstrakter Interpretationen . Verwendung von Hilfssemantiken

Literaturhinweise . . . . Baume: Mustererkennung und Analyse Programmtransformationen . . . . Effizienzsteigernde Programmtransformationen Standardisierende Transformationen

Das zugrundeliegende Problem .. . . . .

xv

403 403 408 410 416 420 424 426 428 429 436 437 452 457 463 466 468 476 477 479 479 480 481 482 483 484 484 486 488 495 506 506 510 515 523 533 535 535 536 539 539

(14)

XVI 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11 12 12.1 12.1.1 12.1.2 12.1.3 12.2 12.2.1 12.2.2 12.2.3 12.3 12.4 12.4.1 12.4.2 12.5 12.6 12.6.1 12.6.2 12.6.3 12.6.4 12.7 12.8

Codeselektion . . . . Das M ustererkennungsproblem Das Baumanalyseproblem . . . Endliche Baumautomaten . . . Generierung von Mustererkennern ..

Die Generierung von Baumanalysatoren Baumautomaten mit Kosten.

Implementierung . Ubungen ...

Literaturhinweise . Codeerzeugung .

Abstrakte und reale Maschinen Sprachspezifische abstrakte Maschinen Universelle reale Maschinen . . . .

Codeerzeugung fiir abstrakte und reale Maschinen . Klassifikation von Architekturen . . . . CISC (Complex Instruction Set Computer) RISC (Reduced Instruction Set Computer) Intraprozessorparallelitiit. . . . Programmdarstellungen . . . . Codeerzeugung, integrierte Verfahren . Optimale Auswertungsordnung ....

Dynamisches Programmieren . . . . . Registerzuteilung durch Graphfiirbung Instruktionsanordnung . . . . Abhiingigkeitsgraphen fiir Basisblocke BefehlsfiieBband . . . .

Lange Befehlsworter . . . . Realistische VLIW-Rechner Ubungen ...

Literaturhinweise . Literatur.

Index . ..

Inhalt 541 545 547 550 553 557 559 564 565 566 569 569 569 570 573 576 576 577 578 580 584 584 588 591 593 593 601 603 610 612 613 615

626

Referenzen

ÄHNLICHE DOKUMENTE

Gesetz über die Pflichtversicherung für Kraftfahrzeughalter (Pflichtversicherungs- gesetz). Produkthaftungsgesetz Protokolle zum BGB

Die Verfasser hegen die Hoffnung, daß der Leser nach dem Studium des Buches in den Stand versetzt wird, energietechnische Verfahren bilanzieren und beurtei- len sowie

Besonderer Wert wird darauf gelegt, die Methoden der Be- schreibung und Verarbeitung zeitdiskreter (digitaler) Signale von vorne- herein mit einzuarbeiten und die engen

Trotzdem glaube ich, daB das Grundwissen zur linearen Algebra und analytischen Geometrie, welches in einer zweisemestrigen Vorlesung behandelt werden sollte, durch

Neben den Aufgaben, die die Inhalte der Einfiihrung in die Informatik abdecken, sind eine Reihe erganzender Aufgaben filr eine Vertiefung des Stof- fes und eine Hinfilhrung

Aus den gegenwärtig verfügbaren Einführungen in das Zivikecht hebt sich die Dar- stellung von Thomas Zerres mehrfach hervor: Zum einen informiert sie kurz und bündig auch über

Es gibt eine Vielzahl deutschsprachiger Bücher zur Statistik, wobei die Autoren unterschiedliche Schwerpunkte gesetzt haben- von der Darstellung spezifischer Lehrinhalte

Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Waren- bezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annabme, daB