Nächste Seite:
Einleitung
Prinzipien von Programmiersprachen
Vorlesung
Wintersemester 2007 - 2013
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
Erweiterte reguläre Ausdrücke
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
→
mathend000# 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)
Auswertung der Umfrage
Unterprogramme
Grundsätzliches
Parameter-Übergabe (Semantik)
Parameter-Übergabe (Implementierungen)
Parameterübergabe
Call-by-value, call-by-reference (C#)
Call-by-name
Call-by-name (Macros)
Call-by-name in Scala
Bedarfsauswertung
Beispiele f. Bedarfsauswertung (Haskell)
Beispiele f. Bedarfsauswertung (Scala)
Argumente/Parameter
Positionelle/benannte Argumente
Default-Werte
Variable Argumentanzahl (C)
Variable Argumentanzahl (Java)
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 (Java)
Lokale Funktionen in Java 8
Unterprogramme/Zusammenfassung
Polymorphie
Ü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.
Anonyme Typen (Wildcards)
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)
Statische Attribute und Methoden
Typhierarchie als Halbordnung
Ad-Hoc-Polymorphie und Typhierarchie
Vererbung und generische Polym. (I)
Vererbung und generische Polym. (II)
Generics und Subtypen
Obere Schranken für Typparameter
Untere Schranken für Typparameter
Wildcards und Bounds
variante
generische Interfaces (C#)
Generics und Arrays
Generics und Arrays (II)
Ergänzungen zu Typen
Daten-abhängige Typen
Ungewöhnliche Typen (I)
Ungewöhnliche Typen (II)
Ungewöhnliche Typen (II)
Zusammenfassung
Themen
Paradigmen von Prog.Spr. (Beispiele)
Logische Programmierung (Bsp.)
Constraint-Programmierung (Bsp: SAT)
Constraint-Programmierung (Bsp: SMT)
autotool-Auswertung
Wie weiter?
Testfragen
Über dieses Dokument ...
Johannes Waldmann 2014-03-31