Grundlagen der Programmiersprachen

Größe: px
Ab Seite anzeigen:

Download "Grundlagen der Programmiersprachen"

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

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

Mehr

Syntax von Programmiersprachen

Syntax 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

Mehr

7. Formale Sprachen und Grammatiken

7. 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.,...)

Mehr

Kapitel 2. Methoden zur Beschreibung von Syntax

Kapitel 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

Mehr

Formale Sprachen, reguläre und kontextfreie Grammatiken

Formale 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

Mehr

1 Syntax von Programmiersprachen

1 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

Mehr

1. 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. 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

Mehr

Grammatiken. 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. 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 /

Mehr

Abschnitt 4: Daten und Algorithmen

Abschnitt 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

Mehr

Theorie 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. 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

Mehr

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme und Grammatikregeln

Objektorientierte 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

Mehr

Einführung in die Informatik. Programming Languages

Einfü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

Mehr

4. Induktives Definieren - Themenübersicht

4. 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

Mehr

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Kapitel 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

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen 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

Mehr

Programmiersprachen und Übersetzer

Programmiersprachen 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

Mehr

Grundbegriffe der Informatik

Grundbegriffe 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

Mehr

6 Kontextfreie Grammatiken

6 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,

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen 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

Mehr

Programmierkurs Java

Programmierkurs 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

Mehr

Einführung in die Informatik Grammars & Parsers

Einfü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

Mehr

Theorie der Informatik

Theorie 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

Mehr

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Funktionale 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

Mehr

Grundlagen der Programmierung - Datenstrukturen

Grundlagen 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

Mehr

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Programmierung 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.

Mehr

Programmieren I. Formale Sprachen. www.kit.edu. Institut für Angewandte Informatik

Programmieren 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

Mehr

3.4 Struktur von Programmen

3.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*

Mehr

Kontextfreie Grammatiken

Kontextfreie 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

Mehr

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Java 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.

Mehr

Interdisziplinäre fachdidaktische Übung: Modelle für Sprachen in der Informatik. SS 2016: Grossmann, Jenko

Interdisziplinä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

Mehr

c) {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}}

c) {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, λ}?

Mehr

Grammatik Prüfung möglich, ob eine Zeichenfolge zur Sprache gehört oder nicht

Grammatik 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

Ü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

Mehr

Formale 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 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,

Mehr

Beschreibungskomplexität von Grammatiken Definitionen

Beschreibungskomplexitä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). α β

Mehr

Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I

Grundlagen 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:

Mehr

Formale Sprachen und endliche Automaten

Formale 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

Mehr

Theoretische Informatik Mitschrift

Theoretische Informatik Mitschrift Theoretische Informatik Mitschrift 2. Grammatiken und die Chomsky-Hierarchie Beispiel: Syntaxdefinition in BNF :=

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen 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

Mehr

Was bisher geschah: Formale Sprachen

Was 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)

Mehr

Algorithmen mit konstantem Platzbedarf: Die Klasse REG

Algorithmen 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

Mehr

Formale Sprachen. Grammatiken und die Chomsky-Hierarchie. Rudolf FREUND, Marian KOGLER

Formale 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.

Mehr

WS06/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 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.

Mehr

Lemma Für jede monotone Grammatik G gibt es eine kontextsensitive

Lemma 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

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen 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

Mehr

WS 2009/10. Diskrete Strukturen

WS 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

Mehr

kontextfreie Grammatiken Theoretische Informatik kontextfreie Grammatiken kontextfreie Grammatiken Rainer Schrader 14. Juli 2009 Gliederung

kontextfreie 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

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen 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

Mehr

Strukturelle Rekursion und Induktion

Strukturelle 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

Mehr

FORMALE SYSTEME. Sprachen beschreiben. Wiederholung. Wie kann man Sprachen beschreiben? 2. Vorlesung: Grammatiken und die Chomsky-Hierarchie

FORMALE 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

Mehr

Abschnitt 3: Mathematische Grundlagen

Abschnitt 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

Mehr

Algorithmen & Programmierung. Formale Sprachen Die Logik hinter dem Compiler

Algorithmen & 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

Mehr

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Java 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.

Mehr

Sprachen/Grammatiken eine Wiederholung

Sprachen/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:

Mehr

Begriffe (Wiederholung)

