Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Agenda Motivation Formale Sprachen Compiler Compilerentwicklung

Ähnliche Präsentationen


Präsentation zum Thema: "Agenda Motivation Formale Sprachen Compiler Compilerentwicklung"—  Präsentation transkript:

0 Übersetzung von künstlichen Sprachen
Formale Sprachen und Übersetzer

1 Agenda Motivation Formale Sprachen Compiler Compilerentwicklung
Ausblick

2 Motivation Agenda Formale Sprachen Compiler Compilerentwicklung
Ausblick

3 Compiler Werkzeug in der Softwareentwicklung
Klassische Aufgaben eines Compilers Übersetzung eines Programms aus einer Quellsprache A in eine Zielsprache B Fehlermeldung und Fehlerbehandlung

4 Compiler vs. Interpreter
Interpreter = direkte Programmausführung Compiler sind schneller und effizienter Kompilierte Programme ohne Compiler ausführbar

5 Formale Sprachen Agenda Motivation Compiler Compilerentwicklung
Ausblick

6 Formale Sprachen Grundlage der systematischen Sprachanalyse
Beim Entwurf von Programmiersprachen und bei der Analyse von Programmen eingesetzt Beispiele für formale Sprachen: Programmiersprachen, wie C oder Java Abfragesprachen wie SQL Algebraische Ausdrücke ...

7 Terminologie Alphabet Wort Formale Sprache
Ein Alphabet Σ ist eine endliche, nicht leere Menge von Symbolen Wort Ein Wort ω über Σ ist eine endliche Folge von Symbolen aus Σ. Das leere Wort wird mit ε bezeichnet. Σ* ist die Menge aller Worte über Σ Formale Sprache Eine Sprache L ist eine Teilmenge von Σ*

8 Terminologie Produktion Formale Grammatik
Eine Produktion P ist eine Vorschrift zur Ersetzung von Wörtern durch andere Wörter Formale Grammatik Eine formale Grammatik G beschreibt Regeln, wie aus einem Alphabet Σ Worte ω einer bestimmten Sprache L gebildet werden

9 Formale Grammatiken Eine formale Grammatik G ist ein Vierer-Tupel (N, Σ, P, S): N = Menge der Nichtterminalsymbole Σ = Menge der Terminalsymbole N und Σ sind zueinander disjunkt, es gilt somit N  Σ =  X := N  Σ ist das Totalalphabet P ist die endliche Menge der Produktionen oder Ableitungsregeln S  N bezeichnet das Startsymbol Formale Grammatiken erzeugen formale Sprachen  Synthese Formale Grammatiken werden zur Sprachanalyse eingesetzt  Analyse

10 Anwendung von Ableitungsregeln
Vorgehensweise: Ausgangspunkt ist das Startsymbol S S gemäß Produktion durch rechte Seite der Produktion ersetzen Falls das resultierende Wort noch Nichtterminalsymbole enthält, Anwendung einer weiteren Produktion Wiederholung so lange, bis das resultierende Wort nur noch Terminalsymbole enthält Beispiel: G = { {A,B}, {a,b}, {P1: A a, P2: B b}, {AB} } Anwendung von P1  ω = aB Anwendung von P2  ω = ab

11 Chomsky-Hierarchie 1956 von Noam Chomsky entwickelt
Typ-0 Grammatik: Unbeschränkte Grammatik Keinerlei Einschränkungen Typ-1 Grammatik: Kontextsensitive Grammatik P1: αAβ αγβ, mit A  N, γ  X\{ε} , α, β  X* P2: S  ε Terminalsymbole auf der linken Seite einer Produktionsregel erlaubt

12 Chomsky-Hierarchie Typ-2 Grammatik: Kontextfreie Grammatik
P: A  α, mit A  N und α  X* Terminalsymbole nicht auf der linken Seite einer Produktionsregel erlaubt Definition der syntaktischen Struktur Typ-3 Grammatik: Reguläre Grammatik P1: A Bω oder P1: A ωB P2: A  ω, mit A, B  N und ω  Σ * Definition der lexikalischen Struktur

13 Compiler Agenda Motivation Formale Sprachen Compilerentwicklung
Ausblick

14 Phasen der Übersetzung
Lexikalische Analyse Syntaktische Analyse Semantische Analyse Zwischencode-Erzeugung Codeoptimierung Code-Erzeugung Symboltabellenverwaltung Fehlermeldung und Fehlerbehandlung

15 Lexikalische Analyse (Scanning)
Aufteilung des Stroms von Eingabezeichen in Symbole Überprüfung auf gültige Eingabezeichen Herausfiltern von Leerzeichen und Symbolen Mögliches Beispiel: Ausdruck A = 2*b+6 Bezeichner: A, b Zahlen: 2, 6 Zuweisungssymbol: =  Symboltabelle Pluszeichen: + Multiplikationszeichen: * Id Symbol Attribute 1 A ... 2 = 3 4 * 5 b 6 + 7

16 Syntaxanalyse (Parsing)
Überprüfung auf syntaktische Korrektheit Konstruktion eines Syntaxbaums aus der Symboltabelle Mögliches Beispiel:

17 Semantische Analyse Typüberprüfung Eindeutigkeitsprüfung
Gültigkeitsprüfung Erweiterung der Symboltabelle Erweiterung des Syntaxbaums

