Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Vorlesung Compilertechnik Sommersemester 2008
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Eine dynamische Menge, die diese Operationen unterstützt,
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium
Frame-Logik Eine Einführung Andreas Glausch.
Zusammenfassung der Vorwoche
8. Formale Sprachen und Grammatiken
10. Grundlagen imperativer Programmiersprachen
Finale Semantik und beobachtbares Verhalten
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Kapitel 4 Datenstrukturen
der Universität Oldenburg
1 Computergestützte Verifikation Symbolisches Model Checking 4.1 CTL Model Checking mit Binary Decision Diagrams (1. Systeme 2. Spezifikationen.
FH-Hof Einbindung von JavaScript Anweisungen
FH-Hof Extensible Markup Language Richard Göbel. FH-Hof Extensible Markup Language XML XML ist universeller Ansatz für die Strukturierung von Zeichenketten.
FH-Hof Grammatiken Richard Göbel. FH-Hof Begriffe Eine Grammatik definiert die Struktur (Syntax) einer Zeichenkette Eine Grammatik definiert nicht die.
Java: Dynamische Datentypen
Seminar zum pi-Kalkül betreut von Andreas Rossberg
Prinzipien des Algorithmenentwurfs Backtracking Prof. Dr. Th. Ottmann
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Union-Find-Strukturen
Datentyp  Zusammenfassung von Mengen von "Werten" mit auf
? Grammatik  Orthographie ?
Beispiele für Ausdrucksalgebren
Eine (Gleichungs-)Spezifikation ist ein Paar SPEC = (, E),
Einführung Wat jibt´s denn? Mit Computa kenn´ ick mir aus! Guten Tag,
Praxis-Repetitorium JAVA zusätzliche, ergänzende Lehrveranstaltung
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Semantische Fehler Seminar im Grundstudium WS2002/2003:
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Programmierung 1 - Repetitorium
Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:
Marcus Haller & René Schulze
boolean Datentyp und Operator
Types and Programming Languages: Einführung Typen SWT Seminar WS 05/06
Isabelle/HOL ( Kripke Structures & Model Checking ) Ying Wang, Nelli Bärsch, Bartosz Rynarzewski,
Was umfaßt die CORBA Core Spezifikation? Welche zusätzlichen Komponenten muß ein ORB Produkt beinhalten? Core: CORBA Objekt Modell CORBA Architektur OMG.
Informatik 1 Übung 2.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
BIT – Schaßan – WS 02/03 Basisinformationstechnologie HK-Medien Teil 1, 11.Sitzung WS 02/03.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Primär(x)f(x)a[x]new typeof sizeof checked unchecked Unär+-~!++x--x x++ x-- (T)x Multip./Divis.*/% Addition/Subtr.+- shift > kleiner/größer = is gleich/ungleich==!=
Programmiersprachen Proseminar Grundlagen wissenschaftlichen Arbeitens
Algorithmen und Datenstrukturen Übungsmodul 8
Variablen in Programmiersprachen
MODULA-2.
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
Agenda Motivation und Einordnung Syntaxgerichtete Übersetzung
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
7. Formale Sprachen und Grammatiken
Tupelkalkül: Notation (1)
Kapitel 5Strukturen Information aus der realen Welt werden in einem informationsverarbeitenden System als Daten abgelegt. Diese stellen also eine (vereinfachte)
1 Eine rationale Dekonstruktion von Landin’s SECD-Maschine Betreuerin: Prof. Dr. Rita Loogen Bearbeiter: Dong Liang.
 Sortigkeit oder Arität
Variablen und Datentypen
Dr. Wolfram Amme, Semantik funktionaler Programme, Informatik II, FSU Jena, SS Semantik funktionaler Programme.
 Präsentation transkript:

Programmierung 1 - Repetitorium WS 2002/2003 Programmierung 1 - Repetitorium Andreas Augustin und Marc Wagner Homepage:

Programmierung 1 - Repetitorium Dienstag, den Kapitel 11 Semantik

Programmierung 1 - Repetitorium 11.1 Übersicht Die Syntax einer Programmiersprache regelt, wie man Programme darstellt. Die Semantik einer Programmiersprache regelt, welche Programme zulässig sind und welche Ergebnisse die Ausführung von zulässigen Programmen liefern. Die Abstrakte Syntax definiert die erforderlichen syntaktischen Objekte als mathematische Objekte. Die Konkrete Syntax regelt, wie die Objekte der abstrakten Syntax textuell repräsentiert werden. Die Statische Semantik definiert Konsistenzbedingungen für die syntaktischen Objekte betreffend die Wohlgetyptheit und die Bindung von Bezeichnern. Die Dynamische Semantik definiert, was bei der Ausführung von syntaktischen Objekten passieren soll und ob und mit welchem Wert die Auswertung terminiert. Konkrete SyntaxAbstrakte Syntax Statische Semantik Dynamische Semantik

Programmierung 1 - Repetitorium 11.1 Übersicht Die lexikalische und die syntaktische Analyse sind für die Übersetzung der konkreten Syntax in die abstrakte Syntax zuständig. Die semantische Analyse überprüft die Einhaltung der durch die statische Semantik auferlegten Konsistenzbedingungen.

Programmierung 1 - Repetitorium 11.2 Abstrakte Syntax Abstrakte Grammatik : c Con = false | true |Konstanten x Id = Bezeichner o Opr = + | - | * | Operatoren t Ty = bool | int | t 1 t 2 Typen e Exp =Ausdrücke cKonstante | xBezeichner | e 1 o e 2 Operatoranwendung | if e 1 then e 2 else e 3 Konditional | fn x : t => eAbstraktion | e 1 e 2 Prozeduranwendung

Programmierung 1 - Repetitorium 11.2 Abstrakte Syntax Typdeklaration : datatype con = False | True | IC of int type id = string datatype opr = Add | Sub | Mul | Leq datatype ty = Bool | Int | Arrow of ty * ty datatype exp = Con of con | Id of id | Op of exp * exp * exp | If of exp * exp * exp | Abs of id * ty * exp | App of exp * exp

Programmierung 1 - Repetitorium 11.2 Abstrakte Syntax if x 1 1 then 1 else x 1 * x 2 ( x 1 – 1 ) If( Op(Id x1, Leq, Con(IC 1)), Con (IC 1), Op(Id x1, Mul, App(Id x2,Op(Id x1, Sub, Con (IC 1)))) ),, >>>, >,,,,,, >>>>>>>> Die mathematische Essenz der Grammatik ist die Definition der Mengen Con, Id, Opr, Ty und Exp. Zusätzlich legt die Grammatik Notationen für die Elemente dieser Mengen fest. Die in der Grammatik verwendeten Buchstaben c, x, o, t und e dienen als notationale Variablen und werden als Metavariablen bezeichnet. Die Formalisierung von Ausdrücken als Tupel macht die Baumstruktur eines Ausdrucks explizit. Es ist oft nützlich, die Baumstruktur eines Ausdrucks grafisch darzustellen.

Programmierung 1 - Repetitorium 11.2 Abstrakte Syntax fn x : int => fn y : int -> int => z ( x + 3 ) ( y x ) x3x3 z+yxz+yx intint y xintfn fn

Programmierung 1 - Repetitorium 11.3 Statische Semantik Im Kontext der Statischen Semantik werden Bezeichner an Typen gebunden. Eine Menge solcher Bindungen bezeichnet man als eine Umgebung. Typumgebung = endliche Funktion, die Bezeichner auf Typen abbildet T TE = Id Ty SS TE x Exp x Ty T e t(T,e,t) SS Der Ausdruck e ist in der Typumgebung T wohlgetypt und hat den Typ t. Ein Ausdruck hat in einer Umgebung höchstens einen Typ. Die Statische Semantik wird rekursiv durch Inferenzregeln kompakt und modular definiert : T false bool T true bool T c int T x t T(x) = t c T e1 o e2 int o { +, -, * } T e1 int T e2 int T e1 int T e2 int T e1 e2 bool

Programmierung 1 - Repetitorium 11.3 Statische Semantik T e1 bool T e2 t T e3 t Ein Ausdruck e heißt zulässig gdw. es einen Typ t gibt mit e t. Man kann die Regeln der Statischen Semantik direkt in eine rekursive Prozedur elab umformulieren, die zu einer Typumgebung T und zu einem Ausdruck e feststellt, ob ein Typ t existiert, so dass T e t gilt. T if e1 then e2 else e3 t T + { x t } e t T fn x : t => e t t T e1 t t T e2 t T e1 e2 t Wenn ein Typ existiert, wird er als Ergebnis geliefert. Wenn kein Typ existiert, wird eine Ausnahme geworfen, die beschreibt, welcher statische Fehler vorliegt.

Programmierung 1 - Repetitorium 11.3 Statische Semantik Signatur für Umgebungen : type a env exception Unbound of id val empty = a env val insert : id * a * a env -> a env val lookup : id * a env -> a(* Unbound *) Elaboration : exception Error of String fun elabCon True = Bool | elabCon False = Bool | elabCon (IC _ ) = Int fun elabOp Int Add Int = Int | elabOp Int Sub Int = Int | elabOp Int Mul Int = Int | elabOp Int Leq Int = Bool | elabOp _ _ _ = raise Error ill-typed operation

Programmierung 1 - Repetitorium 11.3 Statische Semantik fun elab T (Con c) = elabCon c | elab T (Id s) = lookup (s,T) | elab T (Op(e1,opr,e2)) = elabOp (elab T e1) opr (elab T e2) | elab T (If(e1,e2,e3)) = let val t1 = elab T e1 val t2 = elab T e2 val t3 = elab T e3 in if t1=Bool andalso t2=t3 then t2 else raise Error ill-typed conditional | elab T (App(e1,e2)) = let val t1 = elab T e1 val t2 = elab T e2 val s = ill-typed application in case t1 of Arrow(t,t) => if t=t2 then t else raise Error s | _ => raise Error s end | elab T (Abs(s,t,e)) = Arrow(t,elab (insert(s,t,T)) e) val elab : ty env -> exp -> ty(* Error, Unbound *)

Programmierung 1 - Repetitorium 11.4 Dynamische Semantik F hat zwei Arten von Werten, ganze Zahlen und Prozeduren. Boolesche Werte stellen wir durch die Zahlen 0 und 1 dar. Statt mit Prozedurdeklarationen arbeiten wir in F mit Abstraktionen. Die Prozeduren benötigen eine Wertumgebung. fn x : t => e liefert (x,e,V) ( fn x : int => fn y : int => x+y ) 7 liefert ( y, x+y, { x 7 } ) Die Typen der Argumentvariablen sind für die Anwendung der Prozedur nicht mehr relevant. DS VE x Exp x Val V e v (V,e,v) DS Die Evaluation des Ausdrucks e in der Wertumgebung V terminiert und liefert v. Die Dynamische Semantik wird verschränkt rekursiv definiert : V Val = ProWerte Pro = Id x Exp x VEProzeduren V VE = Id ValWertumgebungen

Programmierung 1 - Repetitorium 11.4 Dynamische Semantik Das Ergebnis der Auswertung eines Ausdrucks ist eindeutig bestimmt. Die Auswertung jedes zulässigen Ausdrucks terminiert und erhält dessen Typ. Die Menge DS kann rekursiv mit folgenden Inferenzregeln definiert werden : V false 0 V true 1 V c c V x v c V(x) = v V e1 v1 V e2 v2 v1,v2 v = v1 + v2 V e1 + e2 v V e1 v1 V e2 v2 v1,v2 v = v1 - v2 V e1 - e2 v V e1 v1 V e2 v2 v1,v2 v = if v1 v2 then 1 else 0 V e1 e2 v V e1 1 V e2 v V if e1 then e2 else e3 v V e1 0 V e3 v V if e1 then e2 else e3 v

Programmierung 1 - Repetitorium 11.4 Dynamische Semantik V e1 (x,e,V) V e2 v2 V + { x v2 } e v V e1 e2 v V fn x : t => e (x,e,V) Evaluierung : datatype value = IV of int | Proc of id * exp * value env fun evalCon False = IV 0 | evalCon True = IV 1 | evalCon (IC x) = IV x fun evalOp (IV x1) Add (IV x2) = IV (x1 + x2) | evalOp (IV x1) Sub (IV x2) = IV (x1 – x2) | evalOp (IV x1) Mul (IV x2) = IV (x1 * x2) | evalOp (IV x1) Leq (IV x2) = IV (if x1<=x2 then 1 else 0) | evalOp _ _ _ = raise Error type Error

Programmierung 1 - Repetitorium 11.4 Dynamische Semantik fun eval V (Con c) = evalCon c | eval V (Id s) = lookup (s,V) | eval V (Op(e1,opr,e2)) = evalOp (eval V e1) opr (eval V e2) | eval V (If(e1,e2,e3)) = (case eval V e1 of IV 1 => eval V e2 | IV 2 => eval V e3 | _ => raise Error type Error) | eval V (Abs(s,_,e)) = Proc (s,e,V) | eval V (App(e1,e2)) = (case (eval V e1, eval V e2) of (Proc(s,e,V),v) => eval (insert(s,v,V)) e | _ => raise Error type Error) val eval : value env -> exp -> value(* Error, Unbound *)

Programmierung 1 - Repetitorium 11.5 Let-Ausdrücke und Paare Einen Let-Ausdruck let val x : t = e1 in e2 end kann man auch mit einer Abstraktion und einer Applikation ausdrücken : (fn x : t => e2) e1 Let-Ausdrücke können als abgeleitete Form zu F hinzugefügt werden. T e1 t1 T + { x t1 } e2 t T let val x = e1 in e2 end t V e1 v1 V + { x v1 } e2 v V let val x = e1 in e2 end v Zusätzliche Inferenzregeln :

Programmierung 1 - Repetitorium 11.6 Rekursive Prozeduren FR = F mit rekursiven Prozeduren Erweiterung um rekursive Abstraktion e Exp =... | rec x1 (x2 : t2) : t1 => e x1Name der Prozedur x2Argumentvariable t2Argumenttyp t1Ergebnistyp der Prozedur Bedeutung : let fun x1 (x2 : t2) : t1 = e in x1 end fun x1(x2:t2):t1 = e liefert val x1 = rec x1(x2:t2):t1 => e Zusätzliche Inferenzregeln : T + { x1 t2 t1 } + { x2 t2 } e t1 T rec x1(x2:t2):t1 => e t2 t1 Val = Pro RPro RPro = Id x Id x Exp x VE V rec x1(x2:t2):t1 => e (x1,x2,e,V)

Programmierung 1 - Repetitorium 11.6 Rekursive Prozeduren V e1 v1 v1 = (x1,x2,e,V) V e2 v2 V + { x1 v1 } + { x2 v2 } e v V e1 e2 v Mit rekursiven Abstraktionen kann man zulässige Ausdrücke schreiben, deren Auswertung divergiert. Erweiterung der Datentypen : datatype exp =... | Rec of id*id*ty*ty*exp datatype value =... | RProc of id*id*exp*value env