Grundkurs Compilerbau -  Uwe Meyer

Grundkurs Compilerbau (eBook)

(Autor)

eBook Download: EPUB
2024 | 2. Auflage
431 Seiten
Rheinwerk Computing (Verlag)
978-3-8362-9673-1 (ISBN)
Systemvoraussetzungen
23,92 inkl. MwSt
  • Download sofort lieferbar
  • Zahlungsarten anzeigen

Der Compilerbau ist eine der ältesten Disziplinen der Informatik, und ohne Compiler gäbe es keine Programmiersprachen, Frameworks oder Anwendungen. In diesem Fachbuch lernen Sie, wie Compiler funktionieren, und verstehen das Fundament der Programmiersprachen. Prof. Uwe Meyer bereitet Ihnen dazu die Grundlagen und die Funktionsweise des Compilerbaus modern und zeitgemäß auf und führt Sie von den Begriffsdefinitionen, Paradigmen und Konzepten der Programmiersprachen bis hin zur Generierung von Assemblercode und seiner Optimierung.

Aus dem Inhalt:

  • Sprache und Compiler
  • Konzepte und Paradigmen von Programmiersprachen
  • Lexikalische Analyse
  • Syntaxanalyse
  • Semantische Analyse
  • Variablenallokation
  • Code generieren
  • Code optimieren
  • Ausblick und Forschungsfragen



Professor Uwe Meyer leitet das Institut für Programmiersprachen und ihrer Anwendung an der Technischen Hochschule Mittelhessen in Gießen. Er gibt dort u. a. Veranstaltungen zum Compilerbau und verteilte Systeme. In der Lehre ist ihm die enge Verbindung von Praxis und Theorie besonders wichtig. Sein Forschungsschwerpunkt ist die Anwendungen des Compilerbaus für reversible Sprachen.

1    Einleitung


Programs must be written for people to read, and only incidentally for machines to execute.
– Herold Abelson & Gerald Jay Sussmann

1.1    Compiler und Sprache


Was ist ein Compiler?

Das Wort »compilare« ist lateinisch und bedeutet so viel wie »zusammenstellen«, »aufhäufen«.

Sicherlich haben Sie schon mit Compilern gearbeitet: Der Java-Compiler javac übersetzt Java-Programme in Java-Bytecode, der auf der Java Virtual Machine (JVM) ausgeführt werden kann, der C-Compiler gcc erzeugt Maschinenprogramme, die direkt auf Ihrem Rechner ausgeführt werden können.

Definition 1.1: Compiler

Unter einem Compiler versteht man ein Programm, das einen in einer Programmiersprache geschriebenen Quelltext in ein ausführbares Programm übersetzt.

Compilerbau ist die Informatik-Disziplin, die sich mit dem Entwurf und der Implementierung von Compilern befasst.

Der Compiler ist also das Programm, das Ihren Programmen dazu verhilft, ausgeführt zu werden, wie es in der zweiten Hälfte des Zitats von Abelson und Sussmann aus ihrem Standardwerk Structure and Interpretation of Computer Programs heißt.

Abbildung 1.1 veranschaulicht diese Definition und gibt Ihnen den ersten, noch sehr groben Überblick über den Compiler.

P und P' stehen dabei für Programme, die in den Programmiersprachen L und L' abgefasst sind. Der Compiler könnte zum Beispiel Ihr Programm hello.java, das in Java geschrieben ist, in hello.class übersetzen, das in der Sprache des Java-Bytecodes abgefasst ist.

Abbildung 1.1     Funktion eines Compilers