18 Zwischencode-Erzeugung
Reduktion der Komplexität des Kompiliervorgangs Erzeugung einer maschinenunabhängigen Form Zwischencode ist portierbar Mögliches Beispiel: Drei-Adress-Code temp1 := 6 temp2 : = 2 temp3 := id5 * temp2 temp4 := temp3 + temp1 id1 := temp4 Id Symbol Attribute 1 A ... 2 = 3 4 * 5 b 6 + 7

19 Code-Optimierung Auffinden und Beseitigen von Ineffizienzen
Benutzung maschinenspezifischer Befehle Elimination von nicht erreichbaren Programmcode Optimierung von Schleifen Einsparung von Maschinenbefehlen Beispiel: temp1 := id5 * 2 id1 := temp1 + 6

20 Code-Erzeugung Erzeugung des finalen Zielcodes
Umwandlung der Instruktionen in funktionserhaltende Folgen von Maschinenbefehlen Speicherallokation für die im Programm verwendeten Variablen Mögliches Beispiel: MOV id5, R1 MUL 2, R1 ADD 6, R1 MOV R1, id1

21 Symboltabellenverwaltung
Querschnittsfunktion Symboltabelle = Datenstruktur mit Informationen über Symbole Schnelles Auffinden von Informationen Schnelles Abspeichern von Daten Oftmals Implementierung in Form einer Hash-Tabelle Id Symbol Attribute 1 A ... 2 = 3 4 * 5 b 6 + 7

22 Fehlerbehandlung und -meldung
Querschnittsfunktion Fortführung des Kompiliervorgangs nach Auftreten eines Fehlers Großteil der Fehler in den Phasen Syntaxanalyse und semantische Analyse Beispiel: String s = 5;

23 Systemumgebung eines Compilers
Präprozessor Vorbereitung und Erzeugung der Eingabe Assembler Übersetzung von Assemblersprache in die Zielsprache Lader/Binder Anfordern von Speicherbereichen, Umrechnung von relative in absolute Adressen und Laden des Programms in den Arbeitsspeicher Zusammenstellung des Programms aus einzelnen Programmmodulen

24 Werkzeuge Parser-Generatoren Scanner-Generatoren
Automatische Erzeugung eines Parsers mit Hilfe kontextfreier Grammatiken Scanner-Generatoren Automatische Erzeugung eines Scanners anhand einer Spezifikation Syntaxgesteuerte Übersetzungsmaschinen Automatische Zwischencode-Erzeugung auf Basis eines Syntaxbaums Automatische Code-Generatoren Umwandlung von Zwischencode-Anweisungen in Zielcode Datenflussmaschinen Optimierung des Datenflusses

25 Compilerentwicklung Agenda Motivation Formale Sprachen Compiler
Ausblick

26 Planung eines Compilers
Gegebenheiten der Quellsprache Größe der Sprache  problematisch!! Ausdehnungsgeschwindigkeit der Sprache Gegebenheiten der Zielsprache Überprüfung auf Korrektheit Überprüfung des Laufzeitverhaltens

27 Planung eines Compilers
Aspekte der Leistungsfähigkeit Compilergeschwindigkeit Codequalität Fehlerdiagnostik Portabilität Wartungsfreundlichkeit

28 Planung eines Compilers
Entwicklungsumgebungen und Werkzeuge make-Befehl (UNIX) Profiler Lex Yacc Testen und Wartung Regressions-Tests Code-Kommentierungen Dokumentation

29 Bootstrapping Methode zur schrittweisen Compilerentwicklung
Darstellungsform: T-Diagramm S = Quellsprache T = Zielsprache/Zielmaschine I = Implementierungssprache C = Compilername S C T I

30 Schrittweise Entwicklung mittels Bootstrapping
Ziel: Implementierung eines C-Compilers für eine Linux-Maschine Schritt 1: C C2 Linux C C1 Linux ‘ C Linux ‘ C C1 Linux ‘ C1 gegeben C2 programmieren Linux ‘

31 Schrittweise Entwicklung mittels Bootstrapping
Linux C C3 Linux C Linux ‘ C C1 Linux ‘ Linux ‘ C2 durch C1 kompilieren

32 Schrittweise Entwicklung mittels Bootstrapping
Linux C C C2 Linux C C3 Linux C Linux ‘ C C1 Linux ‘ C4 programmieren Linux ‘

33 Schrittweise Entwicklung mittels Bootstrapping
Linux C C5 Linux C Linux C C2 Linux C C3 Linux C Linux ‘ C C1 Linux ‘ C4 durch C3 kompilieren Linux ‘

34 Ausblick Agenda Motivation Formale Sprachen Compiler
Compilerentwicklung Ausblick

35 Zusammenfassung und Ausblick
Compiler übersetzen Programme von einer Quellsprache A in eine Zielsprache B Formale Sprachen bilden die Basis Übersetzungsvorgang umfasst verschiedene Phasen Diverse Programme und Werkzeuge zur Unterstützung Bootstrapping als Methode zur schrittweisen Compilerentwicklung Compiler sind von enormer Bedeutung in der Software-Entwicklung Viele Herausforderungen im Bereich des Compilerbaus noch zu meistern Beispiel: Automatische Übersetzung natürlicher Sprachen

36 Ende Fragen ????


Herunterladen ppt "Agenda Motivation Formale Sprachen Compiler Compilerentwicklung"

Ähnliche Präsentationen


Google-Anzeigen