UID:
almafu_9958132170802883
Format:
1 online resource (1,298 pages).
Edition:
2., aktualisierte Auflage.
ISBN:
1-283-73637-3
,
3-86326-574-2
Series Statement:
It Informatik
Content:
Compiler Grundsätze, Techniken und Werkzeuge: das "Drachenbuch" von Aho, Sethi und Ullman gilt als das unumstrittene Referenzbuch des Compilerbaus. Das Autorenteam, verstärkt durch die weltberühmte Informatikerin Monica Lam, hat das Standardwerk in einer zweiten Auflage komplett überarbeitet veröffentlicht. Es bietet eine in allen Aspekten detaillierte Einführung in die Theorie und Praxis des Compilerbaus. Das Buch stellt, beginnend mit der Beschreibung der Grammatik einfacher Sprachen, die Grundideen vor, die hinter der Compiler-Technologie stehen und vertieft dann im zweiten Teil die vorgestellten Techniken. Die Autoren behandeln wichtige Themen wie die lexikalische Analyse, die Syntaxanalyse, Typüberprüfung, Zwischencodegenerierung, Codeoptimierung und Softwaredesign. Neu hinzugefügt wurden vier Kapitel, die sich mit der Laufzeitumgebung sowie den Besonderheiten moderner Prozessorarchitektur beschäftigen. Dieses geballte Wissen wird in Praxisbeispielen effizient zusammengeführt. Dabei wird die Verwendung der Werkzeuge wie lex und yacc in Beispielen demonstriert. Das ursprüngliche Drachenbuch stützte sich auf die Werkzeuge lex und yacc, um Compiler in der Programmiersprache C zu entwickeln. Um den heutigen Ansprüchen gerecht zu werden, beinhaltet die Neuauflage das Übersichtskapitel 2, zusammen mit Anhang A, deshalb ein komplett in Java entwickeltes Compiler Front-End. Da die restlichen Kapitel (insbesondere Kapitel 3, 4 und 5) immer noch auf lex und yacc aufbauen, wurde in der deutschen Übersetzung der Anhang C hinzugefügt. Dieser stellt das Werkzeug SableCC vor, mit dem Lexer und Parser in Java erstellt werden können. Vorgestellt wird auch, wie man mit SableCC abstrakte Syntaxbäume generieren und Analysephasen implementieren kann. Der Anhang C sowie die CWS-Webseite zu diesem Buch enthalten zusätzliche Übungen. Diese Ergänzungen ermöglichen
Content:
den Einsatz dieses Buches sowohl für die Lehre, basierend auf Java, als auch die praktische Anwendung des Wissens für Informatiker, die in Java entwickeln. Wahrlich ein "Drachenbuch" Dieses Buch richtet sich an Studierende und Praktiker aus der Informatik und an alle, die effizienten Code entwickeln wollen. Begleitend zum Buch dazu gibt es Lösungsansätze zu den Aufgaben und alle Abbildungen aus dem Buch als Foliensatz. Inhalt Struktur eines Compilers Evolution der Programmiersprachen Wissenschaft des Compilerbaus Anwendungen der Compilertechnologie Grundlagen von Programmiersprachen Ein einfacher syntaxgerichteter Übersetzer Lexikalische Analyse (neu) Syntaktische Analyse Syntaxgerichtete Übersetzung Zwischencodeerzeugung Laufzeitumgebungen (neu) Codeerzeugung Maschinenunabhängige Optimierungen Optimierungen für Parallelität und Lokalität (neu) Interprozedurale Analyse (neu) CWS Für Dozenten Alle Abbildungen als Foliensatz sowie ausgewählter Java Code Für Studenten Lösungshinweise zu den Aufgaben sowie ausgewählter Java Code.
Note:
Compiler - Prinzipien, Techniken und Werkzeuge - 2. aktualisierte Auflage -- Inhaltsübersicht -- Inhaltsverzeichnis -- Vorwort -- Zur deutschen Ausgabe -- Kapitel 1 Einleitung -- 1.1 Sprachprozessoren -- Übungen zu Abschnitt 1.1 -- 1.2 Die Struktur eines Compilers -- 1.2.1 Lexikalische Analyse -- 1.2.2 Syntaxanalyse -- 1.2.3 Semantische Analyse -- 1.2.4 Zwischencodeerzeugung -- 1.2.5 Codeoptimierung -- 1.2.6 Codeerzeugung -- 1.2.7 Umgang mit Symboltabellen -- 1.2.8 Gruppieren von Phasen in Läufe -- 1.2.9 Werkzeuge zumCompilerbau -- 1.3 Die Evolution der Programmiersprachen -- 1.3.1 Der Weg zu höheren Programmiersprachen -- 1.3.2 Einfluss auf Compiler -- Übung zu Abschnitt 1.3 -- 1.4 Die Wissenschaft des Compilerbaus -- 1.4.1 Modellierung bei Compilerdesign und-implementierung -- 1.4.2 DieWissenschaft der Codeoptimierung -- 1.5 Anwendungen der Compilertechnologie -- 1.5.1 Implementierung von höheren Programmiersprachen -- 1.5.2 Optimierungen für Computerarchitekturen -- 1.5.3 Entwurf neuer Computerarchitekturen -- 1.5.4 Programmübersetzung -- 1.5.5 Werkzeuge zur Produktivitätssteigerung -- 1.6 Grundlagen von Programmiersprachen -- 1.6.1 Unterscheidung zwischen statisch und dynamisch -- 1.6.2 Umgebungen und Zustände -- 1.6.3 Statischer Gültigkeitsbereich und Blockstruktur -- 1.6.4 Explizite Zugriffskontrolle -- 1.6.5 Dynamischer Gültigkeitsbereich -- 1.6.6 Mechanismen zur Parameterübergabe -- 1.6.7 Aliasing -- Übungen zu Abschnitt 1.6 -- Zusammenfassung -- Literatur zu Kapitel 1 -- Kapitel 2 Ein einfacher syntaxgerichteter Übersetzer -- 2.1 Einführung -- 2.2 Syntaxdefinition -- 2.2.1 Grammatikdefinition -- 2.2.2 Ableitungen -- 2.2.3 Parse-Bäume -- 2.2.4 Mehrdeutigkeit -- 2.2.5 Assoziativität von Operatoren -- 2.2.6 Operatorenpräzedenz -- Übungen zu Abschnitt 2.2 -- 2.3 Syntaxgerichtete Übersetzung -- 2.3.1 Postfixnotation.
,
2.3.2 Synthetisierte Attribute -- 2.3.3 Einfache syntaxgerichtete Definitionen -- 2.3.4 Durchlaufen von Bäumen -- 2.3.5 Übersetzungsverfahren -- Übungen zu Abschnitt 2.3 -- 2.4 Syntaxanalyse (Parsing) -- 2.4.1 Top-Down-Syntaxanalyse -- 2.4.2 Prädiktive Syntaxanalyse -- 2.4.3 Verwendungszweck von -Produktionen -- 2.4.4 Entwurf eines prädiktiven Parsers -- 2.4.5 Linksrekursion -- Übung zu Abschnitt 2.4 -- 2.5 Übersetzer für einfache Ausdrücke -- 2.5.1 Abstrakte und konkrete Syntax -- 2.5.2 Anpassen des Übersetzungsverfahrens -- 2.5.3 Prozeduren für die Nichtterminale -- 2.5.4 Vereinfachen des Übersetzers -- 2.5.5 Das vollständige Programm -- 2.6 Lexikalische Analyse -- 2.6.1 Entfernen von Leerzeichen und Kommentaren -- 2.6.2 Vorausschauendes Lesen -- 2.6.3 Konstanten -- 2.6.4 Erkennen von Schlüsselwörtern und Bezeichnern -- 2.6.5 Ein lexikalischer Scanner (kurz Lexer) -- Übungen zu Abschnitt 2.6 -- 2.7 Symboltabellen -- 2.7.1 Symboltabellen nach Gültigkeitsbereich -- 2.7.2 Verwendung von Symboltabellen -- 2.8 Zwischencodeerzeugung -- 2.8.1 Zwei Arten der Zwischendarstellung -- 2.8.2 Konstruktion von Syntaxbäumen -- 2.8.3 Statische Überprüfung -- 2.8.4 Drei-Adress-Code -- Übungen zu Abschnitt 2.8 -- Zusammenfassung -- Kapitel 3 Lexikalische Analyse -- 3.1 Die Rolle des Lexers -- 3.1.1 Lexikalische Analyse und Syntaxanalyse im Vergleich -- 3.1.2 Token,Muster und Lexeme -- 3.1.3 Attribute für Token -- 3.1.4 Lexikalische Fehler -- Übungen zu Abschnitt 3.1 -- 3.2 Eingabepuffer -- 3.2.1 Pufferpaare -- 3.2.2 Wächter -- 3.3 Spezifikation von Token -- 3.3.1 Strings und Sprachen -- 3.3.2 Operationen an Sprachen -- 3.3.3 Reguläre Ausdrücke -- 3.3.4 Reguläre Definitionen -- 3.3.5 Erweiterungen regulärerAusdrücke -- Übungen zu Abschnitt 3.3 -- 3.4 Tokenerkennung -- 3.4.1 Übergangsdiagramme -- 3.4.2 Erkennen von reservierten Wörtern und Bezeichnern.
,
3.4.3 Abschluss des Beispiels -- 3.4.4 Architektur eines Lexers auf der Grundlage von Übergangsdiagrammen -- Übungen zu Abschnitt 3.4 -- 3.5 Der Generator Lex für lexikalische Scanner -- 3.5.1 Verwendung von Lex -- 3.5.2 Struktur von Lex-Programmen -- 3.5.3 Konfliktlösung in Lex -- 3.5.4 Der Lookahead-Operator -- 3.6 Endliche Automaten -- 3.6.1 Nichtdeterministische endliche Automaten -- 3.6.2 Übergangstabellen -- 3.6.3 Akzeptieren von Eingabestrings durch Automaten -- 3.6.4 Deterministische endliche Automaten -- Übungen zu Abschnitt 3.6 -- 3.7 Von regulären Ausdrücken zu Automaten -- 3.7.1 Umwandlung eines NFA in einen DFA -- 3.7.2 Simulation eines NFA -- 3.7.3 Effizienz der NFA-Simulation -- 3.7.4 Aufbau eines NFA aus einem regulären Ausdruck -- 3.7.5 Effizienz von stringverarbeitenden Algorithmen -- Übungen zu Abschnitt 3.7 -- 3.8 Entwurf eines Generators für lexikalische Scanner -- 3.8.1 Die Struktur des generierten Scanners -- 3.8.2 Pattern Matching auf der Grundlage von NFAs -- 3.8.3 DFAs für lexikalische Scanner -- 3.8.4 Implementieren des Lookahead-Operators -- Übungen zu Abschnitt 3.8 -- 3.9 Optimierung des Pattern Matching auf DFA-Grundlage -- 3.9.1 Wichtige Zustände eines NFA -- 3.9.2 Aus dem Syntaxbaum berechnete Funktionen -- 3.9.3 Berechnen von nullable, firstpos und lastpos -- 3.9.4 Berechnen von followpos -- 3.9.5 Direkte Konvertierung eines regulären Ausdrucks in einen DFA -- 3.9.6 Minimierung der Anzahl von Zuständen eines DFA -- 3.9.7 Zustandsminimierungin lexikalischen Scannern -- 3.9.8 Kompromisse zwischen Raum und Zeit bei der DFA-Simulation -- Zusammenfassung -- Übungen zu Abschnitt 3.9 -- Literatur zu Kapitel 3 -- Kapitel 4 Syntaktische Analyse -- 4.1 Einführung -- 4.1.1 Die Rolle des Parsers -- 4.1.2 Repräsentative Grammatiken -- 4.1.3 Behandlung von Syntaxfehlern -- 4.1.4 Strategien für die Fehlerbehebung.
,
4.2 Kontextfreie Grammatiken -- 4.2.1 Formale Definition einer kontextfreien Grammatik -- 4.2.2 Konventionen für die Notation -- 4.2.3 Ableitungen -- 4.2.4 Parse-Bäume und Ableitungen -- 4.2.5 Mehrdeutigkeit -- 4.2.6 Verifizieren der von einer Grammatik generierten Sprache -- 4.2.7 Kontextfreie Grammatiken und reguläre Ausdrücke im Vergleich -- Übungen zu Abschnitt 4.2 -- 4.3 Schreiben einer Grammatik -- 4.3.1 Lexikalische und syntaktische Analyse -- 4.3.2 Eliminieren von Mehrdeutigkeiten -- 4.3.3 Eliminieren der Linksrekursion -- 4.3.4 Linksfaktorisierung -- 4.3.5 Nicht kontextfreie Sprachkonstrukte -- Übungen zu Abschnitt 4.3 -- 4.4 Top-Down-Parsing -- 4.4.1 Rekursiv absteigendes Parsing -- 4.4.2 FIRST und FOLLOW -- 4.4.3 LL(1)-Grammatiken -- 4.4.4 Nichtrekursive prädiktive Syntaxanalyse -- 4.4.5 Fehlerbehebung bei der prädiktiven Syntaxanalyse -- Übungen zu Abschnitt 4.4 -- 4.5 Bottom-Up-Parsing -- 4.5.1 Reduktionen -- 4.5.2 Handle-Stutzung -- 4.5.3 Shift-Reduce-Syntaxanalyse -- 4.5.4 Konflikte bei der Shift-Reduce-Syntaxanalyse -- Übungen zu Abschnitt 4.5 -- 4.6 Einführung in die LR-Syntaxanalyse: einfaches LR -- 4.6.1 Warum LR-Parser? -- 4.6.2 Items und der LR(0)-Automat -- 4.6.3 Der LR-Parsealgorithmus -- 4.6.4 Aufbau von SLR-Parsertabellen -- 4.6.5 Sinnvolle Präfixe -- Übungen zu Abschnitt 4.6 -- 4.7 Leistungsfähigere LR-Parser -- 4.7.1 Kanonische LR(1)-Items -- 4.7.2 Aufbau von LR(1)-Item-Mengen -- 4.7.3 Kanonische LR(1)-Parsertabellen -- 4.7.4 Aufbau von LALR-Parsertabellen -- 4.7.5 Effizienter Aufbau von LALR-Parsertabellen -- 4.7.6 Komprimierung von LR-Parsertabellen -- Übungen zu Abschnitt 4.7 -- 4.8 Mehrdeutige Grammatiken -- 4.8.1 Präzedenz und Assoziativität zur Konfliktlösung -- 4.8.2 Mehrdeutigkeit durch ein "hängendes else" -- 4.8.3 Fehlerbehebung beim LR-Parsing -- Übungen zu Abschnitt 4.8 -- 4.9 Parsergeneratoren.
,
4.9.1 Der Parsergenerator Yacc -- 4.9.2 Einsatz von Yacc bei mehrdeutigen Grammatiken -- 4.9.3 Erstellen von Yacc-Lexern mit Lex -- 4.9.4 Fehlerbehebung bei Yacc -- Übungen zu Abschnitt 4.9 -- Zusammenfassung -- Literatur zu Kapitel 4 -- Kapitel 5 Syntaxgerichtete Übersetzung -- 5.1 Syntaxgerichtete Definitionen -- 5.1.1 Ererbte und synthetisierte Attribute -- 5.1.2 Auswerten einer syntaxgerichteten Definitionan an den Knoten eines Parse-Baumes -- Übungen zu Abschnitt 5.1 -- 5.2 Auswerten einer syntaxgerichteten Definitionan den Knoten eines Parse-Baumes -- 5.2.1 Abhängigkeitsgraphen -- 5.2.2 Reihenfolge der Auswertung von Attributen -- 5.2.3 S-attributierte Definitionen -- 5.2.4 L-attributierte Definitionen -- 5.2.5 Semantische Regeln mit kontrollierten Nebenwirkungen -- Übungen zu Abschnitt 5.2 -- 5.3 Anwendungen der syntaxgerichteten Übersetzung -- 5.3.1 Aufbau von Syntaxbäumen -- 5.3.2 Die Struktur eines Typs -- Übungen zu Abschnitt 5.3 -- 5.4 Verfahren zur syntaxgerichtetenÜbersetzung -- 5.4.1 Postfix-Übersetzungsverfahren -- 5.4.2 Parserstack-Implementierungen von syntaxgerichteten Postfix-Übersetzungen -- 5.4.3 Syntaxgerichtete Übersetzungen mit Aktionen innerhalb von Produktionen -- 5.4.4 Eliminieren der Linksrekursion aus syntaxgerichteten Übersetzungen -- 5.4.5 Syntaxgerichtete Übersetzungen für L-attributierte Definitionen -- Übungen zu Abschnitt 5.4 -- 5.5 Implementieren von L-attributierten syntaxgerichteten Definitionen -- 5.5.1 Übersetzung bei der rekursiv absteigenden Syntaxanalyse -- 5.5.2 Codeerzeugung im laufenden Betrieb -- 5.5.3 L-attributierte syntaxgerichtete Definitionen und LL-Syntaxanalyse -- 5.5.4 Bottom-Up-Syntaxanalyse von L-attributierten syntaxgerichteten Definitionen -- Übungen zu Abschnitt 5.5 -- Zusammenfassung -- Literatur zu Kapitel 5 -- Kapitel 6 Zwischencodeerzeugung -- 6.1 Varianten von Syntaxbäumen.
,
6.1.1 Gerichtete azyklische Graphen für Ausdrücke.
Additional Edition:
ISBN 3-8273-7097-3
Language:
German
Bookmarklink