Table Of ContenteXamen.press
eXamen.pressisteineReihe,dieTheorieund
PraxisausallenBereichenderInformatikfür
dieHochschulausbildungvermittelt.
Reinhard Wilhelm · Helmut Seidl
Übersetzerbau
Virtuelle Maschinen
Mit120Abbildungen
123
ReinhardWilhelm
UniversitätdesSaarlandes
66123Saarbrücken
[email protected]
HelmutSeidl
TechnischeUniversitätMünchen
FakultätfürInformatik
Boltzmannstraße3
85748Garching
[email protected]
BibliografischeInformationderDeutschenNationalbibliothek
DieDeutscheNationalbibliothekverzeichnetdiesePublikationinderDeutschen
Nationalbibliografie;detailliertebibliografischeDatensindimInternetüber
http://dnb.d-nb.deabrufbar.
DasvorliegendeBuchistalsNeuauflageausdemBuchWilhelm,R.;Maurer,D.Übersetzerbau:
Theorie,Konstruktion,Generierunghervorgegangen,dasinder1.Auflage(ISBN3-540-55704-
0)undder2.Auflage(ISBN3-540-61692-6)imSpringer-Verlagerschien.
ISSN1614-5216
ISBN978-3-540-49596-3 SpringerBerlinHeidelbergNewYork
DiesesWerkisturheberrechtlichgeschützt.DiedadurchbegründetenRechte,insbesondere
diederÜbersetzung,desNachdrucks,desVortrags,derEntnahmevonAbbildungenund
Tabellen,derFunksendung,derMikroverfilmungoderderVervielfältigungaufanderenWe-
genundderSpeicherunginDatenverarbeitungsanlagen,bleiben,auchbeinurauszugsweiser
Verwertung,vorbehalten.EineVervielfältigungdiesesWerkesodervonTeilendiesesWerkes
istauchimEinzelfallnurindenGrenzendergesetzlichenBestimmungendesUrheberrechts-
gesetzesderBundesrepublikDeutschlandvom9.September1965inderjeweilsgeltenden
Fassungzulässig.Sieistgrundsätzlichvergütungspflichtig.Zuwiderhandlungenunterliegen
denStrafbestimmungendesUrheberrechtsgesetzes.
SpringeristeinUnternehmenvonSpringerScience+BusinessMedia
springer.de
©Springer-VerlagBerlinHeidelberg2007
DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesem
WerkberechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,dasssolche
NamenimSinnederWarenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachten
wärenunddahervonjedermannbenutztwerdendürften.TextundAbbildungen wurden
mitgrößterSorgfalterarbeitet.VerlagundAutorkönnenjedochfüreventuellverbliebene
fehlerhafteAngabenundderenFolgenwedereinejuristischeVerantwortungnochirgendeine
Haftungübernehmen.
Satz:DruckfertigeDatenderAutoren
Herstellung:LE-TEX,Jelonek,Schmidt&VöcklerGbR,Leipzig
Umschlaggestaltung:KünkelLopkaWerbeagentur,Heidelberg
GedrucktaufsäurefreiemPapier 33/3100YL – 543210
Für Margret, Hannah, Eva, Barbara
R.W.
Für Kerstin und Anna
H.S.
Vorwort
ÜbersetzerfürhöhereProgrammiersprachensindgroßekomplexeSoftwaresysteme.
SiehabenabereinigebesondereEigenschaften,diesievordenmeistenanderenSoft-
waresystemenauszeichnen.
Ihre Funktionalität ist (fast) wohldefiniert. Idealerweise existieren vollständige
formaleoderzumindestpräziseBeschreibungenderQuellspracheundderZielspra-
che. Häufig gibt es dazu noch Beschreibungenvon Schnittstellen zum Betriebssy-
stem,zumProgrammiersystemundzuProgrammierumgebungen,zuanderenÜber-
setzernundzuProgrammbibliotheken.
Die Übersetzungsaufgabe lässt sich auf natürliche Weise in Teilaufgaben zer-
legen. Diese Zerlegung ergibt eine modulare Struktur, welche übrigens auch eine
kanonischeStrukturderüblichenÜbersetzerbaubücherinduziert.
IndenfünfzigerJahrenwurdebereitserkannt,dassdieImplementierungvonAn-
wendungssystemendirektinderMaschinensprachesowohlmühsamalsauchfehler-
anfälligistundzuProgrammenführt,diegenausoschnellveraltenwiedieRechner,
für die sie entwickelt wurden. Mit der Erfindung höherer maschinenunabhängiger
ProgrammiersprachenergabsichaberauchsofortdieNotwendigkeit,Übersetzerbe-
reitzustellen,dieinderLagesind,ProgrammedieserhöherenProgrammiersprachen
inMaschinensprachezuübersetzen.
Aufgrund dieser grundlegendenHerausforderungsind deshalb seit den fünfzi-
ger Jahren die verschiedenenTeilaufgabender ÜbersetzungGegenstandintensiver
Forschung. Für die Teilaufgabe der syntaktischen Analyse von Programmen wur-
denetwa KonzepteausdemBereichderformalenSprachenwie endlicheAutoma-
tenundkontextfreieGrammatikenübernommenundim Hinblickaufdiegegebene
Anwendungweiterentwickelt.DietheoretischeDurchdringungderProblemstellung
war dabei so erfolgreich,dass die Realisierungderfür syntaktischeAnalyse benö-
tigtenKomponenten(fast)vollständigautomatisiertwerdenkonnte:anstatt„zuFuß“
implementiertzuwerden,werdendieseKomponentenheuteweitgehendausSpezifi-
kationen,indiesemFallkontextfreieGrammatiken,generiert.SolcheGenerierungs-
verfahren werden auch für andere Komponenteneines Übersetzers angestrebt und
sindzumTeilbereitsrealisiert.
VIII Vorwort
Das vorliegende Buch strebt nicht an, ein Kochbuch für Übersetzer zu sein.
ManwirdhierdarumkeineRezeptefindenderArt:„UmeinenÜbersetzervonder
QuellspracheXindieMaschinenspracheYzukonstruieren,nehmeman....“ Unsere
Darstellungreflektiertdagegendie obenaufgezähltenBesonderheitendesÜberset-
zerbaus,insbesonderedasVorhandenseinpräziserAufgabenstellungenunddasBe-
streben,diesegenauzuverstehenundangemessenetheoretischeKonzeptezuihrer
systematischen Behandlung bereitzustellen. Idealerweise können solche Konzepte
dieGrundlageautomatischerGenerierungsverfahrenbilden.
DiesesBuchist fürStudierendederInformatikbestimmt.Die Kenntniszumin-
desteinerimperativenProgrammiersprachewirdvorausgesetzt.FürdieKapitelzur
ÜbersetzungfunktionalerundlogischerProgrammiersprachenistessichernützlich,
einemodernefunktionaleSpracheundPrologzumindestindenGrundzügenzuken-
nen.AndererseitskönnendieseKapitelauchzueinemvertieftenVerständnisdieser
Programmiersprachenbeitragen.
Aufbau desBuches
Fürdie neueAuflagedesBuchs,Wilhelm/Maurer:Übersetzerbau,entschiedenwir
uns, den Inhalt auf mehrere Bände zu verteilen.Dieser erste Band beschreibt,was
einÜbersetzertut,alsowelcheKorrespondenzzwischeneinemQuellprogrammund
einem Zielprogramm er herstellt. Dazu wird für eine imperative, eine funktionale,
eine logische undeine objektorientierteProgrammierspracheje eine geeignetevir-
tuelleMaschine(indenfrüherenAuflagenabstrakteMaschinegenannt)angegeben
und die Übersetzungvon Programmender jeweiligen Quellsprache in die Sprache
derzugehörigenvirtuellenMaschinegenaubeschrieben.
DievirtuellenMaschinendervorherigenAusgabewurdenvollständigüberarbei-
tet undmodernisiertmit dem Ziel, die Übersetzungsschematazuvereinfachenund
gegebenenfallszuvervollständigen.InvielgrößeremUmfangalsvorherwurdendie
verschiedenen gewählten Architekturen und Befehlssätze aneinander angeglichen,
umdieGemeinsamkeiten,aberauchUnterschiedlichkeitenderSprachkonzeptekla-
rerherauszuarbeiten.Alsvielleichtaugenfälligstes,wennauchnichtunbedingtwich-
tigstesMerkmalwachsenjetzt,wieeinLeserfrühererAuflagensoforterkennenwird,
dieKellerdervirtuellenMaschinen(wiemancheTräume)indenHimmel,alsonicht
mehr„vonobennachunten“.
BeiallenBeispiel-ProgrammiersprachenwurdennunFragmenterealerProgram-
miersprachenverwendet.AlsimperativeQuellsprachewurdeanstellevonPascaldie
ProgrammierspracheCgewählt–eineEntscheidungfürmehrRealitätsnäheundge-
gendieÄsthetik,wiemanbeimVergleichderentsprechendenKapitelindieserund
früherenAuflagenfeststellenkann.AlsobjektorientierteSprachedientwiedereine
TeilmengevonC++.GegenüberderDarstellungderzweitenAuflagewurdejedoch
aufeinedetaillierteDiskussionderMehrfachbeerbungverzichtet.
Ausgangspunktderin diesem BuchangegebenenÜbersetzungenvonimperati-
ven,funktionalen,logischenundobjektorientiertenProgrammeniststetseinestruk-
turierteInterndarstellungdesQuellprogramms,fürwelchesbereitseinfacheZusatz-
Vorwort IX
informationen wie etwa Gültigkeitsbereiche von Variablen oder Typinformationen
berechnet wurden. Ein solches analysiertes Quellprogramm werden wir später als
dekorierteabstrakteSyntaxdesQuellprogrammsbezeichnen.
ImzweitenBandwirddanndasWie derÜbersetzungbeschrieben.Wirwerden
die Frage behandeln,wie man den Übersetzungsprozessin einzelne Phasen unter-
teilt,welcheAufgabendabeidieeinzelnenPhasenerledigensollen,welcheTechni-
kenmanin ihnenbenutzt,wie manformalbeschreibenkann,was sie tun,undwie
eventuellauseinersolchenBeschreibungautomatischeinÜbersetzermodulerzeugt
werdenkann.
Danksagung
Nebenden Mitstreitern der früherenAuflagen möchtenwir denStudierendendan-
ken, die immer wieder verschiedene Versionen der virtuellen Maschinen geduldig
anhörten und uns wertvolle Rückmeldungen gaben. Nicht wenig zum Verständnis
trug auch die Visualisierungder virtuellen Maschinendurch Peter Ziewer bei. Für
subtile Einsichtenin die SemantikenvonC++ undJava dankenwir ThomasGaw-
litza und Michael Petter. Unser besonderer Dank gebührt jedoch Jörg Herter, der
mehrere Versionen des Buchs sorgfältig auf Inkonsistenzen durchsah und uns auf
vielerleiFehlerundMerkwürdigkeitenaufmerksammachte.
EinstweilenwünschenwiraberdergeneigtenLeserinunddemgeneigtenLeser
vielVergnügenmitdemvorliegendenBandundhoffen,dassdasBuchAppetitma-
chenmöge,fürdieLieblings-ProgrammierspracheblitzschnelleineneigenenÜber-
setzerzubasteln.
SaarbrückenundMünchen,Januar2007 ReinhardWilhelm,HelmutSeidl
WeitereMaterialienzudiesemBuchfindenSieaufderInternet-Seite:
http://www2.informatik.tu-muenchen.de/~seidl/compilers/
Inhaltsverzeichnis
1 Einleitung..................................................... 1
1.1 HöhereProgrammiersprachen................................ 1
1.2 ImplementierungvonProgrammiersprachen.................... 2
1.2.1 Interpreter .......................................... 2
1.2.2 Übersetzer.......................................... 3
1.2.3 RealeundvirtuelleMaschinen ......................... 4
1.2.4 KombinationenvonÜbersetzungundInterpretation ....... 5
1.3 AllgemeineLiteraturhinweise ................................ 6
2 ImperativeProgrammiersprachen ............................... 7
2.1 SprachkonzepteundihreÜbersetzung ......................... 7
2.2 DieArchitekturderC-Maschine .............................. 8
2.3 EinfacheAusdrückeundWertzuweisungen..................... 10
2.4 AnweisungenundAnweisungsfolgen.......................... 15
2.5 BedingteunditerativeAnweisungen........................... 16
2.6 SpeicherbelegungfürVariableneinfachenTyps ................. 22
2.7 SpeicherbelegungfürFelderundStrukturen .................... 23
2.8 ZeigerunddynamischeSpeicherbelegung...................... 28
2.9 Funktionen................................................ 34
2.9.1 DieSpeicherorganisationderC-Maschine................ 37
2.9.2 DerUmgangmitlokalenVariablen ..................... 39
2.9.3 BetretenundVerlassenvonFunktionen.................. 42
2.10 ÜbersetzungganzerProgramme .............................. 48
2.11 Aufgaben ................................................. 51
2.12 ListederRegisterderCMa .................................. 57
2.13 ListederCodeerzeugungsfunktionenderCMa .................. 57
2.14 ListederCMa-Instruktionen ................................. 58
2.15 Literaturhinweise........................................... 58