Agenda Motivation Formale Sprachen Compiler Compilerentwicklung

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Fast Fourier Transformation
Vorlesung Compilertechnik Sommersemester 2008
Informatik 12 | DAES Compilerbau Wintersemester 2010 / 2011 Dr. Heiko Falk Technische Universität Dortmund Lehrstuhl Informatik 12 Entwurfsautomatisierung.
Gliederung 1. Grundlagen der Bottom-Up-Syntaxanalyse
Zusammenfassung der Vorwoche
8. Formale Sprachen und Grammatiken
Lösung 7.1 Syntax und Semantik
Imperative Programmierung
Grammatiken, Definitionen
Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUT Universität Paderborn Algorithmen und Komplexität Grammatiken beschreiben Sprachen L µ *, indem.
Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung versteht Java Programmcode versteht Java Programmcode Für die Entwicklung eigener Software.
Kapitel 4 Syntaktische Analyse: LR Parsing.
Parser generieren Yet Another Compiler – Compiler YACC.
Java: Objektorientierte Programmierung
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Parser für CH3-Sprachen
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (05 – Reguläre Ausdrücke) Prof. Dr. Th. Ottmann.
M a r c – o l i v e r p a h l Informatik II – Kapitel 18 Übersetzung Zusammenfassung des Kapitel 18 Küchlin, Weber, Vorversion Einführung in die Informatik,
Prof. Dr. rer.nat. Ralph Großmann Fakultät Informatik / Mathematik Sommersemester 2012 Internet-Technologien XML-basierte Techniken Teil Metasprache der.
© 2006 W. Oberschelp, G. Vossen Rechneraufbau & Rechnerstrukturen, Folie 2.1.
Grundkurs Theoretische Informatik, Folie 2.1 © 2006 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 2 Gottfried Vossen Kurt-Ulrich Witt.
Grundkurs Theoretische Informatik, Folie 3.1 © 2004 G. Vossen,K.-U. Witt Grundkurs Theoretische Informatik Kapitel 3 Gottfried Vossen Kurt-Ulrich Witt.
Prolog Grundkurs WS 98/99 Christof Rumpf
Parsing regulärer Ausdrücke
Beispiele für Ausdrucksalgebren
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Semantische Fehler Seminar im Grundstudium WS2002/2003:
Christian Schindelhauer
Christian Schindelhauer
Von der Sprache zum Programm
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
Formale Sprachen und Automaten
Materialien zum Informatikunterricht (Pohlig-Häberle)
Entwicklung der Programmiersprachen
Syntaxanalyse Bottom-Up und LR(0)
Generalisierung/Spezialisierung Subtypisierung/Vererbung
Formale Sprachen Teil 3 Klaus Becker Syntax und Semantik.
Analyse von Ablaufdiagrammen
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Publikation auf Knopfdruck Judith Riegelnig Michael Grüebler 19. Oktober 2010 / Statistiktage Neuenburg.
Formale Sprachen Grammatiken und die Chomsky-Hierarchie
Formale Sprachen Reguläre Sprachen Rudolf FREUND, Marian KOGLER.
Entwurf und Implementierung eines Scanner-Generatorsystems
Städtisches Gymnasium Beverungen Friedel Berlage
Dieser nicht Fehler finden Algorithmus enthält einfach einen gravierenden welcher zu ist.
Analyseprodukte numerischer Modelle
Beispiele: KFG 2.Teil Beispiel 1: Sei G eine Grammatik mit den folgenden Regeln: S  Ac | Bd A  aAb | ab B  aBbb | abb Definieren Sie.
Noam CHOMSKY, Sheila GREIBACH
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Vortrag von Rechtsanwältin Verena Nedden, Fachanwältin für Steuerrecht zur Veranstaltung Wege zum bedingungslosen Grundeinkommen der Piratenpartei Rhein-Hessen.
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Christian Schindelhauer Wintersemester 2006/07 2. Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Code-Optimierung Philipp Bergener Seminar „Übersetzung künstlicher Sprachen“
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Informatik Formale Sprachen 1.2 Grammatiken formaler Sprachen
Agenda Motivation und Einordnung Syntaxgerichtete Übersetzung
Mensch – Maschine - Kommunikation
Institut für Softwarewissenschaft – Universität WienP.Brezany 1 Beispiele (Frist: ) Beispiel 1: Sei  = {a, b} ein Alphabet und Q = {q 0, q 1 } eine.
7. Formale Sprachen und Grammatiken
Inhalt Einordnung und Funktion der lexikalische Analyse Grundlagen
Kapitel 4:Die Chomsky Hierarchie
Semantische Analyse und attributierte Grammatiken
2 Grundlagen In diesem Abschnitt werden die Grundbegriffe und Methoden der Theorie der formalen Sprachen und der Automaten wiederholt, soweit diese ben.
Anmerkung des Autor Diese Präsentation ist mit Powerpoint für MacOS erstellt. Leider ist sie nicht vollständig mit Powerpoint für Windows kompatibel.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Sprachen und Programmiersprachen
 Präsentation transkript:

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

Agenda Motivation Formale Sprachen Compiler Compilerentwicklung Ausblick

Motivation Agenda Formale Sprachen Compiler Compilerentwicklung Ausblick

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

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

Formale Sprachen Agenda Motivation Compiler Compilerentwicklung Ausblick

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 ...

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 Σ*

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

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

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

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

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

Compiler Agenda Motivation Formale Sprachen Compilerentwicklung Ausblick

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

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

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

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

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

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

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

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

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;

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

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

Compilerentwicklung Agenda Motivation Formale Sprachen Compiler Ausblick

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

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

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

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

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 ‘

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

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

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 ‘

Ausblick Agenda Motivation Formale Sprachen Compiler Compilerentwicklung Ausblick

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

Ende Fragen ????