Warum sollten Sie sich mit Compilerbau beschäftigen? Dazu fallen mir gleich mehrere gute Gründe ein:

  • Wenn Sie verstehen, wie ein Compiler funktioniert, werden Sie auch ein besserer Programmierer oder eine bessere Programmiererin, weil Sie besser abschätzen können, warum die Programmiersprache, die Sie gerade benutzen, dieses oder jenes Feature hat oder nicht hat.

  • Compilerbau ist unzertrennbar mit dem Design von Programmiersprachen verbunden – das Verständnis dafür, was alles getan werden muss, um einen Compiler für eine Sprache zu erstellen, hilft beim Erlernen jeder Programmiersprache.

  • In dem Kapitel über die Konzepte von Programmiersprachen werden Sie – sofern Sie mindestens eine Programmiersprache kennen – viele Dinge wiedererkennen. Hier erfahren Sie, wie die Elemente der Programmiersprachen zusammenhängen.

  • Wir werden einige Datenstrukturen und Muster benutzen, die zum Lösen vieler anderer Probleme ebenfalls nützlich sind.

  • Compilerbau ist ein sehr anschauliches Beispiel dafür, wie Theorie (und davon werden Sie einige in diesem Buch lernen!) die praktische Arbeit enorm erleichtern kann: Lesen Sie die Geschichte des ersten Compilers auf der nächsten Seite!

  • Gleichzeitig ist ein großer Teil der Theorie auch für viele andere Gebiete der Informatik relevant. Endliche Automaten beispielsweise werden Ihnen oft begegnen, weil sie ein häufig anwendbares Modell sind.

  • Selbst einen Compiler zu schreiben ist ein spannendes Projekt!

Lassen Sie uns aber, bevor wir nun mit dem eigentlichen Inhalt beginnen, einen Blick in die Vergangenheit werfen:

Die ersten Compiler entstanden in den 1950er-Jahren, ohne dass eine Theorie über Compilerbau geschweige denn -werkzeuge existierten. John Backus beschreibt in [Backus J. , 1978], wie bis 1957 fast ausschließlich direkt in Maschinencode programmiert wurde, was aber dazu führte, dass die Programmierung und vor allem die Fehlersuche überproportional viel Zeit benötigten. Backus, damals angestellt bei IBM, startete daher Anfang 1954 das Projekt FORTRAN, eine Abkürzung für »FORmula TRANslator«, und die erste Version der gleichnamigen Sprache wurde im Frühjahr 1957 ausgeliefert. Die Zeitspanne von drei Jahren mag Ihnen sehr lang erscheinen, aber bedenken Sie, dass es keinerlei Vorerfahrungen und vor allem keine Algorithmen und Werkzeuge gab!

Der erste Compiler ist nach Meinung vieler der A-0-Compiler von Grace Hopper, die später die Programmiersprache COBOL entwickelte [Hopper, 1955].

In diesem Buch werden Sie viel Theorie lernen, vor allem über formale Sprachen, Automaten und Parser-Verfahren. Denken Sie dabei immer daran, dass Sie ohne diese Theorie niemals in der Lage wären, einen Compiler in wenigen Wochen zu entwickeln!

Nach FORTRAN und dann 1960 dem ersten COBOL-Compiler, ebenfalls entwickelt von Grace Hopper, hat vor allem die Entwicklung von ALGOL (»ALGOrithmic Language«) die Evolution von Programmiersprachen deutlich vorangetrieben. Von ALGOL stammt unter anderem Pascal ab [Wirth, The programming language pascal, 1971] und von diesem leiten sich direkt oder indirekt die meisten der heute populären Sprachen her.

Nachdem wir einen ersten, sehr kurzen Blick auf Compiler geworfen haben, müssen wir im zweiten Schritt den in der Definition vorkommenden Begriff »Programmiersprache« untersuchen.

Eine Programmiersprache ist eine Sprache, in der »Programme« geschrieben werden. Was aber ist dann eine Sprache?

Die Nutzung des Wortes »Sprache« ist hier nicht zufällig – vor allem in den Kapiteln 3 und 4 werden wir die Beziehungen zwischen natürlichen Sprachen und Sprache, wie man sie in der Informatik nutzt, tiefer beleuchten.

So viel sei vorweggenommen: Jede Sprache besteht aus Grundeinheiten, zum Beispiel den Buchstaben und Zeichen (Komma, Punkt, ...) in der deutschen Sprache. Aus diesen Zeichen bilden wir Wörter. Legen wir das lateinische Alphabet (plus im Deutschen die Umlaute) als Menge der zulässigen Buchstaben zugrunde, könnten wir unendlich viele Wörter bilden, von denen die meisten im Deutschen aber völlig sinnfrei wären. Für die deutsche Sprache enthält der Duden alle gebräuchlichen Wörter. Wir nehmen insbesondere bei gesprochener Sprache eher die Wörter als Einheiten wahr als die Buchstaben, aus denen die Wörter bestehen.