Begriffe (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

Mehr

Grundlagen der Theoretischen Informatik

Grundlagen 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

Mehr

Programmierkurs II. C und Assembler

Programmierkurs 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

Mehr

Umformung NTM DTM. Charakterisierung rek. aufz. Spr. Chomsky-3-Grammatiken (T5.3) Chomsky-0-Grammatik Rek. Aufz.

Umformung 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

Mehr

GTI. Hannes Diener. 18. Juni. ENC B-0123,

GTI. 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.

Mehr

Automaten und Formale Sprachen

Automaten 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

Mehr

Lexikalische Programmanalyse der Scanner

Lexikalische 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 (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),

Mehr

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Grundlagen 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

Mehr

Sprachen und Programmiersprachen

Sprachen und Programmiersprachen Sprachen und Programmiersprachen Natürliche Sprachen versus Programmiersprachen / Spezifikationssprachen Syntax legt die grammatikalische Korrektheit fest. Semantik legt die Bedeutung von syntaktisch korrekten

Mehr

Formale Sprachen und Grammatiken

Formale 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

Mehr

Einführung in die Informatik 2

Einfü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,

Mehr

syntax.tex Eine Übersicht

syntax.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

Mehr

Algorithmen und Datenstrukturen I - Exkurs Formale Sprachen -

Algorithmen 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

Mehr

Kapitel 3: Reguläre Grammatiken und Endliche. Automaten

Kapitel 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

Mehr

Was 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 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

Mehr

Fakultät für Informatik Universität Magdeburg Jürgen Dassow. Motivation Englisch

Fakultä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,

Mehr

Kapitel 2 Mathematische Grundlagen

Kapitel 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

Mehr

Abschnitt 3: Mathematische Grundlagen

Abschnitt 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

Mehr

3 Allgemeine Algebren

3 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

Mehr

Rekursiv aufzählbare Sprachen

Rekursiv 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

Mehr

Kapitel 2: Formale Sprachen Gliederung. 0. Grundbegriffe 1. Endliche Automaten 2. Formale Sprachen 3. Berechnungstheorie 4. Komplexitätstheorie

Kapitel 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

Mehr

Theoretische Informatik. Grammatiken. Grammatiken. Grammatiken. Rainer Schrader. 9. Juli 2009

Theoretische 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

Mehr

3. Relationen Erläuterungen und Schreibweisen

3. 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

Mehr

Motivation. Formale Grundlagen der Informatik 1 Kapitel 5 Kontextfreie Sprachen. Informales Beispiel. Informales Beispiel.

Motivation. 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

Mehr

Programmieren für Fortgeschrittene

Programmieren 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

Mehr

Vorlesung Theoretische Informatik

Vorlesung 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

Mehr

8. Turingmaschinen und kontextsensitive Sprachen

8. 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

Mehr

Grundlagen der Informatik II

Grundlagen 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

Mehr

Die Logik der Sprache PL

Die 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.

Mehr

Kapitel: Die Chomsky Hierarchie. Die Chomsky Hierarchie 1 / 14

Kapitel: 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

Mehr

Automaten und formale Sprachen Klausurvorbereitung

Automaten 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

Mehr

Grundbegriffe. Grammatiken

Grundbegriffe. 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

Mehr

Das Postsche Korrespondenzproblem

Das 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

Mehr

Reguläre Sprachen und endliche Automaten

Regulä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

Mehr

Grundbegriffe der Informatik

Grundbegriffe 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

Mehr

Grundbegriffe der Informatik

Grundbegriffe 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

Mehr

Kapitel 3: Grundlegende Ergebnisse aus der Komplexitätstheorie Gliederung

Kapitel 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

Mehr

Mathematische Grundlagen der Computerlinguistik Relationen und Funktionen

Mathematische 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,

Mehr

6 F O R M A L E S P R A C H E N. 6.1 formale sprachen

6 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,

Mehr

Algorithmen und Formale Sprachen

Algorithmen 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

Mehr

Formale Sprachen. Script, Kapitel 4. Grammatiken

Formale 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

Mehr

Theoretische Informatik I

Theoretische 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

Mehr

Theoretische Grundlagen der Informatik

Theoretische 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

Mehr

Inhalt Kapitel 5: Syntax

Inhalt 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