Grundlagen der Programmiersprachen
|
|
- Maya Pfaff
- vor 6 Jahren
- Abrufe
Transkript
1 Grundlagen der Programmiersprachen Syntax und ihre Definition Alphabete und Sprachen Syntaxdiagramme und Backus-Naur-Form Semantik und ihre Definition funktionale Semantik vom ML Fixpunktberechnung
2 Motivation Sie haben an PRO, ASS und FUN selbst gesehen, daß man durch Beispiele und viel Gerede die Syntax einer Programmiersprache die Bedeutung syntaktisch korrekter Zeichenreihen nicht ordentlich, d.h. unmißverständlich und vollständig, definieren kann. Nötig: exakte formale Beschreibungsverfahren
3 Begriffe Syntax: welche Aneinanderreihungen von Zeichen sind korrekte Sätze der Sprache? Semantik: welche inhaltliche Bedeutung besitzen syntaktisch korrekte Sätze der Sprache? Programmiersprache P=(L,F), wobei L A* formale Sprache über Alphabet A={a,...,z,A,...Z, 0,...,9,:,;,-,...} (Syntax) und F Abbildung, die jedem Wort (Programm) w L seine Bedeutung (Semantik) F(w) zuordnet.
4 Syntax - Alphabet und Sprache Definition: Eine (zweistellige) Relation R auf einer Menge M ist eine Teilmenge R M M. Sind a,b M und (a,b) R, so sagt man "a und b stehen in der Relation R". Gelegentlich schreibt man statt (a,b) R auch arb. Eine Relation heißt reflexiv, wenn für alle a M stets (a,a) R gilt; transitiv, wenn für alle a,b,c M aus (a,b) R und (b,c) R stets (a,c) R folgt; symmetrisch, wenn für alle a,b M aus (a,b) R auch (b,a) R folgt; antisymmetrisch, wenn für alle a,b M aus (a,b) R und (b,a) R stets a=b folgt.
5 Syntax - Beispiele 1. Verwandschaftsrelation. M: Menge aller Menschen. R M M Menge aller Paare von Menschen, die verwandt sind, d.h. (a,b) R, wenn Personen a und b verwandt sind. R nicht reflexiv, denn eine Person ist nicht mit sich selbst verwandt. R symmetrisch, denn wenn Person a mit b verwandt ist ((a,b) R), dann auch b mit a ((b,a) R). R ist nicht antisymmetrisch. Ist R transitiv? Wenn a mit b und b mit c verwandt ((a,b) R und (b,c) R), dann ist meist auch a mit c verwandt ((a,c) R).
6 Syntax - Beispiele 2. Kleiner-Gleich-Relation. M: Menge der natürlichen Zahlen IN. R IN IN Menge aller Paare natürlicher Zahlen (a,b), für die a b gilt. R ist reflexiv (a a), transitiv (a b und b c a c) und antisymmetrisch (a b und b a a=b).
7 Definition: Syntax - Ordnung a. Eine reflexive, transitive und symmetrische Relation R M M auf einer Menge M heißt Äquivalenzrelation. b. Eine reflexive, transitive und antisymmetrische Relation heißt (partielle) Ordnung oder Halbordnung. c. Ist die Ordnung R total definiert, d.h., gilt für alle a,b M die Beziehung (a,b) R oder (b,a) R, so ist R eine lineare oder totale Ordnung.
8 Syntax - Bezeichnung Bezeichnung: Ist R eine Ordnung, so schreibt man anstelle von (a,b) R meist a b. Ist R antisymmetrisch und transitiv, so schreibt man meist a<b
9 Syntax - Beispiel Ordnung 1. Betrachte Relation "ist gleich oder ist Chef von" innerhalb eines Betriebes. M Menge der Mitarbeiter. R M M Menge aller Paare von Mitarbeitern (a,b), wobei a=b oder a Chef von b, also a b. R ist reflexiv, transitiv und antisymmetrisch, folglich (partielle) Ordnung. R keine lineare Ordnung, denn für zwei Mitarbeiter a und b aus unterschiedlichen Abteilungen gilt z.b. weder a b noch b a.
10 Syntax - Beispiel Ordnung 2. Auf der Menge IN der natürlichen Zahlen ist die Kleiner-Gleich-Relation R (s.o. Beispiel 2) eine Ordnung. R ist außerdem eine lineare Ordnung, denn für zwei beliebige Elemente a,b IN gilt a b oder b a.
11 Syntax - Erinnerung Grundbegriffe Alphabet: nichtleere endliche Menge A= {a1,...,an}, n 1, mit einer linearen Ordnung a1<a2<a3<...<an. Wort: Folge w der Länge k von k Elementen von A, d.h. w=b1b2...bk mit bj A für j=1,...,n, n IN. Länge von w: w =k. leeres Wort ε: Wort der Länge 0. Konkatenation: v=b1b2...bi, w=c1c2...cj A*. vw=b1b2...bic1c2...cj.
12 Syntax - Sprache Definition: Sei A ein Alphabet. Jede Teilmenge L A* heißt Sprache über A.
13 Syntax - Beispiele 1. Alphabet A={0,1,2,...,9}. Die Menge L={a1a2...an ai A für i=1,...,n; n IN, n 1; a1 0 falls n 2} ist eine Sprache über A, die Sprache der Dezimaldarstellungen für die natürlichen Zahlen (ohne führende Nullen). 2. Alphabet A={ }. Die Menge L={a1a2...an ai A für i=1,...,n; n Primzahl} ist eine Sprache über A. L ist Menge aller Strichfolgen, deren Länge eine Primzahl ist.
14 Bezeichnungen: Syntax - Bezeichnung An : Menge aller Wörter der Länge n über Alphabet A: A n ={w w A* und w =n}. Speziell gilt für n=0: A 0 ={ε}. A + : A* ohne das leere Wort: A + =A*\{ε}. wn : n-fache Aneinanderreihung von w für w A* und n IN, d.h. w n = Speziell für n=0: w 0 =ε. { n mal
15 Syntaxdiagramme anschauliche und sehr einfache Methode zur Definition der Syntax von Programmiersprachen vermutlich von Niklaus Wirth (Erfinder von Pascal, Modula, Oberon u.v.m.) eingeführt
16 Syntaxdiagramme - Beispiel
17 Syntaxdiagramme - Beispiel Name
18 Syntaxdiagramme - Beispiel
19 Syntaxdiagramme - Beispiel Eintritt
20 Syntaxdiagramme - Beispiel
21 Syntaxdiagramme - Beispiel Austritt
22 Syntaxdiagramme - Beispiel
23 Syntaxdiagramme - Beispiel konkrete Zeichen
24 Syntaxdiagramme - Beispiel
25 Syntaxdiagramme - Beispiel Verweise auf andere SDs
26 Syntaxdiagramme - Beispiel
27 Syntaxdiagramme - Beispiel Alle konkreten Zeichen, die man beim Durchlaufen einer Menge von Syntaxdiagrammen aufsammelt, sind Wörter der definierten Sprache.
28 Syntaxdiagramm - Definition Definition: Seien N und T Alphabete. N ist die Menge der Nichtterminalsymbole (auch Hilfszeichen oder Variablen genannt) und T die Menge der Terminalsymbole. Syntaxdiagramme über N und T sind folgendermaßen aufgebaut: 1) Jedes Syntaxdiagramm ist mit einem Nichtterminalsymbol aus N markiert. 2) Ein Syntaxdiagramm besteht aus Kreisen (oder Ellipsen) und Kästchen, die durch Pfeile miteinander verbunden sind.
29 Syntaxdiagramm - Definition Definition (Forts.): 3) In jedem Kreis (oder jeder Ellipse) steht ein Wort über T. In jedem Kästchen steht ein Nichtterminalsymbol, d.h., ein Element aus N. 4) Aus jedem Kreis (jeder Ellipse) und jedem Kästchen führt genau ein Pfeil hinaus und genau ein Pfeil hinein. 5) Ein Pfeil darf sich in mehrere Pfeile aufspalten (Verzweigungspunkt) und mehrere Pfeile dürfen zu einem Pfeil zusammengeführt werden (Zusammenfassungspunkt).
30 Syntaxdiagramm - Definition Definition (Forts.): 6) In jedem Syntaxdiagramm gibt es genau einen ("Eingangs"-) Pfeil, der von keinem Kreis (Ellipse) oder Kästchen ausgeht (von außen in das SD einlaufender Pfeil), und genau einen ("Ausgangs"-) Pfeil, der zu keinem Kreis (Ellipse) oder Kästchen führt (nach außen aus dem SD auslaufender Pfeil). Alle übrigen Pfeile verbinden Kästchen, Kreise (Ellipsen), Verzweigungs-/Zusammenführungspunkte. 7) Von dem Eingangspfeil aus kann man jeden Kreis (Ellipse) und jedes Kästchen des Syntaxdiagramms auf mindestens einem Weg erreichen, und von jedem Kreis (Ellipse) oder Kästchen kann man auf mindestens einem Weg zum Ausgangspfeil gelangen. (SD darf nicht in Teile zerfallen.)
31 Syntaxdiagramm - Beispiel
32 Syntaxdiagramm - Beispiel
33 Syntaxdiagramm - Beispiel
34 Syntaxdiagramm - Beispiel
35 Syntaxdiagramm - Beispiel +
36 Syntaxdiagramm - Beispiel +
37 Syntaxdiagramm - Beispiel +
38 Syntaxdiagramm - Beispiel +
39 Syntaxdiagramm - Beispiel +
40 Syntaxdiagramm - Beispiel +
41 Syntaxdiagramm - Beispiel +
42 Syntaxdiagramm - Beispiel +
43 Syntaxdiagramm - Beispiel +
44 Syntaxdiagramm - Beispiel +
45 Syntaxdiagramm - Beispiel +5
46 Syntaxdiagramm - Beispiel +5
47 Syntaxdiagramm - Beispiel +5
48 Syntaxdiagramm - Beispiel +5
49 Syntaxdiagramm - Beispiel +5
50 Syntaxdiagramm - Beispiel +5
51 Syntaxdiagramm - Beispiel +5
52 Syntaxdiagramm - Beispiel +5
53 Syntaxdiagramm - Beispiel +5
54 Syntaxdiagramm - Beispiel +5
55 Syntaxdiagramm - Beispiel +5
56 Syntaxdiagramm - Beispiel +5
57 Syntaxdiagramm - Beispiel +5
58 Syntaxdiagramm - Beispiel +5
59 Syntaxdiagramm - Beispiel +50
60 Syntaxdiagramm - Beispiel +50
61 Syntaxdiagramm - Beispiel +50
62 Syntaxdiagramm - Beispiel +50
63 Syntaxdiagramm - Beispiel +50
64 Syntaxdiagramm - Beispiel +50
65 Syntaxdiagramm - Beispiel +50
66 Syntaxdiagramm - Beispiel +50
67 Syntaxdiagramm - Beispiel +50
68 Syntaxdiagramm - Beispiel +50
69 Syntaxdiagramm - Beispiel +50
70 Syntaxdiagramm - Beispiel +50
71 Syntaxdiagramm - Auswertung Definition: Man betritt das Syntaxdiagramm durch den Eingangspfeil und befolgt solange jeweils eine der folgenden Regeln, bis man das Syntaxdiagramm auf dem Ausgangspfeil verlassen hat: 1) Trifft man auf einen Verzweigungspunkt, so folgt man nach Belieben einem der weiterführenden Pfeile. 2) Trifft man auf einen Zusammenfassungspunkt, so folgt man dem weiterführenden Pfeil.
72 Syntaxdiagramm - Auswertung Definition (Forts.): 3) Trifft man auf einen Kreis (Ellipse), so schreibt man seinen Inhalt, also ein Wort über T, auf (bzw. hängt es an das schon aufgeschriebene Wort an) und verläßt den Kreis (Ellipse) über den ausgehenden Pfeil. 4) Trifft man auf ein Kästchen, in dem ein Nichtterminalsymbol ω steht, so kopiert man das Syntaxdiagramm ω anstelle des Kästchen ein. Der in das Kästchen hineinlaufende Pfeil wird mit dem Eingangspfeil von ω und der von dem Kästchen abgehende Pfeil mit dem Ausgangspfeil von ω verbunden.
73 Syntaxdiagramm - Auswertung Endzustand: Definition (Forts.): Ersetzung endet 3) Trifft man auf einen Kreis (Ellipse), so schreibt man seinen Inhalt, also ein Wort über T, auf (bzw. hängt es an das schon aufgeschriebene Wort an) und verläßt den Kreis (Ellipse) über den ausgehenden Pfeil. 4) Trifft man auf ein Kästchen, in dem ein Nichtterminalsymbol ω steht, so kopiert man das Syntaxdiagramm ω anstelle des Kästchen ein. Der in das Kästchen hineinlaufende Pfeil wird mit dem Eingangspfeil von ω und der von dem Kästchen abgehende Pfeil mit dem Ausgangspfeil von ω verbunden.
74 Syntaxdiagramm - Auswertung Definition (Forts.): 3) Trifft man auf einen Kreis (Ellipse), so schreibt man seinen Inhalt, also ein Wort über T, auf (bzw. hängt es an das schon aufgeschriebene Wort an) und verläßt den Kreis (Ellipse) über den ausgehenden Pfeil. 4) Trifft man auf ein Kästchen, in dem ein Nichtterminalsymbol ω steht, so kopiert man das Syntaxdiagramm ω anstelle des Kästchen ein. Der in das Kästchen hineinlaufende Pfeil wird mit dem Eingangspfeil von ω und der von dem Kästchen abgehende Pfeil mit dem Ausgangspfeil von ω verbunden.
75 Syntaxdiagramm - Auswertung Definition (Forts.): 3) Trifft man auf einen Kreis (Ellipse), so schreibt man seinen Inhalt, also ein Wort über T, auf (bzw. hängt es an das schon aufgeschriebene Wort an) und verläßt den Kreis (Ellipse) Zwischenzustand: über den ausgehenden Pfeil. 4) Trifft man weiter auf ein ersetzen Kästchen, in dem ein Nichtterminalsymbol ω steht, so kopiert man das Syntaxdiagramm ω anstelle des Kästchen ein. Der in das Kästchen hineinlaufende Pfeil wird mit dem Eingangspfeil von ω und der von dem Kästchen abgehende Pfeil mit dem Ausgangspfeil von ω verbunden.
76 Syntaxdiagramm - Auswertung Definition (Forts.): 3) Trifft man auf einen Kreis (Ellipse), so schreibt man seinen Inhalt, also ein Wort über T, auf (bzw. hängt es an das schon aufgeschriebene Wort an) und verläßt den Kreis (Ellipse) über den ausgehenden Pfeil. 4) Trifft man auf ein Kästchen, in dem ein Nichtterminalsymbol ω steht, so kopiert man das Syntaxdiagramm ω anstelle des Kästchen ein. Der in das Kästchen hineinlaufende Pfeil wird mit dem Eingangspfeil von ω und der von dem Kästchen abgehende Pfeil mit dem Ausgangspfeil von ω verbunden.
77 Syntaxdiagramm - Auswertung Definition (Forts.): 3) Trifft man auf einen Kreis (Ellipse), so schreibt man seinen Inhalt, also ein Wort über T, auf (bzw. hängt es an das schon aufgeschriebene Wort an) und verläßt den Kreis (Ellipse) über den ausgehenden Pfeil. 4) Trifft man auf ein Kästchen, in dem ein Nichtterminalsymbol ω steht, so kopiert Rekursion man das Syntaxdiagramm ω anstelle des Kästchen möglich ein. Der in das Kästchen hineinlaufende Pfeil wird mit dem Eingangspfeil von ω und der von dem Kästchen abgehende Pfeil mit dem Ausgangspfeil von ω verbunden.
78 Syntaxdiagramm - erzeugte Sprache Definition: Jedes Wort, das nach irgendeiner Auswertung eines Syntaxdiagramms aufgeschrieben ist, kann durch das Syntaxdiagramm erzeugt werden. Die durch das Syntaxdiagramm definierte Sprache ist die Menge aller Wörter, die auf diese Weise erzeugt werden kann.
79 Syntaxdiagramm - Beispiel
80 Syntaxdiagramm - Beispiel... fängt mit einem Buchstaben an
81 Syntaxdiagramm - Beispiel... fängt mit einem Buchstaben an... gefolgt von beliebiger Folge von Buchstaben oder Ziffern
82 Syntaxdiagramm - Mächtigkeit Mächtigkeit von Syntaxdiagrammen: Kann man jede Sprache beschreiben? Ohne Beweis (Näheres s. Theoretische Informatik): Syntaxdiagramme beschreiben sehr eingeschränkte Sprachklasse: kontextfreie Sprachen bereits einfach Sprachen sind nicht kontextfrei: L={ n n ist Quadratzahl} die meisten Programmiersprachen sind aber i.w. kontextfreie Sprachen
83 Backus-Naur-Form nicht-graphische Methode zur Darstellung von Sprachen Erfinder: John Backus ( ), Peter Naur (*1928) zur Definition von ALGOL60 (um 1960)
84 Backus-Naur-Form - Prinzip Grundprinzip: Grammatik Beginne mit einer Zeichenfolge (Startsymbol) Erzeuge durch fortlaufende Anwendung von Ersetzungsschritten (Produktionsregeln) jedes Wort der Sprache formelle Notation zur Definition von Grammatiken erforderlich (Metasprache) Backus-Naur-Form ist eine solche Metasprache
85 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen: X ::= w1 w2... wn
86 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen einzelnes zur Beschreibung von Ersetzungen: Nichtterminalsymbol (in <>) X ::= w1 w2... wn
87 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen: X ::= w1 w2... wn
88 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen: Zeichenfolgen aus N T X ::= w1 w2... wn
89 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen: X ::= w1 w2... wn
90 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen:... steht für oder X ::= w1 w2... wn
91 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen: X ::= w1 w2... wn
92 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen:... darf ersetzt werden durch... X ::= w1 w2... wn
93 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen: X ::= w1 w2... wn
94 Backus-Naur-Form - Notation Menge von Nichtterminalsymbolen N (durch <> markiert) Menge von Terminalsymbolen T ausgezeichnetes Symbol S N (Startsymbol), bei dem Ersetzungsprozeß beginnt Regeln, Produktionen zur Beschreibung von Ersetzungen: Wenn in einem Wort an irgendeiner Stelle das Nichtterminalsymbol X vorkommt, so darf es durch eines der Worte w1,w2,...,wn ersetzt werden X ::= w1 w2... wn
95 Backus-Naur-Form - Grammatik Das Viertupel G=(N,T,P,S) heißt Grammatik in Backus-Naur-Form (BNF-Grammatik).
96 Backus-Naur-Form - Beispiel Beispiel: T={0,1,2,...,9,+,-} N={<Ziffer>, <ZifferohneNull>, <Ziffernfolge>, <Ganzzahl>} Startsymbol <Ganzzahl> Produktionen <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge>
97 Backus-Naur-Form - Beispiel Beispiel: T={0,1,2,...,9,+,-} N={<Ziffer>, <ZifferohneNull>, <Ziffernfolge>, <Ganzzahl>} Startsymbol <Ganzzahl> Produktionen gleiche Sprache wie das oben <ZifferohneNull>::= 1 2 angegebene Syntaxdiagramm <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> Diese BNF-Grammatik definiert die
98 Backus-Naur-Form - Definition Definition: Eine Grammatik in Backus-Naur-Form, kurz BNF- Grammatik, ist ein Viertupel G=(N,T,P,S) mit a) T ist die Menge der Terminalsymbole, N die Menge der Nichterminalsymbole und T N= ; b) S N ist das Startsymbol; c) P ist die Menge der Produktionen. Eine Produktion p P ist eine Zeichenfolge der Form X ::= w1 w2... wn wobei X N, n 1 und wi (N T)* für i=1,2,...,n sind.
99 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl>
100 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl>
101 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl>
102 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge>
103 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge>
104 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge>
105 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge>
106 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge>
107 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge>
108 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <Ziffer><Ziffernfolge>
109 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <Ziffer><Ziffernfolge>
110 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <Ziffer><Ziffernfolge>
111 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <Ziffer><Ziffernfolge> 7 <Ziffer> <Ziffer> <Ziffernfolge>
112 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <Ziffer><Ziffernfolge> 7 <Ziffer> <Ziffer> <Ziffernfolge> 7 <ZifferohneNull> <Ziffer> <Ziffernfolge>
113 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <Ziffer><Ziffernfolge> 7 <Ziffer> <Ziffer> <Ziffernfolge> 7 <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <ZifferohneNull> <Ziffer>
114 Backus-Naur-Form - Erzeugungsprozeß <ZifferohneNull>::= <Ziffer>::= 0 <ZifferohneNull> <Ziffernfolge>::= ε <Ziffer><Ziffernfolge> <Ganzzahl>::= <ZifferohneNull><Ziffernfolge> + <ZifferohneNull><Ziffernfolge> - <ZifferohneNull><Ziffernfolge> <Ganzzahl> <ZifferohneNull> <Ziffernfolge> <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <Ziffer><Ziffernfolge> 7 <Ziffer> <Ziffer> <Ziffernfolge> 7 <ZifferohneNull> <Ziffer> <Ziffernfolge> 7 <ZifferohneNull> <Ziffer> 73 <Ziffer> 73 <ZifferohneNull> 732
115 Backus-Naur-Form - Ableitung Definition: Sei G=(N,T,P,S) eine BNF-Grammatik. a) Ein Wort v (N T)* heißt in einem Schritt aus einem Wort u (N T)* ableitbar, wenn es Wörter u1,u2 (N T)*, ein X N und eine Produktion der Form X::=w1 w2... wn in P gibt, so daß für ein i {1,...,n} gilt: u=u1xu2 und v=u1wu2. Man schreibt dann kurz u v.
116 Backus-Naur-Form - Ableitung Definition (Forts.): b) Ein Wort v (N T)* heißt ableitbar aus einem Wort u (N T)*, wenn u=v ist oder wenn es Wörter u=u0,u1,u2,...,ur=v (N T)* gibt, so daß ui-1 ui für i {1,..., r} gilt. Man schreibt dann kurz u *v. u0 u1 u2... ur heißt Ableitung der Länge r von u0 nach ur.
117 Backus-Naur-Form - Ableitung Definition (Forts.): c) Die von einer BNF-Grammatik G erzeugte Sprache ist definiert durch L(G)={w T* S *w}. L(G) ist also die Menge aller aus dem Startsymbol ableitbaren Wörter, die nur aus Terminalsymbolen bestehen.
118 Backus-Naur-Form - Beispiel 1 Sei G=(N,T,P,<start>) eine BNF-Grammatik mit N={<start>}, T={a,b}, P={ <start>::= ε a<start> b<start>}. Mit G kann man jede beliebige Folge von a und b erzeugen, d.h. L(G)=T*.
119 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. Beispiel: ((()())())
120 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. Beispiel: <s> ((()())())
121 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. Beispiel: <s> (<s>) <s> ((()())())
122 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s>
123 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s>
124 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s>
125 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s>
126 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s>
127 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
128 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
129 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
130 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
131 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
132 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
133 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
134 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
135 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
136 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
137 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
138 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
139 Backus-Naur-Form - Beispiel 2 Sei G=(N,T,P,S) eine BNF-Grammatik mit N={<s>}, T={(,)}, P={<s>::=(<s>)<s> ε}. G erzeugt alle korrekten Klammerungen: z.b. ((()())()) Beispiel: <s> (<s>) <s> ((<s>)<s>)<s> ((<s>)<s>)(<s>)<s> (() <s>)(<s>)<s> (())(<s>)<s> (())()<s> (())()
140 Backus-Naur-Form - Beispiel 3 Die Grammatik G=(N,T,P,<Bez>) mit N={<Bez>,<Buchstabe>,<Zeichenkette>,<Ziffer>}, T={a,b,...,z,0,1,...,9}, P={<Bez>::= <Buchstabe> <Buchstabe><Zeichenkette>, <Zeichenkette>::= <Buchstabe> <Ziffer> <Buchstabe><Zeichenkette> <Ziffer><Zeichenkette>, <Ziffer>::= , <Buchstabe>::= a b... z} definiert die Sprache der Wörter über T, die als Bezeichner verwendet werden dürfen.
141 Backus-Naur-Form - Abkürzungen 1. Symbole oder Symbolfolgen, die auch weggelassen werden können, werden in eckige Klammern eingeschlossen: Statt A ::= B C B schreibe A ::= B [C]. Statt <Bez>::= <Buchstabe> <Buchstabe><Zeichenkette> schreibe <Bez> ::= <Buchstabe> [<Zeichenkette>]
142 Backus-Naur-Form - Abkürzungen 2. Symbole oder Symbolfolgen, die beliebig oft wiederholt oder weggelassen werden können, werden in geschweifte Klammern eingeschlossen. Statt <Bez>::= <Buchstabe> <Buchstabe><Zeichenkette> <Zeichenkette>::= <Buchstabe> <Ziffer> <Buchstabe><Zeichenkette> <Ziffer><Zeichenkette> schreibe <Bezeichner>::= <Buchstabe> {<Buchstabe> <Ziffer>}
143 Syntaxdiagramm - Mächtigkeit Mächtigkeit von BNF-Grammatiken? Ohne Beweis (Näheres s. Theoretische Informatik): BNF-Grammatiken beschreiben ebenfalls kontextfreie Sprachen kontextfrei: Nichtterminalzeichen <X> dürfen immer ersetzt werden, unabhängig davon, in welchem Kontext sie auftreten Zu jeder BNF-Grammatik kann man ein gleichwertiges Syntaxdiagramm konstruieren und umgekehrt.
144 Backus-Naur-Form - Mächtigkeit Programmiersprachen sind im wesentlichen kontextfreie Sprachen Gewisse Elemente lassen sich nicht kontextfrei beschreiben, z.b.: Deklarationspflicht von Bezeichnern diese Regel kann nicht durch ein Syntaxdiagramm oder eine BNF-Grammatik erzwungen werden Solche Regeln fügt man umgangssprachlich hinzu
145 Semantik - Erinnerung Programmiersprache P=(L,F) mit formaler Sprache L A* (Syntax) und Abbildung F, die jedem Programm w L seine Semantik zuordnet Wie definiert man F? Erinnerung: denotationale Semantik: Bedeutung von Programm w ist die berechnete Funktion fw: I O von der Menge I der Eingabedaten in die Menge O der Ausgabedaten
146 Semantik - semantische Funktion F ist also eine Funktion F: A* (I O) mit fw, falls w L F[w]= {, sonst. F heißt semantische Funktion. F liefert also zu jedem syntaktisch korrekten Programm(-text) die zugehörige berechnete Funktion.
147 semantische Funktion - Beispiel Beispiel: Gegeben w funktion f x:int int wenn x=1 dann 2 sonst 2*(f(x-1)). Offenbar w syntaktisch korrekt. Semantik von w: F[w]=exp2 mit exp2(x)= { 2 x, falls x 1, sonst. w berechnet also Zweierpotenz für x 1.
148 Semantik - Aufgabe Definiere F für alle Programme w einer Sprache P=(L,F) unendlich viele w?? Nutze speziellen syntaktischen Aufbau von w und definiere F induktiv über diesen Aufbau präzisiere Semantik aller Sprachelemente isoliert voneinander, zunächst elementare Sprachelemente, dann Konstruktoren usw. setze Semantik des Gesamtprogramms aus Teilsemantiken der Bestandteile zusammen
149 Semantik - Syntax von µml Hier Beschränkung auf eine Teilmenge von ML, genannt µml Datentyp int Ausdrücke über bool und int Wertdeklarationen val x=e Funktionsdefinitionen fun f x=... (nur 1 Parameter) Eingabe read
150 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
151 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
152 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
153 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
154 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
155 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
156 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
157 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
158 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
159 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
160 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
161 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
162 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
163 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
164 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
165 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
166 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
167 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
168 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
169 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
170 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
171 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
172 Semantik - Syntax in BNF <prog> ::= <decls> ; <call> <decls> ::= <decl> ; <decls> ε <decl> ::= <valuedecl> <fundecl> <valuedecl> ::= val <id> = <arithexp> <fundecl> ::= fun <id> <id> = <exp> <exp> ::= <arithexp> <condexp> <arithexp> ::= (<arithexp> <op> <arithexp>) <const> <id> <id> (<arithexp>) <op> ::= + - * / <condexp> ::= if <boolexp> then <exp> else <exp> <boolexp> ::= <arithexp>=<arithexp> <arithexp> <arithexp> true false <id> ::= "Bezeichner nach üblichen Konventionen" <const> ::= "ganzzahlige Konstante" <call> ::= (read(<id>); <arithexp>).
173 Semantik - µml-programmbeispiel val c=1; fun f x = if x=0 then c else f(x-1); (read(x);f(x)).
174 Semantik - Umgebungen Motivation: Semantik ist nicht absolut, sondern relativ Semantik von 2+x hängt vom Wert von x ab Wert von x hängt von der aktuellen Umgebung ab, in der der Ausdruck auftaucht Werte können sich je nach Bindung der Variablen ändern Merke in Symboltabelle, was ein Bezeichner aktuell repräsentiert
175 Semantik - Umgebungen Umgebungen u sind Abbildungen von Menge der Bezeichner in Menge der möglichen Werte in µml: elementare Werte und Funktionsrümpfe (=Ausdrücke). Definiere also: u: {Bezeichner} int ({Bezeichner} [int int] {Umgebungen}). Zu Bezeichner x liefert u aktuellen Wert u(x), sofern x gebunden, anderenfalls undefiniert.
176 Umgebungen - Varianten Zwei Varianten möglich: 1. x an elementaren Wert gebunden, so ist u(x) dieser Wert 2. x an Funktion gebunden, so ist u(x) ein Tripel (p,r,u'). Hierbei: p Bezeichner des formalen Parameters von x r Funktionsrumpf von x (also Ausdruck, der Funktion in [int int] beschreibt) u' Umgebung, in der x deklariert wurde (wg. Konzept der statischen Bindung von ML).
177 Umgebungen - statische Bindung (p,r,u') Konzept der statischen Bindung: Wird x aufgerufen, so gelten für die Objekte im Rumpf von x die Bindungen u' zum Zeitpunkt der Deklaration von x und nicht die Bindungen u zum Zeitpunkt des Aufrufs. Umgebung u' muß daher in dem Augenblick wiederhergestellt werden, wenn x aufgerufen wird.
178 Umgebungen - Bezeichnungen Bezeichnungen: Zu x, das in der Umgebung u eine Funktion bezeichne, also u(x)=(p,r,u'), sei π(u(x))=p (liefert formalen Parameter) ρ(u(x))=r (liefert Rumpf der Funktion) υ(u(x))=u' (liefert Umgebung, in der x deklariert wurde).
179 Umgebungen - Beispiel Beispiel: Umgebung u fun f a = if B then E1 else E2, Umgebung u' mit u'(f)=(a, if B then E1 else E2, u) π(u'(x))=a ρ(u'(x))=if B then E1 else E2 υ(u'(x))=u
180 Umgebungen - Darstellung Darstellung von Umgebungen als Menge von Gleichungen u={x1=w1,...,xn=wn} Bedeutung: xi=wi: Bezeichner xi hat in Umgebung u Wert wi. Für y xi, i=1,...,n gilt u(y)= (y in u nicht definiert).
181 Umgebungsänderungen Veränderung von Umgebungen im Laufe der Programmausführung: Operation + auf Umgebungen: Sei u={x1=w1,...,xn=wn} und u'={y1=v1,...,ym=vm}. Dann: u"=u+u' mit u(x), falls u'(x)=, u"(x)= { u'(x), sonst. In u" werden also Bindungen der Bezeichner in u durch Bindungen in u' überschrieben. Beachte: + nicht kommutativ.
182 Umgebungen - Beispiel Beispiel: u={x=2, y=3} u'={x=(a,if a=0 then 0 else 1,{y=4,z=0}), z=5}. Dann: u"=u+u'={x=(a,if a=0 then 0 else 1, {y=4,z=0}), y=3, z=5}.
183 Semantik von µml - Aufbau Semantische Funktionen für Programme B: µml [int int] stützen sich ab auf Deklarationen D: {Deklarationen} [{Umgebungen} {Umgebungen}] Ausdrücke E: {Ausdrücke} [{Umgebungen} int bool]
184 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
185 Semantik von µml - Programme B Menge aller Programme B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
186 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
187 Semantik von µml - Programme B B: µml [int int] mit Menge aller Funktionen B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
188 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
189 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
190 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
191 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
192 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
193 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
194 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
195 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
196 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
197 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
198 Semantik von µml - Programme B B: µml [int int] mit B[<decls>;(read(<id>);<arithexp>)](α)= E[<arithexp>]((D[<decls>] )+{<id>=α}).
199 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
200 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u Menge aller Deklarationen D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
201 Semantik von µml - Deklarationen D Menge aller Deklarationen Menge aller Umgebungsänderungen D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
202 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] Menge aller Umgebungsänderungen D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
203 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
204 Semantik von µml - Deklarationen D keine Deklaration - D: {Deklarationen} [{Umgebungen} {Umgebungen}] bleibt mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
205 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
206 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit nacheinander D[ ]u=u berücksichtigen D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
207 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit nacheinander D[ ]u=u berücksichtigen D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
208 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit nacheinander D[ ]u=u berücksichtigen D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
209 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit nacheinander D[ ]u=u berücksichtigen D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
210 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit nacheinander D[ ]u=u berücksichtigen D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
211 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
212 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
213 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
214 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
215 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
216 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
217 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
218 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
219 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
220 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
221 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
222 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
223 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
224 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
225 Semantik von µml - Deklarationen D D: {Deklarationen} [{Umgebungen} {Umgebungen}] mit D[ ]u=u D[<decl>;<decls>]=D[<decls>] D[<decl>] D[val <id>=<arithexp>]u=u+{<id>=e[<arithexp>]u} D[fun <id1><id2>=<exp>]u=u+{<id1>=(<id2>,<exp>,u)}
226 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
227 Semantik von µml - Ausdrücke E Menge aller Ausdrücke... E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
228 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
229 Semantik von µml - Ausdrücke E... die je nach Umgebung... E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
230 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
231 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit... Werte liefern E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
232 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
233 Semantik von µml - Ausdrücke E Operations -zeichen E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
234 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
235 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= Operation (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
236 Semantik von µml - Ausdrücke E E: {Ausdrücke} [{Umgebungen} int bool] mit E[(<arithexp1> + <arithexp2>)]u= (E[<arithexp1>]u + E[<arithexp2>]u, dto. f. -,*,/ E[<arithexp1> = <arithexp2>]u= E[<arithexp1>]u = E[<arithexp2>]u, E[<arithexp1> <arithexp2>]u= E[<arithexp1>]u E[<arithexp2>]u, E[true]u=wahr, E[false]u=falsch.
237 Semantik von µml - Ausdrücke E E[if <boolexp> then <exp1> else <exp2>]u= { E[<exp1>]u, falls E[<boolexp>]u=wahr, E[<exp2>]u, falls E[<boolexp>]u=falsch. E[<const>]u=<const>. E[<id>]u=u(<id>)
238 Semantik von µml - Ausdrücke E Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
239 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
240 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs in dieser Umgebung E[<id>(<arithexp>)]u= E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
241 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
242 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= nimm Umgebg., in der <id> dekl. wurde E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
243 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
244 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= reicher sie an um Dekl. von <id> E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
245 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
246 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= und um Dekl. des formalen Parameters E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
247 Semantik von µml - Ausdrücke E werte den Rumpf ρ aus Semantik eines Funktionsaufrufs E[<id>(<arithexp>)]u= E[ρ(u(<id>))](D[fun <id> (π(u(<id>)))=ρ(u(<id>)); val π(u(<id>))=e[<arithexp>]u]υ(u(<id>)))
248 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) Semantik: α bel. B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
249 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) B[<decls>;(read(<id>);<arithexp>)](α)= Semantik: α bel. E[<arithexp>]((D[<decls>] )+{<id>=α}). B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
250 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) B[<decls>;(read(<id>);<arithexp>)](α)= Semantik: α bel. E[<arithexp>]((D[<decls>] )+{<id>=α}). B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
251 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) B[<decls>;(read(<id>);<arithexp>)](α)= Semantik: α bel. E[<arithexp>]((D[<decls>] )+{<id>=α}). B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
252 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) B[<decls>;(read(<id>);<arithexp>)](α)= Semantik: α bel. E[<arithexp>]((D[<decls>] )+{<id>=α}). B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
253 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) B[<decls>;(read(<id>);<arithexp>)](α)= Semantik: α bel. E[<arithexp>]((D[<decls>] )+{<id>=α}). B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
254 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) B[<decls>;(read(<id>);<arithexp>)](α)= Semantik: α bel. E[<arithexp>]((D[<decls>] )+{<id>=α}). B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
255 Semantik von µml - Beispiel 1 Beispiel 1: Programm P: val x=1; val y=3; (read(z); (y*(z+x))) B[<decls>;(read(<id>);<arithexp>)](α)= Semantik: α bel. E[<arithexp>]((D[<decls>] )+{<id>=α}). B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}).
256 Semantik von µml - Beispiel 1 Hierbei: D[val x=1; val y=3]=d[val y=3] D[val x=1] Im einzelnen: D[val x=1] = +{x=e[1] }={x=1}, D[val y=3]{x=1}={x=1}+{y=e[3]{x=1}}={x=1}+{y=3}= {x=1,y=3}. Folglich: B[P](α)=E[(y*(z+x))]((D[val x=1; val y=3] )+{z=α}) =E[(y*(z+x))] {x=1,y=3,z=α} Setze nun: u={x=1,y=3,z=α}
257 Semantik von µml - Beispiel 1 Dann mit u={x=1,y=3,z=α}: E[(y*(z+x))]u=(E[y]u*E[(z+x)]u) =(E[y]u*(E[z]u+E[x]u)) =(u(y)*(u(z)+u(x)))=(3*(α+1)). Damit Semantik von P bewiesen: B[P](α)=3*(α+1).
258 Semantik von µml - Beispiel 2 Beispiel 2: Programm P': val c=1; fun f x = if x=0 then c else f(x-1); (read(x);f(x)). Semantik: α bel. B[P'](α)=E[f(x)]((D[val c=1; fun f x=if x=0 then c else f(x-1)] )+{x=α}).
259 Semantik von µml - Beispiel 2 Hierbei: D[val c=1; fun f x=if x=0 then c else f(x-1)]= D[fun f x=if x=0 then c else f(x-1)] D[val c=1] Im einzelnen: D[val c=1] = +{c=e[1] }={c=1}, D[fun f x=if x=0 then c else f(x-1)]{c=1}= {c=1}+{f=(x, if x=0 then c else f(x-1),{c=1})}= {c=1,f=(x, if x=0 then c else f(x-1),{c=1})}. Folglich: B[P'](α)=E[f(x)] {c=1,f=(x, if x=0 then c else f(x-1), {c=1}),z=α}
260 Semantik von µml - Beispiel 2 Dann mit u={c=1,f=(x, if x=0 then c else f(x-1), {c=1}),x=α}: E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]υ(u(f)))= E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]{c=1})= (*) E[if x=0 then c else f(x-1)]{x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}= E[c]u=u(c)=1, falls E[x=0]u=wahr, d.h., u(x)=0, { E[f(x-1)]u, sonst
261 Semantik von µml - Beispiel 2 Dann mit u={c=1,f=(x, if x=0 then c else f(x-1), {c=1}),x=α}: E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]υ(u(f)))= E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]{c=1})= (*) E[if x=0 then c else f(x-1)]{x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}= E[c]u=u(c)=1, falls E[x=0]u=wahr, d.h., u(x)=0, { E[f(x-1)]u, sonst
262 Semantik von µml - Beispiel 2 Dann mit u={c=1,f=(x, if x=0 then c else f(x-1), {c=1}),x=α}: E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]υ(u(f)))= E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]{c=1})= (*) E[if x=0 then c else f(x-1)]{x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}= E[c]u=u(c)=1, falls E[x=0]u=wahr, d.h., u(x)=0, { E[f(x-1)]u, sonst
263 Semantik von µml - Beispiel 2 Dann mit u={c=1,f=(x, if x=0 then c else f(x-1), {c=1}),x=α}: E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]υ(u(f)))= E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]{c=1})= (*) E[if x=0 then c else f(x-1)]{x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}= E[c]u=u(c)=1, falls E[x=0]u=wahr, d.h., u(x)=0, { E[f(x-1)]u, sonst
264 Semantik von µml - Beispiel 2 Dann mit u={c=1,f=(x, if x=0 then c else f(x-1), {c=1}),x=α}: E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]υ(u(f)))= E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]{c=1})= (*) E[if x=0 then c else f(x-1)]{x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}= E[c]u=u(c)=1, falls E[x=0]u=wahr, d.h., u(x)=0, { E[f(x-1)]u, sonst
265 Semantik von µml - Beispiel 2 Dann mit u={c=1,f=(x, if x=0 then c else f(x-1), {c=1}),x=α}: E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]υ(u(f)))= E[f(x)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x]u]{c=1})= (*) E[if x=0 then c else f(x-1)]{x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}= E[c]u=u(c)=1, falls E[x=0]u=wahr, d.h., u(x)=0, { E[f(x-1)]u, sonst
266 Semantik von µml - Beispiel 2 Hierbei ist wie oben: (**) E[f(x-1)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x-1]u]υ(u(f)))= E[f(x-1)]u=E[if x=0 then c else f(x-1)] (D[fun f x=if x=0 then c else f(x-1); val x=e[x-1]u]{c=1})= E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}
267 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
268 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
269 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
270 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
271 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
272 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
273 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
274 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst. F gesucht! G, u bekannt
275 (***) { Semantik von µml - Beispiel 2 Betrachte nun (*) und (**): E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} so geht (***) über in 1, falls u(x)=0 { F(u)= F(G(u)), sonst.
276 Semantik von µml - Beispiel 2 F ist implizit definiert, G, u bekannt: 1, falls u(x)=0 { Funktionalgleichung F(u)= F(G(u)), sonst. Analogien:
277 Semantik von F µml beschreibt - Beispiel Semantik 2 des Programms; F ist F ist implizit definiert, G, zu u ermitteln bekannt: 1, falls u(x)=0 { F(u)= F(G(u)), sonst. Analogien: Funktionalgleichung
278 Semantik von µml - Beispiel 2 F ist implizit definiert, G, u bekannt: 1, falls u(x)=0 { Funktionalgleichung F(u)= F(G(u)), sonst. Analogien:
279 Semantik von µml - Beispiel 2 F ist implizit definiert, G, u bekannt: 1, falls u(x)=0 { F(u)= F(G(u)), sonst. Analogien: x implizit x+3=2x-5 Lösung: x=8 Funktionalgleichung
280 Semantik von µml - Beispiel 2 F ist implizit definiert, G, u bekannt: 1, falls u(x)=0 { F(u)= F(G(u)), sonst. Analogien: x implizit x+3=2x-5 Lösung: x=8 f implizit f(2x)=2f(x) Lösungen: f(x)=0 f(x)=x... Funktionalgleichung
281 Semantik von µml - Beispiel 2 F ist implizit definiert, G, u bekannt: 1, falls u(x)=0 { F(u)= F(G(u)), sonst. Analogien: x implizit x+3=2x-5 Lösung: x=8 f implizit f(2x)=2f(x) Lösungen: f(x)=0 f(x)=x... Funktionalgleichung f implizit f(x+y)=f(x)f(y) Lösungen: f(x)=0 f(x)=e x...
282 Semantik von µml - Beispiel 2 F ist implizit definiert, G, u bekannt: 1, falls u(x)=0 F(u)= { F(G(u)), sonst. Probleme: Gibt es Funktionen F, die die Gleichung erfüllen? D.h. kann man dem Programm eine Bedeutung zuordnen? Das wäre schön. Gibt es evtl. mehrere Lösungen? D.h. kann das Programm mehrere Bedeutungen haben? Das wäre nicht schön.
283 Semantik von µml - Beispiel 2 Genauere Analyse und Schlüsselidee: Gleichung 1, falls u(x)=0 { F(u)= F(G(u)), sonst. ist eine Fixpunktgleichung der Form F=τ(F) mit 1, falls u(x)=0 τ(f)(u)= { F(G(u)), sonst. Problemabwandlung: Unter welchen Bedingungen besitzt τ Fixpunkte? Sind sie eindeutig bestimmt?
284 Einschub Fixpunkte - Beispiele
285 Einschub Fixpunkte - Beispiele vollkommene Zahlen: f(n)=summe der Teiler von n Fixpunkte: f(6)=1+2+3=6 f(28)= =28
286 Einschub Fixpunkte - Beispiele vollkommene Zahlen: Fixpunkte: f(n)=summe der Teiler von n Heron-Verfahren: x=f(x) mit 1. a Fixpunkt: f( a)= a f(6)=1+2+3=6 f(28)= =28 f(x)=(x+a/x)/2 2. Berechnung: f n (x0) a für n, x0 Startwert, z.b. x0=1
287 Fixpunktberechnung - Idee Übertragung des Heron-Verfahrens auf Fixpunktgleichungen der Form F=τ(F) mit 1, falls u(x)=0 τ(f)(u)= { F(G(u)), sonst. Explizite Berechnung des Fixpunktes F*: τ n (F0) F* für n, F0 Startwert (F0= )
288 Fixpunktberechnung - Beispiel vorweg
289 Fixpunktberechnung - Beispiel vorweg fun f x = if x=0 then c else f(x-1); kurz: f(x)=τ(f)(x)
290 Fixpunktberechnung - Beispiel vorweg fun f x = if x=0 then c else f(x-1); kurz: f(x)=τ(f)(x) Berechne: τ n ( ) für n
291 Fixpunktberechnung - Beispiel vorweg fun f x = if x=0 then c else f(x-1); kurz: f(x)=τ(f)(x) Berechne: τ n ( ) für n τ( )(x)=if x=0 then c else (x-1) =if x=0 then c else
292 Fixpunktberechnung - Beispiel vorweg fun f x = if x=0 then c else f(x-1); kurz: f(x)=τ(f)(x) Berechne: τ n ( ) für n τ( )(x)=if x=0 then c else (x-1) =if x=0 then c else τ 2 ( )(x)=τ(if x=0 then c else )(x) =if x=0 then c else (if x=0 then c else )(x-1) =if x=0 then c else (if x-1=0 then c else ) =if x=0 then c else if x=1 then c else
293 Fixpunktberechnung - Beispiel vorweg fun f x = if x=0 then c else f(x-1); kurz: f(x)=τ(f)(x) Berechne: τ n ( ) für n τ( )(x)=if x=0 then c else (x-1) =if x=0 then c else τ 2 ( )(x)=τ(if x=0 then c else )(x) =if x=0 then c else (if x=0 then c else )(x-1) =if x=0 then c else (if x-1=0 then c else ) =if x=0 then c else if x=1 then c else τ 3 ( )(x)=τ(if x=0 then c else )(x) =... =if x=0 then c else (if x-1=0 then c else ) =if x=0 then c else if x=1 then c else if x=2 then c else
294 Fixpunktberechnung - Beispiel vorweg fun f x = if x=0 then c else f(x-1); kurz: f(x)=τ(f)(x) Berechne: τ n ( ) für n τ( )(x)=if x=0 then c else (x-1) =if x=0 then c else τ 2 ( )(x)=τ(if x=0 then c else )(x) =if x=0 then c else (if x=0 then c else )(x-1) =if x=0 then c else (if x-1=0 then c else ) =if x=0 then c else if x=1 then c else τ 3 ( )(x)=τ(if x=0 then c else )(x) =... =if x=0 then c else (if x-1=0 then c else ) =if x=0 then c else if x=1 then c else if x=2 then c else τ n ( )(x)=if 0 x<n then c else
295 Fixpunktberechnung - Beispiel vorweg τ n ( )(x)=if 0 x then c else für n Ergebnis: Die von fun f x = if x=0 then c else f(x-1) berechnete Funktion, d.h. die Semantik von f lautet: f(x)= { c, falls x 0, sonst.
296 Fixpunktberechnung - Vorbereitung 1. Quell- und Zielbereich von F und τ untersuchen 2. Bereichen Struktur aufprägen; Abstände 3. Einschränkungen an F und τ formulieren 4. Existenz, Eindeutigkeit des Fixpunktes klären und Berechnungsverfahren analysieren Dana Scott: Outline of a mathematical theory of computation, 1970: vollständige Verbände; vollständige partielle Ordnungen (cpo)
297 Fixpunktberechnung - cpos Intuition Bereiche: Typen int, bool,... (vervollständigt!) τ operiert auf Funktionen über diesen Typen Ordne Funktionen nach Grad der Definiertheit: f g: g ist an mehr Stellen definiert als f und wo beide definiert, da sind sie gleich f für alle f
298 Fixpunktberechnung Fordere Abschlußeigenschaft: Ketten x1 x2 x3... besitzen ein Supremum (kleinste obere Schranke) Fordere Monotonie und Stetigkeit von τ: f g => τ(f) τ(g) Beweisbar: Ex. Fixpunkt der Gleichung F=τ(F) Der kleinste Fixpunkt F0 (bezgl. ) ist eindeutig. F0 läßt sich einfach berechnen als Grenzwert F0=limn τ n ( )
299 Fixpunktberechnung - Fixpunktsatz Satz: (Fixpunktsatz von Kleene) Sei (M, ) eine vollständige partielle Ordnung und τ: M M eine stetige Funktion. Dann besitzt τ einen bezgl. der Ordnung kleinsten Fixpunkt F0, und es gilt F0=limn τ n ( ). O. Beweis: In unseren Beispielen mit µml sind Voraussetzungen erfüllt und Fixpunktsatz anwendbar.
300 Fixpunktberechnung - prakt. Verfahren 1. Schritt: Setze x0:=. 2. Schritt: Wiederhole für n=0,1,2,... xn+1 τ(xn). Gilt irgendwann xr=xr+1, so ist xr=f0 gesuchter kleinster Fixpunkt. Tritt dieser Fall nicht ein, so approximiert der Zwischenwert xn den gesuchten kleinsten Fixpunkt beliebig genau. Grenzwertbetrachtungen nötig: F0=limn xn
301 Fixpunktberechnung - Anwendung Folglich besitzt die implizite Fixpunktgleichung E[if x=0 then c else f(x-1)]u= 1, falls u(x)=0, E[if x=0 then c else f(x-1)]{x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})}, sonst. { nach dem Satz von Kleene einen eindeutig bestimmten kleinsten Fixpunkt, der die Bedeutung von E[if x=0 then c else f(x-1)] und damit des gesamten Programms definiert.
302 Fixpunktberechnung - Anwendung Setzt man zur Abkürzung: F:=E[if x=0 then c else f(x-1)], G:=D[val x=x-1)] u:={x=α, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} dann ist folgende Gleichung zu lösen: 1, falls u(x)=0 { F(u)= = τ(f)(u) F(G(u)), sonst. {
303 Fixpunktberechnung - Anwendung Wende Satz von Kleene an und rechne: 1, falls u(x)=0 1, falls α=0 τ( )(u)= = { { (G(u)), sonst., sonst.
304 Fixpunktberechnung - Anwendung { { 1, falls u(x)=0 1, falls α=0 τ 2 ( )(u)= = 1, falls G(u)(x)=0 τ( )(G(u)), sonst. (G(G(u)), sonst. Hierbei ist G(u)=D[val x=x-1]u=u+{x=e[x-1]u}=u+{x=e[x-1]u-1} =u+{x=α-1} ={x=α-1, c=1, f=(x, if x=0 then c else f(x-1),{c=1})} und folglich G(u)(x)=α-1. Also gilt: 1, falls α=0 τ 2 ( )(u)= 1, falls α=1 {, sonst.
305 Fixpunktberechnung - Anwendung { { 1, falls u(x)=0 1, falls α=0 τ 2 ( )(u)= = 1, falls G(u)(x)=0 τ( )(G(u)), sonst. (G(G(u)), sonst. Hierbei ist G(u)=D[val x=x-1]u=u+{x=e[x-1]u}=u+{x=e[x-1]u-1} =u+{x=α-1} ={x=α-1, c=1, f=(x, if x=0 then τ c else war für f(x-1),{c=1})} einen und folglich G(u)(x)=α-1. Wert α=0 definiert, Also gilt: τ 2 schon für zwei 1, falls α=0 α=0 und α=1 τ 2 ( )(u)= 1, falls α=1 {, sonst.
Alphabet, formale Sprache
n Alphabet Alphabet, formale Sprache l nichtleere endliche Menge von Zeichen ( Buchstaben, Symbole) n Wort über einem Alphabet l endliche Folge von Buchstaben, die auch leer sein kann ( ε leere Wort) l
MehrSyntax von Programmiersprachen
"Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt Syntax von Programmiersprachen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang WS 07/08
Mehr7. Formale Sprachen und Grammatiken
7. Formale Sprachen und Grammatiken Computer verwenden zur Verarbeitung von Daten und Informationen künstliche, formale Sprachen (Maschinenspr., Assemblerspachen, Programmierspr., Datenbankspr., Wissensrepräsentationsspr.,...)
MehrKapitel 2. Methoden zur Beschreibung von Syntax
1 Kapitel 2 Methoden zur Beschreibung von Syntax Grammatik, die sogar Könige zu kontrollieren weiß... aus Molière, Les Femmes Savantes (1672), 2. Akt 2 Ziele Zwei Standards zur Definition der Syntax von
MehrFormale Sprachen, reguläre und kontextfreie Grammatiken
Formale Sprachen, reguläre und kontextfreie Grammatiken Alphabet A: endliche Menge von Zeichen Wort über A: endliche Folge von Zeichen aus A A : volle Sprache über A: Menge der A-Worte formale Sprache
Mehr1 Syntax von Programmiersprachen
1 Syntax von Programmiersprachen Syntax ( Lehre vom Satzbau ): formale Beschreibung des Aufbaus der Worte und Sätze, die zu einer Sprache gehören; im Falle einer Programmier-Sprache Festlegung, wie Programme
Mehr1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen. I.2. I.2. Grundlagen von von Programmiersprachen.
1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen I.2. I.2. Grundlagen von von Programmiersprachen. - 1 - 1. Der Begriff Informatik "Informatik" = Kunstwort aus Information und Mathematik
MehrGrammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)
Grammatiken Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V Startsymbol S V Produktionen P ( (V Σ) \ Σ ) (V Σ) Kurzschreibweise G = (V, Σ, P, S) Schreibweise für Produktion (α, β) P: α β 67 /
MehrAbschnitt 4: Daten und Algorithmen
Abschnitt 4: Daten und Algorithmen 4. Daten und Algorithmen 4.1 4.2 Syntaxdefinitionen 4.3 Eigenschaften von Algorithmen 4.4 Paradigmen der Algorithmenentwicklung Peer Kröger (LMU München) Einführung in
MehrTheorie der Informatik. Theorie der Informatik. 6.1 Einführung. 6.2 Alphabete und formale Sprachen. 6.3 Grammatiken. 6.4 Chomsky-Hierarchie
Theorie der Informatik 17. März 2014 6. Formale Sprachen und Grammatiken Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 6.1 Einführung
MehrObjektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln
Stefan Brass: OOP (Java), 3. Syntaxdiagramme und Grammatikregeln 1/32 Objektorientierte Programmierung Kapitel 3: Syntaxdiagramme und Grammatikregeln Stefan Brass Martin-Luther-Universität Halle-Wittenberg
MehrEinführung in die Informatik. Programming Languages
Einführung in die Informatik Programming Languages Beschreibung von Programmiersprachen Wolfram Burgard Cyrill Stachniss 1/15 Motivation und Einleitung Wir haben in den vorangehenden Kapiteln meistens
Mehr4. Induktives Definieren - Themenübersicht
Induktives Definieren 4. Induktives Definieren - Themenübersicht Induktives Definieren Natürliche Zahlen Operationen auf natürlichen Zahlen Induktive Algorithmen Induktiv definierte Mengen Binärbäume Boolesche
MehrKapitel 4: Syntaxdiagramme und Grammatikregeln
4. Syntaxdiagramme und Grammatikregeln 4-1 Objektorientierte Programmierung (Winter 2006/2007) Kapitel 4: Syntaxdiagramme und Grammatikregeln Syntaxdiagramme Grammatikregeln (kontextfrei) Beispiele: Lexikalische
MehrGrundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny
Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 1. Automaten und Sprachen 1.1 Endlicher Automat Einen endlichen Automaten stellen wir uns als Black Box vor, die sich aufgrund einer Folge von
MehrProgrammiersprachen und Übersetzer
Programmiersprachen und Übersetzer Sommersemester 2010 19. April 2010 Theoretische Grundlagen Problem Wie kann man eine unendliche Menge von (syntaktisch) korrekten Programmen definieren? Lösung Wie auch
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 8: kontextfreie Grammatiken Thomas Worsch Karlsruher Institut für Technologie, Fakultät für Informatik Wintersemester 2009/2010 1/37 Überblick Kontextfreie Grammatiken
Mehr6 Kontextfreie Grammatiken
6 Kontextfreie Grammatiken Reguläre Grammatiken und damit auch reguläre Ausdrücke bzw. endliche Automaten haben bezüglich ihres Sprachumfangs Grenzen. Diese Grenzen resultieren aus den inschränkungen,
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2015 23.04.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE3-Syntaxdiagramme (Stand 05.11.2010) Aufgabe 1: Entwickeln Sie Regeln zur Übersetzung von EBNF in Syntaxdiagramme. Aufgabe 2: Eine Zahl ist entweder
MehrEinführung in die Informatik Grammars & Parsers
Einführung in die Informatik Grammars & Parsers Grammatiken, Parsen von Texten Wolfram Burgard Cyrill Stachniss 12.1 Einleitung Wir haben in den vorangehenden Kapiteln meistens vollständige Java- Programme
MehrTheorie der Informatik
Theorie der Informatik 6. Formale Sprachen und Grammatiken Malte Helmert Gabriele Röger Universität Basel 17. März 2014 Einführung Beispiel: Aussagenlogische Formeln Aus dem Logikteil: Definition (Syntax
MehrFunktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda
ALP I λ Kalkül WS 2012/2013 Berechenbarkeit - inspiriert durch Hilbert's Frage - im Jahr 1900, Paris - Internationaler Mathematikerkongress Gibt es ein System von Axiomen, aus denen alle Gesetze der Mathematik
MehrGrundlagen der Programmierung - Datenstrukturen
Kapitel 6: Grundlagen der Programmierung - Datenstrukturen Einführung in die Informatik Wintersemester 2007/08 Prof. Bernhard Jung Übersicht Einleitung EBNF Ein Darstellungsmittel für den syntaktischen
MehrProgrammierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder
Prof. aa Dr. J. Giesl Programmierung WS12/13 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder Tutoraufgabe 1 (Syntax und Semantik): 1. Was ist Syntax? Was ist Semantik? Erläutern Sie den Unterschied. 2.
MehrProgrammieren I. Formale Sprachen. www.kit.edu. Institut für Angewandte Informatik
Programmieren I Formale Sprachen KIT Universität des Landes Baden-Württemberg und nationales Großforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu Formale Sprachen: Allgemeines Sprachen werden
Mehr3.4 Struktur von Programmen
3.4 Struktur von Programmen Programme sind hierarchisch aus Komponenten aufgebaut. Für jede Komponente geben wir Regeln an, wie sie aus anderen Komponenten zusammengesetzt sein können. program ::= decl*
MehrKontextfreie Grammatiken
Kontextfreie Grammatiken Bisher haben wir verschiedene Automatenmodelle kennengelernt. Diesen Automaten können Wörter vorgelegt werden, die von den Automaten gelesen und dann akzeptiert oder abgelehnt
MehrJava für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel
Java für Anfänger Teil 2: Java-Syntax Programmierkurs 06.-10.10.2008 Manfred Jackel 1 Syntax für die Sprache Java public class Welcome { } Schlüsselworte Reservierte Worte Keywords Wortsymbol Syntax: griech.
MehrInterdisziplinäre fachdidaktische Übung: Modelle für Sprachen in der Informatik. SS 2016: Grossmann, Jenko
Interdisziplinäre fachdidaktische Übung: Modelle für Sprachen in der SS 2016: Grossmann, Jenko Die Beschreibung orientiert sich am Begriffssystem der Beschreibung natürlicher Sprachen Sprache in der steht
Mehrc) {abcde, abcfg, bcade, bcafg} d) {ade, afg, bcde, bcfg} c) {abcabc} d) {abcbc, abc, a} c) {aa, ab, ba, bb} d) {{aa}, {ab}, {ba}, {bb}}
2 Endliche Automaten Fragen 1. Was ergibt sich bei {a, bc} {de, fg}? a) {abc, defg} b) {abcde, abcfg} c) {abcde, abcfg, bcade, bcafg} d) {ade, afg, bcde, bcfg} 2. Was ergibt sich bei {abc, a} {bc, λ}?
MehrGrammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht
Zusammenhang: Formale Sprache Grammatik Formale Sprache kann durch Grammatik beschrieben werden. Zur Sprache L = L(G) gehören nur diejenigen Kombinationen der Zeichen des Eingabealphabets, die durch die
MehrÜbungsaufgaben zu Formalen Sprachen und Automaten
Universität Freiburg PD Dr. A. Jakoby Sommer 27 Übungen zum Repetitorium Informatik III Übungsaufgaben zu Formalen Sprachen und Automaten. Untersuchen Sie das folgende Spiel: A B x x 2 x 3 C D Eine Murmel
MehrFormale Methoden 2. Gaetano Geck Lehrstuhl I Logik in der Informatik WS 2015/2016
Formale Methoden 2 Gaetano Geck Lehrstuhl I Logik in der Informatik WS 2015/2016 Teil 3: Kodierung 1 Motivation 2 Exkurs Grundlagen formaler Sprachen 3 Grundlagen 4 Beispielkodierungen FM2 (WS 2014/15,
MehrBeschreibungskomplexität von Grammatiken Definitionen
Beschreibungskomplexität von Grammatiken Definitionen Für eine Grammatik G = (N, T, P, S) führen wir die folgenden drei Komplexitätsmaße ein: Var(G) = #(N), Prod(G) = #(P ), Symb(G) = ( α + β + 1). α β
MehrGrundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I
Vorlesung Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I Bernhard Beckert Institut für Informatik Sommersemester 2007 B. Beckert Grundlagen d. Theoretischen Informatik:
MehrFormale Sprachen und endliche Automaten
Formale Sprachen und endliche Automaten Formale Sprachen Definition: 1 (Alphabet) Ein Alphabet Σ ist eine endliche, nichtleere Menge von Zeichen oder Symbolen. Ein Wort über dem Alphabet Σ ist eine endliche
MehrTheoretische Informatik Mitschrift
Theoretische Informatik Mitschrift 2. Grammatiken und die Chomsky-Hierarchie Beispiel: Syntaxdefinition in BNF :=
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik 4. Kellerautomaten und kontextfreie Sprachen (III) 17.06.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Übersicht 1. Motivation 2. Terminologie
MehrWas bisher geschah: Formale Sprachen
Was bisher geschah: Formale Sprachen Alphabet, Wort, Sprache Operationen und Relationen auf Wörtern und Sprachen Darstellung unendlicher Sprachen durch reguläre Ausdrücke (Syntax, Semantik, Äquivalenz)
MehrAlgorithmen mit konstantem Platzbedarf: Die Klasse REG
Algorithmen mit konstantem Platzbedarf: Die Klasse REG Sommerakademie Rot an der Rot AG 1 Wieviel Platz brauchen Algorithmen wirklich? Daniel Alm Institut für Numerische Simulation Universität Bonn August
MehrFormale Sprachen. Grammatiken und die Chomsky-Hierarchie. Rudolf FREUND, Marian KOGLER
Formale Sprachen Grammatiken und die Chomsky-Hierarchie Rudolf FREUND, Marian KOGLER Grammatiken Das fundamentale Modell zur Beschreibung von formalen Sprachen durch Erzeugungsmechanismen sind Grammatiken.
MehrWS06/07 Referentin: Katharina Blinova. Formale Sprachen. Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven
WS06/07 Referentin: Katharina Blinova Formale Sprachen Hauptseminar Intelligente Systeme Dozent: Prof. Dr. J. Rolshoven 1. Allgemeines 2. Formale Sprachen 3. Formale Grammatiken 4. Chomsky-Hierarchie 5.
MehrLemma Für jede monotone Grammatik G gibt es eine kontextsensitive
Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive Grammatik G mit L(G) = L(G ). Beweis im Beispiel (2.): G = (V,Σ, P, S) : P = {S asbc, S abc, CB BC, ab ab, bb bb, bc bc, cc cc}. (i) G
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2015 22.04.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
MehrWS 2009/10. Diskrete Strukturen
WS 2009/10 Diskrete Strukturen Prof. Dr. J. Esparza Lehrstuhl für Grundlagen der Softwarezuverlässigkeit und theoretische Informatik Fakultät für Informatik Technische Universität München http://www7.in.tum.de/um/courses/ds/ws0910
Mehrkontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung
Theoretische Informatik Rainer Schrader Zentrum für Angewandte Informatik Köln 14. Juli 2009 1 / 40 2 / 40 Beispiele: Aus den bisher gemachten Überlegungen ergibt sich: aus der Chomsky-Hierarchie bleiben
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2016 20.04.2016 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Terminologie 2. Endliche Automaten und reguläre Sprachen
MehrStrukturelle Rekursion und Induktion
Kapitel 2 Strukturelle Rekursion und Induktion Rekursion ist eine konstruktive Technik für die Beschreibung unendlicher Mengen (und damit insbesondere für die Beschreibung unendliche Funktionen). Induktion
MehrFORMALE SYSTEME. Sprachen beschreiben. Wiederholung. Wie kann man Sprachen beschreiben? 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie
Wiederholung FORMALE SYSTEME 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie Markus Krötzsch Formale Sprachen sind in Praxis und Theorie sehr wichtig Ein Alphabet ist eine nichtleere, endliche Menge
MehrAbschnitt 3: Mathematische Grundlagen
Abschnitt 3: Mathematische Grundlagen 3. Mathematische Grundlagen 3.1 3.2 Induktion und Rekursion 3.3 Boolsche Algebra Peer Kröger (LMU München) Einführung in die Programmierung WS 14/15 48 / 155 Überblick
MehrAlgorithmen & Programmierung. Formale Sprachen Die Logik hinter dem Compiler
Algorithmen & Programmierung Formale Sprachen Die Logik hinter dem Compiler Natürlichsprachliche Programme? Können Programme natürlichsprachlich formuliert werden? Kaufe zwei Tüten Mehl und Gemüse!? Implizites
MehrJava für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel
Java für Anfänger Teil 2: Java-Syntax Programmierkurs 11.-15.10.2010 Manfred Jackel 1 Syntax für die Sprache Java public class Welcome { } Schlüsselworte Reservierte Worte Keywords Wortsymbol Syntax: griech.
MehrSprachen/Grammatiken eine Wiederholung
Sprachen/Grammatiken eine Wiederholung Was sind reguläre Sprachen? Eigenschaften regulärer Sprachen Sprachen Begriffe Symbol: unzerlegbare Grundzeichen Alphabet: endliche Menge von Symbolen Zeichenreihe:
MehrBegriffe (Wiederholung)
Begriffe (Wiederholung) Sprache Menge aller Sätze Alphabet terminales / nicht terminales terminales A. Zeichen aus denen die Sätze der Sprache bestehen nicht terminales A. Hilfszeichen zum Bilden von Regeln
MehrGrundlagen der Theoretischen Informatik
Grundlagen der Theoretischen Informatik Sommersemester 2015 29.04.2015 Viorica Sofronie-Stokkermans e-mail: sofronie@uni-koblenz.de 1 Bis jetzt 1. Motivation 2. Terminologie 3. Endliche Automaten und reguläre
MehrProgrammierkurs II. C und Assembler
Programmierkurs II C und Assembler Prof. Dr. Wolfgang Effelsberg Universität Mannheim Sommersemester 2003 1-1 Inhalt Teil I: Die Programmiersprache C 2. Datentypen und Deklarationen 3. Operatoren und Ausdrücke
MehrUmformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.
Chomsky-0-Grammatik Rek. Aufz. Satz T5.2.2: Wenn L durch eine Chomsky-0- Grammatik G beschrieben wird, gibt es eine NTM M, die L akzeptiert. Beweis: Algo von M: Schreibe S auf freie Spur. Iteriere: Führe
MehrGTI. Hannes Diener. 18. Juni. ENC B-0123,
GTI Hannes Diener ENC B-0123, diener@math.uni-siegen.de 18. Juni 1 / 32 Als Literatur zu diesem Thema empfiehlt sich das Buch Theoretische Informatik kurzgefasst von Uwe Schöning (mittlerweile in der 5.
MehrAutomaten und Formale Sprachen
Automaten und Formale Sprachen Prof. Dr. Dietrich Kuske FG Theoretische Informatik, TU Ilmenau Wintersemester 2011/12 WS 11/12 1 Organisatorisches zur Vorlesung Informationen, aktuelle Version der Folien
MehrLexikalische Programmanalyse der Scanner
Der Scanner führt die lexikalische Analyse des Programms durch Er sammelt (scanned) Zeichen für Zeichen und baut logisch zusammengehörige Zeichenketten (Tokens) aus diesen Zeichen Zur formalen Beschreibung
Mehr(Prüfungs-)Aufgaben zu formale Sprachen
(Prüfungs-)Aufgaben zu formale Sprachen (siehe auch bei den Aufgaben zu endlichen Automaten) 1) Eine Grammatik G sei gegeben durch: N = {S, A}, T = {a, b, c, d}, P = { (S, Sa), (S, ba), (A, ba), (A, c),
MehrGrundlagen der Informatik II. Teil I: Formale Modelle der Informatik
Grundlagen der Informatik II Teil I: Formale Modelle der Informatik 1 Einführung GdInfoII 1-2 Ziele/Fragestellungen der Theoretischen Informatik 1. Einführung abstrakter Modelle für informationsverarbeitende
MehrSprachen und Programmiersprachen
Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische Korrektheit fest. Semantik legt die Bedeutung von syntaktisch korrekten
MehrFormale Sprachen und Grammatiken
Formale Sprachen und Grammatiken Jede Sprache besitzt die Aspekte Semantik (Bedeutung) und Syntax (formaler Aufbau). Die zulässige und korrekte Form der Wörter und Sätze einer Sprache wird durch die Syntax
MehrEinführung in die Informatik 2
Einführung in die Informatik 2 Mathematische Grundbegriffe Sven Kosub AG Algorithmik/Theorie komplexer Systeme Universität Konstanz E 202 Sven.Kosub@uni-konstanz.de Sprechstunde: Freitag, 12:30-14:00 Uhr,
Mehrsyntax.tex Eine Übersicht
syntax.tex Eine Übersicht Bernd Worsch 7. Juli 1997 Inhaltsverzeichnis 1 Einleitung 1 2 Bevor es funktioniert... 1 3 Grundelemente von syntax.tex 1 4 Strukturelemente von syntax.tex 3 5 Setzen von Syntaxdiagrammen
MehrAlgorithmen und Datenstrukturen I - Exkurs Formale Sprachen -
Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen - Thies Pfeiffer Technische Fakultät tpfeiffe@techfak.uni-bielefeld.de Vorlesung, Universität Bielefeld, Winter 2012/2013 1 / 1 Exkurs: Formale
MehrKapitel 3: Reguläre Grammatiken und Endliche. Automaten
Kapitel 3: Reguläre Grammatiken und Endliche Automaten Prof.-Dr. Peter Brezany Institut für Softwarewissenschaft Universität Wien, Liechtensteinstraße 22 090 Wien Tel. : 0/4277 38825 E-mail : brezany@par.univie.ac.at
MehrWas bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen
Was bisher geschah Chomsky-Hierarchie für Sprachen: L 0 Menge aller durch (beliebige) Grammatiken beschriebenen Sprachen L 1 Menge aller monotonen (Kontextsensitive) Sprachen L 2 Menge aller kontextfreien
MehrFakultät für Informatik Universität Magdeburg Jürgen Dassow. Motivation Englisch
Motivation Englisch Mary and John are a woman and a man, respectively. Mary, John and William are a woman, a man and a man, respectively. Mary, John, William and Jenny are a woman, a man, a man and a woman,
MehrKapitel 2 Mathematische Grundlagen
Kapitel 2 Mathematische Grundlagen Ziel: Einführung/Auffrischung einiger mathematischer Grundlagen 2.1 Mengen, Relationen, Ordnungen Definition: Eine Menge ist eine Zusammenfassung von wohlbestimmten und
MehrAbschnitt 3: Mathematische Grundlagen
Abschnitt 3: Mathematische Grundlagen 3. Mathematische Grundlagen 3.1 3.2 Boolsche Algebra 3.3 Induktion und Rekursion Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 46 / 708 Überblick
Mehr3 Allgemeine Algebren
Grundlagen der Mathematik für Informatiker 1 3 Allgemeine Algebren Definition 3.1 Für eine Menge A nennen wir eine n-stellige Funktion ω : A n A eine n-äre algebraische Operation. Bemerkung zum Fall n
MehrRekursiv aufzählbare Sprachen
Kapitel 4 Rekursiv aufzählbare Sprachen 4.1 Grammatiken und die Chomsky-Hierarchie Durch Zulassung komplexer Ableitungsregeln können mit Grammatiken größere Klassen als die kontextfreien Sprachen beschrieben
MehrKapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie
Gliederung 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie 2.1. 2.2. Reguläre Sprachen 2.3. Kontextfreie Sprachen 2/1, Folie 1 2015 Prof. Steffen
MehrTheoretische Informatik. Grammatiken. Grammatiken. Grammatiken. Rainer Schrader. 9. Juli 2009
Theoretische Informatik Rainer Schrader Institut für Informatik 9. Juli 2009 1 / 41 2 / 41 Gliederung die Chomsky-Hierarchie Typ 0- Typ 3- Typ 1- Die Programmierung eines Rechners in einer höheren Programmiersprache
Mehr3. Relationen Erläuterungen und Schreibweisen
3. Relationen Eine Relation ist allgemein eine Beziehung, die zwischen Dingen bestehen kann. Relationen im Sinne der Mathematik sind ausschließlich diejenigen Beziehungen, bei denen stets klar ist, ob
MehrMotivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.
Kontextfreie Kontextfreie Motivation Formale rundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen Bisher hatten wir Automaten, die Wörter akzeptieren Frank Heitmann heitmann@informatik.uni-hamburg.de
MehrProgrammieren für Fortgeschrittene
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme Wintersemester 2011/12 Programmieren für Fortgeschrittene Rekursive Spezifikationen Die folgende
MehrVorlesung Theoretische Informatik
Vorlesung Theoretische Informatik Automaten und Formale Sprachen Hochschule Reutlingen Fakultät für Informatik Masterstudiengang Wirtschaftsinformatik überarbeitet von F. Laux (Stand: 09.06.2010) Sommersemester
Mehr8. Turingmaschinen und kontextsensitive Sprachen
8. Turingmaschinen und kontextsensitive Sprachen Turingmaschinen (TM) von A. Turing vorgeschlagen, um den Begriff der Berechenbarkeit formal zu präzisieren. Intuitiv: statt des Stacks bei Kellerautomaten
MehrGrundlagen der Informatik II
Grundlagen der Informatik II Dr.-Ing. Sven Hellbach S. Hellbach Grundlagen der Informatik II Abbildungen entnommen aus: Dirk W. Hoffmann: Theoretische Informatik; Hanser Verlag 2011, ISBN: 978-3-446-42854-6
MehrDie Logik der Sprache PL
II Die Logik der Sprache PL 16 Der Aufbau der Sprache PL Ein Beispiel Problem (1) Alle Menschen sind sterblich. Sokrates ist ein Mensch. Also: Sokrates ist sterblich. Intuitiv ist dieses Argument gültig.
MehrKapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14
Kapitel: Die Chomsky Hierarchie Die Chomsky Hierarchie 1 / 14 Allgemeine Grammatiken Definition Eine Grammatik G = (Σ, V, S, P) besteht aus: einem endlichen Alphabet Σ, einer endlichen Menge V von Variablen
MehrAutomaten und formale Sprachen Klausurvorbereitung
Automaten und formale Sprachen Klausurvorbereitung Rami Swailem Mathematik Naturwissenschaften und Informatik FH-Gießen-Friedberg Inhaltsverzeichnis 1 Definitionen 2 2 Altklausur Jäger 2006 8 1 1 Definitionen
MehrGrundbegriffe. Grammatiken
Grammatiken Grammatiken in der Informatik sind ähnlich wie Grammatiken für natürliche Sprachen ein Mittel, um alle syntaktisch korrekten Sätze (hier: Wörter) einer Sprache zu erzeugen. Beispiel: Eine vereinfachte
MehrDas Postsche Korrespondenzproblem
Das Postsche Korrespondenzproblem Eine Instanz des PKP ist eine Liste von Paaren aus Σ Σ : (v 1, w 1 ),..., (v n, w n ) Eine Lösung ist eine Folge i 1,..., i k von Indizes 1 i j n mit v i1... v ik = w
MehrReguläre Sprachen und endliche Automaten
Reguläre Sprachen und endliche Automaten 1 Motivation: Syntaxüberprüfung Definition: Fließkommazahlen in Java A floating-point literal has the following parts: a whole-number part, a decimal point (represented
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Einheit 6: formale Sprachen Thomas Worsch Universität Karlsruhe, Fakultät für Informatik November 2008 1/14 Überblick Formale Sprachen Formale Sprachen Produkt formaler Sprachen
MehrGrundbegriffe der Informatik
Grundbegriffe der Informatik Kapitel 21: Relationen Thomas Worsch KIT, Institut für Theoretische Informatik Wintersemester 2015/2016 GBI Grundbegriffe der Informatik KIT, Institut für Theoretische Informatik
MehrKapitel 3: Grundlegende Ergebnisse aus der Komplexitätstheorie Gliederung
Gliederung 1. Berechenbarkeitstheorie 2. Grundlagen 3. Grundlegende Ergebnisse aus der Komplexitätstheorie 4. Die Komplexitätsklassen P und NP 5. Die Komplexitätsklassen RP und BPP 3.1. Ressourcenkompression
MehrMathematische Grundlagen der Computerlinguistik Relationen und Funktionen
Mathematische Grundlagen der Computerlinguistik Relationen und Funktionen Dozentin: Wiebke Petersen 2. Foliensatz Wiebke Petersen math. Grundlagen 20 n-tupel und Cartesisches Produkt Mengen sind ungeordnet,
Mehr6 F O R M A L E S P R A C H E N. 6.1 formale sprachen
6.1 formale sprachen 6 F O R M A L E S P R A C H E N Eine natürliche Sprache umfasst mehrere Aspekte, z. B. Aussprache und Stil, also z. B. Wortwahl und Satzbau. Dafür ist es auch notwendig zu wissen,
MehrAlgorithmen und Formale Sprachen
Algorithmen und Formale Sprachen Algorithmen und formale Sprachen Formale Sprachen und Algorithmen Formale Sprachen und formale Algorithmen (formale (Sprachen und Algorithmen)) ((formale Sprachen) und
MehrFormale Sprachen. Script, Kapitel 4. Grammatiken
Formale Sprachen Grammatiken Script, Kapitel 4 erzeugen Sprachen eingeführt von Chomsky zur Beschreibung natürlicher Sprache bedeutend für die Syntaxdefinition und -analyse von Programmiersprachen Automaten
MehrTheoretische Informatik I
Theoretische nformatik inheit 3 Kontextfreie Sprachen 1. Kontextfreie Grammatiken 2. Pushdown Automaten 3. igenschaften kontextfreier Sprachen Theoretische nformatik inheit 3.1 Kontextfreie Grammatiken
MehrTheoretische Grundlagen der Informatik
Theoretische Grundlagen der Informatik Vorlesung am 10.01.2012 INSTITUT FÜR THEORETISCHE 0 KIT 12.01.2012 Universität des Dorothea Landes Baden-Württemberg Wagner - Theoretische und Grundlagen der Informatik
MehrInhalt Kapitel 5: Syntax
Inhalt Kapitel 5: Syntax 1 Syntax und Semantik 2 Formale Sprachen 3 Backus-Naur Form 4 Chomsky Grammatik 5 Reguläre Ausdrücke 6 Endliche Automaten 180 Syntax und Semantik Syntax Syntax: Festlegung des
Mehr