Nächste Seite:
Einleitung
Prinzipien von Programmiersprachen
Vorlesung
Wintersemester 2007, 08, 09, 10, 11
Johannes Waldmann, HTWK Leipzig
Einleitung
Sprache
Ziele der LV
Beispiel: mehrsprachige Projekte
Beziehungen zu anderen LV
Organisation
Literatur
Inhalt
Übungen
Ausführungsarten
Struktur eines Übersetzers
Übung: Beispiele für Übersetzer
Syntax von Programmiersprachen
Daten-Repräsentation im Compiler
Token-Typen
Formale Sprachen
Spezifikation formaler Sprachen
Sprach-Operationen
Reguläre Sprachen/Ausdrücke
Beispiele/Aufgaben zu regulären Ausdrücken
Bemerkung zu Reg. Ausdr.
Übungen Reg. Ausdr.
Wort-Ersetzungs-Systeme
Grammatiken
Formale Sprachen: Chomsky-Hierarchie
Typ-3-Grammatiken
Sätze über Reguläre Sprachen
Kontextfreie Sprachen
Klammer-Sprachen
Übungen
(erweiterte) Backus-Naur-Form
Ableitungsbäume für CF-Sprachen
Ableitungsbäume (II)
Eindeutigkeit
Assoziativität
Assoziativität (II)
Präzedenzen
Zusammenfassung Operator/Grammatik
Übung Operator/Grammatik
Semantik von Programmiersprachen
Statische und dynamische Semantik
Attributgrammatiken (I)
Attributgrammatiken (II)
Donald E. Knuth
Arten von Attributen
Attributgrammatiken-Beispiele
Konkrete und abstrakte Syntax
Regeln zur Typprüfung
Ausdrücke
→
Kellermaschine
Übungen (Stackmaschine)
Dynamische Semantik
Bsp: Operationale Semantik
Denotationale Semantik
Beispiele Denotationale Semantik
Beispiel: Semantik von Unterprogr.
Axiomatische Semantik
Eiffel
Hoare-Kalkül
Axiom für Schleifen
Übungen (Invarianten)
Typen
Warum Typen?
Historische Entwicklung
Überblick
Aufzählungstypen
Keine Aufzählungstypen
Aufzählungstypen in C
Aufzählungstypen in Java
Teilbereichstypen in Ada
Abgeleitete Typen in Ada
Zusammengesetzte Typen
Produkttypen (Records)
Summen-Typen
Vereinigung mittels Interfaces
Rekursiv definierte Typen
Potenz-Typen
Verweistypen
Algebraische Datentypen in Pascal, C
Maßeinheiten in F#
Übung Typen
Bezeichner, Bindungen, Bereiche
Variablen
Namen in der Mathematik
Namen
Typen für Variablen
Dynamisch getypte Sprachen
Statisch getypte Sprachen
Typinferenz in C#
Typdeklarationen
Konstanten
Lebensort und -Dauer von Variablen
Sichtbarkeit von Namen
Überdeckungen
Sichtbarkeit und Lebensdauer
Ausdrücke
Einleitung
Einleitung (II)
Designfragen für Ausdrücke
Syntax von Ausdrücken
Syntax von Konstanten
Der Plus-Operator in Java
Überladene Operatornamen
Automatische Typanpassungen
Implizite/Explizite Typumwandlungen
Explizite Typumwandlungen
Der Verzweigungs-Operator
Verzweigungs-Operator(II)
Relationale Operatoren
Logische (Boolesche) Ausdrücke
Noch mehr Quizfragen
Der Zuweisungs-Operator
Weitere Formen der Zuweisung
Ausdrücke mit Nebenwirkungen
Auswertungsreihenfolgen
Auswertungsreihenfolge in C
Anweisungen(I)
Definition
Programm-Ablauf-Steuerung
Blöcke
Verzweigungen (zweifach)
Mehrfach-Verzweigung
Switch/break
Kompilation
Pattern Matching
Anweisungen(II)
Wiederholungen
Schleifen steuern durch...
Zählschleifen
Termination
Datengesteuerte Schleifen
Zustandsgesteuerte Schleifen
Implizite Iteratoren in C#
Schleifen mit Bedingungen
Abarbeitung von Schleifen
vorzeitiges Verlassen
Geschachtelte Schleifen
Sprünge
Sprünge und Schleifen
Sprünge und Schleifen (Beweis)
Schleifen und Unterprogramme
Denotationale Semantik (I)
Denotationale Semantik (II)
Unterprogramme
Grundsätzliches
Argumente/Parameter
Positionelle/benannte Argumente
Default-Werte
Variable Argumentanzahl (C)
Variable Argumentanzahl (Java)
Parameter-Übergabe (Semantik)
Parameter-Übergabe (Implementierungen)
Parameterübergabe
Call-by-name
Call-by-name (Macros)
Call-by-name in Scala
Bedarfsauswertung
Beispiele f. Bedarfsauswertung
Aufgaben zu Parameter-Modi (I)
Aufgaben zu Parameter-Modi (II)
Lokale Unterprogramme
Statische und dynamische Sichtbarkeit
Frames, Ketten
Lokale Unterprogramme: Beispiel
Flache Unterprogramme (C)
Lokale Unterprogramme in C# und Java
Unterprogramme als Argumente
Unterprogramme als Resultate
Lokale anonyme Unterprogramme
Lokale Klassen
Unterprogramme/Zusammenfassung
Polymorphie und Objektorientierung
Definitionen
Objekte, Methoden
JavaScript als objektbasierte Sprache
Klassen
this
Vererbung
Dynamische Polymorphie (OO)
Equals richtig implementieren
Equals richtig implementieren (II)
Überladen
Überschreiben und Überladen
Vererbung bricht Kapselung
Statische Attribute und Methoden
Lokale Klassen
Generische Polymorphie
Bsp: Generische Klasse in Java
Bsp: Generische Methode in Java
Schranken für Typparameter (I)
Schranken für Typparameter (II)
Anonyme Typen (Wildcards)
Wildcards und Bounds
Typinformation zur Laufzeit
Generics und Subtypen
Generics und Arrays
Generics und Arrays (II)
Über dieses Dokument ...
Johannes Waldmann 2012-10-10