Um dieses Denkmuster zu vervollständigen, fügen wir Wörter zu Sätzen zusammen. Dabei könnten wir beliebig Wörter aus dem Duden aneinanderreihen – in den seltensten Fällen ergibt das aber einen korrekten und sinnvollen Satz. Warum?

Es fehlt noch die Bauanleitung für Sätze!

Obwohl der Duden nur endlich viele »zugelassene« Wörter enthält, können Sie daraus unendlich viele korrekte deutsche Sätze formen. Der Mechanismus, der dies bewerkstelligt, sozusagen die Bauanleitung, ist die Grammatik.

Diese Bauanleitungen sind meistens relativ kompakt – selbst die für die meisten von uns komplizierte deutsche Grammatik wird im Duden auf nur ca. 70 Seiten beschrieben, während das Verzeichnis der Wörter 1100 Seiten umfasst.

Mit diesen drei Konzepten – »Zeichen«, »Wörter« und »Grammatik« – können wir nun also korrekte Sätze zusammenbauen.

Abbildung 1.2     Von Zeichen zu Wörtern und Sätzen

Das reicht aber leider noch nicht, wie beispielsweise der Satz »Fahrrad spielt flüssiges Buch« zeigt:

  • Besteht der Satz aus lauter Buchstaben des Alphabetes? Ja!

  • Besteht der Satz nur aus Wörtern, die im Duden stehen? Ja!

  • Ist der Satz grammatikalisch korrekt? Ja!

Der Inhalt des Satzes ist aber völlig sinnfrei. Hm.

Neben den in Abbildung 1.2 gezeigten formalen Konzepten, die die Syntax beschreiben, gehört zu einer Sprache auch die Bedeutung, die Semantik. In jeder Sprache (sowohl in den natürlichen Sprachen als auch in den Programmiersprachen) gibt es neben den syntaktischen Regeln daher auch semantische Regeln, die die Bedeutung der Sätze festlegen.

Alle Begriffe, die wir bis hierhin anhand einer natürlichen Sprache eingeführt haben, finden sich auch so in Programmiersprachen: In Kapitel 3 werden wir uns ansehen, wie wir – jetzt für eine Programmiersprache und nicht für eine natürliche Sprache – aus Zeichen Wörter bilden können.

In den folgenden Kapiteln 4 und 5 starten wir in die nächste Stufe: Wir erstellen eine Grammatik und bauen damit aus den Wörtern Sätze. Die Sätze sind in einer Programmiersprache verfasste Quelltexte, und wir können dann feststellen, ob die Programme syntaktisch korrekt sind.

Kapitel 6 ist überschrieben mit »Semantische Analyse«. Darunter versteht man im Compilerbau aber »nur« die Prüfung...

Erscheint lt. Verlag 1.8.2024
Sprache deutsch
Themenwelt Mathematik / Informatik Informatik Programmiersprachen / -werkzeuge
ISBN-10 3-8362-9673-X / 383629673X
ISBN-13 978-3-8362-9673-1 / 9783836296731
Informationen gemäß Produktsicherheitsverordnung (GPSR)
Haben Sie eine Frage zum Produkt?
EPUBEPUB (Wasserzeichen)
Größe: 9,0 MB

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: EPUB (Electronic Publication)
EPUB ist ein offener Standard für eBooks und eignet sich besonders zur Darstellung von Belle­tristik und Sach­büchern. Der Fließ­text wird dynamisch an die Display- und Schrift­größe ange­passt. Auch für mobile Lese­geräte ist EPUB daher gut geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür die kostenlose Software Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür eine kostenlose App.
Geräteliste und zusätzliche Hinweise

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Das umfassende Handbuch

von Johannes Ernesti; Peter Kaiser

eBook Download (2023)
Rheinwerk Computing (Verlag)
35,92
Deterministische und randomisierte Algorithmen

von Volker Turau; Christoph Weyer

eBook Download (2024)
De Gruyter (Verlag)
64,95
Das Handbuch für Webentwickler

von Philip Ackermann

eBook Download (2023)
Rheinwerk Computing (Verlag)
39,92