360 likes | 448 Views
VU Software Paradigmen 716.060 / SS 2011. Alexander Felfernig Institut für Softwaretechnologie alexander.felfernig@ist.tugraz.at. Lehrziele. Vermittlung von einführenden Kenntnissen des Compilerbaus (Analyse der Programmsyntax) und der Ausführungskonzepte von Programmiersprachen (Semantik)
E N D
VU Software Paradigmen716.060 / SS 2011 Alexander FelfernigInstitut für Softwaretechnologiealexander.felfernig@ist.tugraz.at
Lehrziele • Vermittlung von einführenden Kenntnissen des Compilerbaus (Analyse der Programmsyntax) und der Ausführungskonzepte von Programmiersprachen (Semantik) • Verstehen und Entwickeln von einfachen Compilern • Verstehen von Sprachsemantiken
Inhalt • Organisatorisches • Aufbau der LV • Benotung • Ziele und Inhalt
Organisatorisches • VU (3 Wochenstunden) • Vorlesungsteil (2 Wochenstunden) • Jeweils Dienstag, 9:30-11:00 (s.t.), HS I12 • Prüfungstermin: 28.6.2011 • Nachklausur: Ende September 2011 • Übungsteil (1 Wochenstunde) • Jeweils Montag, 16:00-17:30 (s.t.), HS I1 (Verbundhörsaal; Ausnahme: 14.3. HS I12) • LV mit „immanentem Prüfungscharakter“
Übung • Organisatorisches wird in der 1en Übungseinheit besprochen: MO, 7.3., 16.00 – 17.30 (s.t.), HS I1 (Verbundhörsaal) • Kontakt: monika.mandl@ist.tugraz.at
Benotung • Note setzt sich zusammen aus: • Anzahl der gelösten Aufgaben und deren Bewertung (1/3) (jedes Übungsblatt > 50%) • Schriftliche Prüfung Bewertung (2/3) (> 50%) • Positive Note bei >50 %
START Anmeldung UE-Teilnahme Abmeldung JA Endklausur Kein Zeugnis Positiv NEIN NachterminEndklausur JA Positives Zeugnis Positiv JA Negatives Zeugnis NEIN
Bei Fragen… • Vor der VU • Sprechstunde • nach Vereinbarung • [ E-Mail: alexander.felfernig@ist.tugraz.at ] • [ Telefon: DW 5710 ]
Unterlagen • Lehrveranstaltungsverlauf unter http://www.ist.tugraz.at/swp11.html • Folien • Skriptum • Übungsangaben • SWP Newsgroup @ TUG tu-graz.lv.swp • Buchempfehlungen
Ziele der LV • Sprachdefinition • Syntax • Semantik von Programmiersprachen • Konzepte von Programmiersprachen • Auswertung von Programmen • Struktur von Programmen • Entscheidungsprobleme
Grober Ablauf (I) Syntax BNFSprachhierarchiePrinzipien
Grober Ablauf (II) Semantik Funktionale SprachenImperative SprachenLogikorientierte SprachenOO Sprachen
Grober Ablauf (III) Entscheidungsprobleme HalteproblemÄquivalenzproblem
Grober Ablauf (IV) Prog.sprachen-konzepte ModulesLibrariesComponentsAspects,...
Klassifikation von Sprachen • Syntaktische Kriterien / Grammatik • Wie wird ein Programm strukturiert? • Ist die Sprache einfach zu lernen? • Unterstützt eine Sprache die Programmierung großer SW-Systeme? • ... • Semantische Kriterien • Auswertung von Programmen
Sitzbank Geldinstitut Semantik? • Bedeutung (der Konstrukte) einer Sprache „Die Bank von Peter.“ a = b + c Zuweisung, Bedingung, Gleichung.
Bedeutung von Programmen • Was berechnet das obige SML-Programm ? fun test (x,y) =if x=0 then 0else y + test(x-1,y);
Vergleich mit math. Definition • (Induktive) Definition der Multiplikation • test implementiert die Multiplikation!
Logik-orientierte Programme • Prädikatevater(X,Y) ... X ist der Vater von Y • Regeln can_fly(X) :- bird(X). • Anfragen can_fly(papagei).
Prolog-Programmbeispiel Formalisieren Sie mit Hilfe von vater das Prädikat grossvater(X,Y), das wahr ist, wenn X der Großvater von Y ist.
Prolog-Programmbeispiel Formalisieren Sie mit Hilfe von vater das Prädikat grossvater(X,Y), das wahr ist, wenn X der Großvater von Y ist. „X ist der Großvater von Y wenn X der Vater von Z ist und Z der Vater von Y.“
Prolog-Programmbeispiel „X ist der Großvater von Y wenn X der Vater von Z ist und Z der Vater von Y.“ grossvater(X,Y) :- vater(X,Z), vater(Z,Y).
Anfragen • Anfrage grossvater(franz,otto) muß Ja (True/Yes) liefern. vater(franz,karl).vater(karl,otto). grossvater(franz,otto) ?
Semantik von Imperativen Sprachen? • Definition über die Interpretation der einzelnen Statements. Die Statements führen dabei zu Zustandsänderung des Programms. void change(int x,y) {int z = x; x = y; y = z;}
Semantik von Imperativen Sprachen? • Was passiert hier bei Auswertung der einzelnen Statements? void change(int x,y) {int z = x; x = y; y = z;}
Semantikfunktion • Interpretation eines Statements s[[s]]: env env • Environment: env: VAR Denv(x)Dwobei x eine Variable ist undD der Wertebereich (Domain) von x ist.
Beispiel • [[x = e]] () = ‘ mit ‘(y) = (y) für alle yx ‘(x) = [[e]] () • [[x]] () = (x) für xVAR {(x)=1, (y)=2}z = x;{(x)=1, (y)=2, (z)=1}x = y;{(x)=2, (y)=2, (z)=1}y = z;{(x)=2, (y)=1, (z)=1}
Entscheidungsprobleme • Gegeben: Frage • Antwort: Ja oder Nein • Halteproblem: Gibt es ein Programm, daß für beliebige Programme entscheiden kann, ob diese für alle Eingaben halten? • Äquivalenzproblem: Gibt es ein Programm, daß die Äquivalenz zweier beliebiger Programme feststellen kann?
Programmiersprachen / Wieso? Problemstellung Verteilung Teilprobleme Teillösungen
Erstellung großer Software • Problemstellung für Einzelne zu groß • Teamarbeit • Aufteilung in Teile, die getrennt gelöst werden können • Zusammenführen der Einzellösungen zur Lösung des Gesamtproblems Unterstützung in der Programmiersprache?
Funktionale Sichtweise • Beispiel: Interpreter für eine Sprache • Programm = Sequenz von Befehlen • Maschine hat Speicher und führt ein Programm aus. • Befehle verändern den Inhalt des Speichers.
Beispiel - Blocksichtweise Programm Speicher LD 1 2 LD 2 3 ADD 1 2 Maschine 1: 0 2: 0 3: 0 4: 0 LD x y .. Lädt y in Speicher x ADD x y .. Addiert den Wert von x und y. Das Resultat steht in x. Wert Adresse
Beispiel – Funktionale Sicht ExecuteProgIN: Programm, SpeicherOUT: Speicher ExecuteStmntIN: Statement, SpeicherOUT: Speicher GetMemIN: Adresse,Speicher OUT: Value SetMemIN: Value,Adresse,Speicher OUT: Speicher
Beispiel - Zusammenfassung • Funktion kann in Teilfunktionen aufgeteilt werden • Getrennte Korrektheitsüberprüfung • Verständliche Programme • Problemlösung wird vereinfacht • Einfachere Fehlersuche • Re-Use