Nächste Seite:
Einleitung
Prinzipien von Programmiersprachen
Vorlesung
Wintersemester 2007, 08, 09, 10, 11, 12
Johannes Waldmann, HTWK Leipzig
Einleitung
Beispiel: mehrsprachige Projekte
Sprache
Konzepte
Paradigmen
Ziele der LV
Beziehungen zu anderen LV
Organisation
Literatur
Inhalt
Übungen
Übung: Beispiele für Übersetzer
Syntax von Programmiersprachen
Programme als Bäume
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
Übung Attributgrammatiken/SableCC
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
Maßeinheiten in F#
Rekursiv definierte Typen
Potenz-Typen
Felder (Arrays)
Felder in C
Felder in Java
Felder in C#
Nicht rechteckige Felder in C?
Dynamische Feldgrößen
Kosten der Bereichsüberprüfungen
Verweistypen
Verweis- und Wertsemantik in C#
Algebraische Datentypen in Pascal, C
Ü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 (I)
Übersicht
Ad-Hoc-Polymorphie
Generische Polymorphie
Bsp: Generische Methode in C#
Bsp: Generische Klasse in Java
Bsp: Generische Methode in Java
Generische Fkt. höherer Ordg.
Dynamische Polymorphie (Objektorientierung)
Definitionen
Objekte, Methoden
Objektbasierte Sprachen (JavaScript)
Klassenbasierte Sprachen
this
Vererbung
Dynamische Polymorphie (Beispiel)
Vererbung bricht Kapselung
Überschreiben und Überladen
Equals richtig implementieren
Equals richtig implementieren (II)
Ad-hoc-Polymorphie und Vererbung
Statische Attribute und Methoden
Lokale Klassen
Vererbung und generische Polym. (I)
Vererbung und generische Polym. (II)
Generics und Subtypen
Schranken für Typparameter (I)
Schranken für Typparameter (II)
Anonyme Typen (Wildcards)
Wildcards und Bounds
Generics und Arrays
Generics und Arrays (II)
Zusammenfassung
Themen
Autotool-Auswertung
Wie weiter?
Testfragen
Über dieses Dokument ...
Johannes Waldmann 2013-01-28