Powerpoint-Präsentation

Werbung
Formale Sprachen
Klaus Becker
2010
2
Formale Sprachen
3
Teil 1
Sprachen und ihre Beschreibung
4
Email-Adresse
Vertippt! Sie wollen immer auf dem neuesten Stand sein und daher die entsprechende
„Newsletter“ abonnieren. Gott sei Dank „bemerkt“ das System ihren Tippfehler.
Quelle: http://www.abc.net.au/rn/newsletters/music/default.htm
5
Gültige Email-Adressen
Mit speziellen Programmen (sog. Validierern) kann man überprüfen, ob eine Email-Adresse
korrekt gebildet ist. Nur – was heißt hier korrekt?
Quelle: http://www.web-toolbox.net/webtoolbox/index.htm
6
Aufbau einer Email-Adresse
2822
Quelle:
http://www.web-toolbox.net/
webtoolbox/index.htm
Ein Blick in die RFC 2822
7
RFC 2822
Internet Message Format
April 2001
3.4.1. Addr-spec specification
An addr-spec is a specific Internet identifier that contains a locally interpreted string followed
by the at-sign character ("@", ASCII value 64) followed by an Internet domain. The locally
interpreted string is either a quoted-string or a dot-atom. If the string can be represented as a
dot-atom (that is, it contains no characters other than atext characters or "." surrounded by
atext characters), then the dot-atom form SHOULD be used and the quoted-string form
SHOULD NOT be used. Comments and folding white space SHOULD NOT be used around the
"@" in the addr-spec.
Informelle
Beschreibung
addr-spec
=
local-part "@" domain
local-part
=
dot-atom / quoted-string / obs-local-part
domain
=
dot-atom / domain-literal / obs-domain
domain-literal
=
[CFWS] "[" *([FWS] dcontent) [FWS] "]" [CFWS]
dcontent
=
dtext / quoted-pair
dtext
=
NO-WS-CTL /
; Non white space controls
...
Quelle: http://www.ietf.org/rfc/rfc2822.txt
Formale Präzisierung
8
Zielsetzung und Vorgehensweise
Ziel ist es, Verfahren der Informatik zur präzisen Beschreibung sprachlicher Strukturen zu
erarbeiten. Wir werden analog zur Darstellung in der RFC 2822 Präzisierungen für vereinfachte
Email-Adressen entwickeln und die dabei benutzten Präzisierungsverfahren genauer studieren.
9
Sprachen in der Informatik
<html>
[email protected]
<head>
X: 1
1 JMP 4
<title>Steckbrief von Bailey</title>
T: Brother John
2 INC 1
</head>
C: Traditional
3 DEC 2
<body>
L: 1/4
4 TST 2
<h1>Steckbrief</h1>
K: C
5 JMP 2
<p><img src="bailey1.jpg" alt="Foto von Bailey" /></p>
CDEC|CDEC|EFGz|\ % continues
6 HLT
<p>
w: Are you slee-ping, Are you slee-ping,
Ich heiße <em>Bailey</em>. Ich lebe in der Nähe
Bro-ther John!\ % continues
von Kaiserslautern.
def invertieren(daten):
EFGz|
</p>
d = daten.replace("\n", " ")
w: Bro-ther John!
<p>
liste1 = d.split()
G/ A/ G/ F/ EC|G/ A/ G/ F/ EC|\ % continues
Ich interessiere mich für <em>Agility-Sport</em>.
graustufen = int(liste1[3])
w: Mor-ning bells are rin-ging, Mor-ning
Meine Lieblingsdisziplinen sind:
zeilenlaenge = int(liste1[1])
bells are rin-ging,\
</p>
liste2 = liste1[:4]
FB,Ez|FB,Ez|]
<ul>
w: ding ding dong, ding ding dong! for element in liste1[4:]:
<li><em>Sprung</em> durch einen Reifen</li>
z1 = int(element)
<li><em>Lauf</em> über eine Wippe</li>
z2 = graustufen - z1
<li><em>Slalomlauf</em> zwischen Stangen</li>
liste2 = liste2 + [str(z2)]
</ul>
d
=
liste2[0]
+ "\n"
P2
<p>
d = d + liste2[1] + " " + liste2[2] + "\n"
8
Ich gehe jedes5 Wochenende
zur
d = d + liste2[3] + "\n"
15
<a href="http://www.welpenschule-kl.de/index.html">Welpenschule</a>
i = 4
15 15 8 15 15
.
while i < len(liste2):
15 8 8 8 15
</p>
if (i-3) % zeilenlaenge == 0:
8 8 8 8 8
</body>
d = d + liste2[i] + "\n"
12 12 12 12 12
</html>
else:
12 5 12 5 12
d = d + liste2[i] + " "
12 12 12 12 12
rnbqkb1r/pp1p1ppp/2p2n2/8/2P1p3/2N2NP1/PP1PPP1P/R1BQKB1R
w
i = i KQkq
+ 1 - 0 5
12 5 12 5 12
return d
12 12 12 12 12
10
Aufgabe
Aufgabe: Darstellung und Verarbeitung von Bildern
Was leistet die Sprache PGM? Was leistet die Sprache Python? Worin unterscheiden sich
Sprachen wie PGM oder Python von natürlichen Sprachen wie Deutsch oder Englisch?
def invertieren(daten):
d = daten.replace("\n", " ")
liste1 = d.split()
graustufen = int(liste1[3])
zeilenlaenge = int(liste1[1])
liste2 = liste1[:4]
for element in liste1[4:]:
z1 = int(element)
z2 = graustufen - z1
liste2 = liste2 + [str(z2)]
d = liste2[0] + "\n"
d = d + liste2[1] + " " + liste2[2] + "\n"
d = d + liste2[3] + "\n"
i = 4
while i < len(liste2):
if (i-3) % zeilenlaenge == 0:
d = d + liste2[i] + "\n"
else:
d = d + liste2[i] + " "
i = i + 1
return d
...
...
# Test
bild = """
P2
5 8
15
15 15 8 15
15 8 8 8
8 8 8 8
12 12 12 12
12 5 12 5
12 12 12 12
12 5 12 5
12 12 12 12
"""
15
15
8
12
12
12
12
12
print(invertieren(bild))
11
Aufgabe
Aufgabe: Darstellung von Musik
(a) Verstehst du die Sprache ABC? Schau dir gegebenenfalls auch den folgenden Notentext
an. (Quelle: Guido Gonzato: Musik setzen mit ABCPLUS)
(b) Wer benutzt wohl die Sprache ABC zu welchem Zweck?
X: 1
T: Brother John
C: Traditional
L: 1/4
K: C
CDEC|CDEC|EFGz|\ % continues
w: Are you slee-ping, Are you slee-ping, Brother John!\ % continues
EFGz|
w: Bro-ther John!
G/ A/ G/ F/ EC|G/ A/ G/ F/ EC|\ % continues
w: Mor-ning bells are rin-ging, Mor-ning bells
are rin-ging,\
FB,Ez|FB,Ez|]
w: ding ding dong, ding ding dong!
12
Aufgabe
Aufgabe: Römische Zahldarstellung
(a) Schau dir die Darstellung der Uhrzeiten genau an. Etwas
stimmt hier nicht - zumindest wenn man strenge Regeln anlegt.
Formuliere die Regeln, die man zur Bildung römischer Zahlen
beachten muss.
(b) Welche Hausnummer hat das Haus?
Formuliere die Regeln, die man zur Umwandlung von römischen
Zahlen in unser gängiges Zahlensystem beachten muss.
Aufgabe: Mathematikunterricht in Ipogesien:
In Ipogesien hört man im Mathematikunterricht der 1. Klasse ständig folgende Wörter:
ipigisi, isipigisisi, ipisigisisi, isisipigisisisi, isipisigisisisi, ipisisigisisisi, ...
Nachdem Ipo das Wort isipisisigisisisisisi sagt, gibt es ein Aufmurren. Warum wohl?
(a) Wie sind die Wörter der ipigisi-Sprache aufgebaut?
(b) Hast du eine Idee, was die Wörter der ipigisi-Sprache bedeuten? Tipp: Es handelt sich um
Additionsaufgaben.
Sprachen in der Informatik
13
Information muss zunächst in Form von Daten formal dargestellt werden, bevor sie
verarbeitet werden kann. Daten können dann mit Hilfe von Computerprogrammen zu neuen
Daten verarbeitet werden oder auch zu anderen Computern transportiert werden. Wenn die
hierdurch erzeugten bzw. transportierten Daten gedeutet werden, entsteht neue Information.
Sprachen spielen bei diesem Vorgehen eine zentrale Rolle.
PGM
PGM
Python
14
Sprachen in der Informatik
Sprachen zur Darstellung von Information:
Sprachen zur Verarbeitung von Daten:
HTML
Python
XML
Java
SVG
Delphi
ABC
Assembler
...
...
Information
Information
Deuten
Darstellen
Daten
Daten
Verarbeiten
15
Sprachen in der Informatik
Gemeinsamkeiten mit natürlichen Sprachen:
 Man nutzt sie, um bestimmte Sachverhalte zu beschreiben.
 Sie dienen der Kommunikation.
 Man muss bestimmte Regeln beachten, wenn man sie nutzt.
 Sprachelemente haben eine ganz bestimmte Bedeutung.
 ...
16
Sprachen in der Informatik
Unterschiede zu natürlichen Sprachen:
Computersprachen müssen eindeutig und präzise sein. Bei der Verwendung von
Computersprachen führen bereits keinste Ungenauigkeiten dazu, dass der Computer den mit
der Sprache beschiebenen Sachverhalt nicht mehr versteht. Bei natürlichen Sprachen kann
man sich meist darauf verlassen, dass bei sprachlichen Ungenauigkeiten der
Kommunikationspartner schon versteht, was man meint. Allerdings kommt es dabei auch oft
zu Missverständnissen. Solche Missverständnisse gilt es bei Computersprachen durch Präzision
und Eindeutigkeit zu vermeiden.
17
Fachkonzept - formale Sprache
Ein Alphabet ist eine nicht-leere endliche
(geordnete Menge) von Symbolen.
Alphabet der römischen Zahlen:
 = {I, V, X, L, C, D, M}
Ein Wort über einem Alphabet ist e. Hintereinanderreihung endlich vieler Symbole aus
einem vorgegebenen Alphabet.
Wörter über dem Alphabet der römischen
Zahlen:
MMX, LXX, XXL, LILLI, ...
Bei der Bildung von Wörtern über einem
Alphabet Σ lässt man auch zu, dass
überhaupt keine Symbole
hintereinandergereiht werden. Man nennt
dieses besondere Wort leeres Wort und
bezeichnet es üblicherweise mit ε oder λ.
Die Menge aller Wörter über einem Alphabet
Σ wird mit Σ* bezeichnet. Mit Σ+ bezeichnet
man die Menge aller Wörter über Σ ohne das
leere Wort.
Menge aller Wörter über dem Alphabet
 = {I, V, X, L, C, D, M}:
Eine (formale) Sprache über einem Alphabet
Σ ist eine bestimmte Teilmenge der Menge
Σ* aller möglichen Wörter über Σ.
Sprache der römischen Zahlen:
* = {λ, I, II, III, IIII, ..., IX, ..., IIXIXX, ...}
L = {I, II, III, IV, V, VI, VII, VIII, IX, X, ...}
18
Fachkonzept - Syntax / Semantik
Die Syntax einer Sprache beschreibt, welche
Wörter über dem vorgegebenen Alphabet zur
Sprache gehören.
Die Semantik einer Sprache beschreibt,
welche Bedeutung den Wörter über dem
vorgegebenen Alphabet zugeordnet wird.
Welche Kombinationen von Symbolen aus
dem Alphabet Σ = {I, V, X, L, C, D, M} eine
römische Zahl ergeben, lässt sich mit Hilfe
von Syntaxregeln beschreiben:
Die Bedeutung von Wörtern über Σ = {I, V,
X, L, C, D, M}, die eine römische Zahl
darstellen, lässt sich wie folgt beschreiben:
 Die Symbole V, L und D kommen
höchstens einmal vor.
 Die Symbole I, X, C, M kommen höchstens
dreimal hintereinander vor.
 Das Symbole I kann den Symbolen V und
X genau einmal vorangestellt werden.
Entsprechend kann das Symbol X den
Symbolen L und C sowie das Symbol C den
Symbolen D und M vorangestellt werden.
 ...
 I steht für 1, V für 5, X für 10, L für 50, C
für 100, D für 500, M für 1000.
 Der Wert einer Folge von Symbolen aus A
= {I, V, X, L, C, D, M} lässt sich in der Regel
durch Addition der Werte der einzelnen
Symbole bestimmen.
 Ausnahme: Ist eines der Symbole I, X und
C einem höherwertigen Symbol vorangestellt,
so wird der Wert dieser Symbolkombination
(aus vorangestelltem Symbol und höherwertigem Symbol) bestimmt, indem man den
Wert des vorangestellten Symbols vom Wert
des höherwertigen Symbols subtrahiert.
 ...
19
Trennung zwischen Syntax u. Semantik
Das folgende Beispiel soll klarmachen, dass Syntax und Semantik unabhängige Merkmale
einer Sprache sind.
Alphabet: Σ = {i, p, g, s}.
"isi-Folgen": i, isi, isisi, ....
Folge von i-Symbolen, bei der jeweils benachbarte i-Symbole durch ein s getrennt sind.
"ipigisi-Folgen": ipigi, ipigisi, isipigisi, isipigisi, ...
Struktur: isi-Folge p isi-Folge g isi-Folge.
Sprache der beliebigen ipigisi-Ausdrücke:
L1 = {ipigi, isipigi, ipisigi, ipigisi, isipisigi, ...}
alle Wörter über dem Alphabet Σ = {i, p, g, s}, die eine ipigisi-Folge bilden.
Sprache der mathematisch korrekten ipigisi-Ausdrücke:
L2 = {ipigisi, isipigisisi, ipisigisisi, isisipigisisisi, isipisigisisisi, ipisisigisisisi, ...}
alle Wörter über dem Alphabet Σ = {i, p, g, s}, die eine ipigisi-Folge bilden und bei denen die
Summe der i-Symbole vor und nach dem g-Symbol gleich sind.
20
Trennung zwischen Syntax u. Semantik
Symbole und Symbolkombinationen werden oft so gewählt, dass sie eine bestimmte
Bedeutung suggerieren. Das Beispiel zeigt aber, dass die Bedeutung den syntaktischen
Einheiten nicht innewohnt, sondern unabhängig hiervon festgelegt werden muss.
Einheit
Bedeutung
Einheit
Bedeutung
ipigisi
1+1=2
ipigisi
1 ist gleich 1 subtrahiert von 2
isipigisisi
2+1=3
isipigisisi
2 ist gleich 1 subtrahiert von 3
ipisigisisi
1+2=3
ipisigisisi
1 ist gleich 2 subtrahiert von 3
isisipigisisisi
3+1=4
isisipigisisisi
3 ist gleich 1 subtrahiert von 4
isipisigisisisi
2+2=4
isipisigisisisi
2 ist gleich 2 subtrhiert von 4
ipisisigisisisi
1+3=4
ipisisigisisisi
1 ist gleich 3 subtrahiert von 4
...
...
gleiche Syntax, unterschiedliche Semantik
21
Übungen
Aufgabe : Die Sprache FEN
Die Sprache FEN (Forsyth-Edwards-Notation) wird benutzt, um
Schach-Spielzustände zu beschreiben. Viele Schachprogramme
nutzen diese Sprache, wenn Spielzustände abgespeichert werden.
So wird etwa der Schach-Spielzustand in der folgenden Abbildung
wie folgt in der Sprache FEN beschrieben:
rnbqkb1r/pp1p1ppp/2p2n2/8/2P1p3/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5
Wir betrachten der Einfachheit halber nur den ersten Teil eines solchen "FEN-Wortes", der die
aktuelle Spielbrettbelegung beschreibt:
rnbqkb1r/pp1p1ppp/2p2n2/8/2P1p3/2N2NP1/PP1PPP1P/R1BQKB1R
(a) Welches Alphabet Σ liegt der Sprache L der reduzierten FEN-Wörter zur Beschreibung von
Spielbrettbelegung zu Grunde?
(b) Gib Beispiele für Wörter über Σ an, die zu L bzw. nicht zu L gehören.
(c) Beschreibe in Worten die Syntaxregeln, die reduzierten FEN-Wörtern zu Grunde liegen.
(d) Schreibe eine Anleitung zur Deutung der Wörter aus L.
22
Übungen
Aufgabe: Die Sprache "hallihallo"
Zur Sprache "hallihallo" gehören die folgenden Wörter:
hallo, hallihallo, hallihallihallo, hallihallihallihallo, ...
(a) Welche Alphabete könnte man hier als Grundlage der Sprache wählen?
(b) Beschreibe die Regeln, nach denen die Wörter der "hallihallo"-Sprache gebildet werden.
(c) Überlege dir auch eine (ausgefallende) Bedeutung der Wörter.
23
Teil 2
Syntaxdiagramme
24
Aufbau einer Email-Adresse
2822
Quelle:
http://www.web-toolbox.net/
webtoolbox/index.htm
25
Beispiel: Vereinfachte E-Mail-Adressen
Zur Reduktion der Komplexität werden wir nur sehr einfache E-Mail-Adressen mit einem stark
reduzierten Zeichensatz erfassen. Zudem benutzen wir eine grafische Darstellung der
Grammatik in Form von Syntaxdiagrammen.
26
Aufgabe
(a) Die Adresse [email protected] ist gültig bzgl. der gegebenen Syntaxdiagramme. Wie kann man
das begründen?
(b) Gib weitere Adressen an, die gültig bzgl. der gegebenen Syntaxdiagramme sind. Gib
Beispiele für ungültige Adressen an.
(c) Erweitere die Diagramme so, dass sie auch weitere Fälle gültiger E-Mail-Adressen erfasst
werden.
27
Beispiel: Rechenausdrücke
Terme kommen in Programmiersprachen zur Beschreibung von Berechnungen vor. So enthält
die Python-Anweisung x = x + y den Term x + y zur Berechnung des Wertes, der der Variablen
x zugewiesen werden soll. Die folgenden Syntaxdiagramme beschreiben eine Teilmenge der
korrekt gebildeten (Python-) Rechenausdrücke.
28
Aufgabe
Mit Hilfe von Syntaxdiagrammen lassen sich
Rechenausdrücke wie folgt erzeugen: Man
konstruiert einen Weg durch die Diagramme
beginnend im Diagramm ausdruck so, dass
die Folge der Symbole in den abgerundeten
Kästchen entlang des Wegs einen Term
bilden. Versuche, analog (s.u.)
Wegbeschreibungen für folgende
Rechenausdrücke zu konstruieren:
x-y-2, x-(y-2), (x+y)*(x-y).
ausdruck ->
summand + summand ->
faktor + summand ->
variable + summand ->
x + summand ->
x + faktor * faktor ->
x + zahl * faktor ->
x + ziffer ziffer * faktor ->
x + 2 ziffer * faktor ->
x + 2 0 * faktor ->
x + 2 0 * variable ->
x+20*y
29
Fachkonzept - Syntaxdiagramm
Syntaxdiagramme dienen dazu, die Syntax
einer Sprache präzise zu beschreiben.
Syntaxdiagramme bestehen aus
Terminalsymbolen, Nichtterminalsymbolen
und Verbindungspfeilen.
Terminalsymbole sind Symbole des Alphabets
der Sprache, die in Diagrammen durch
abgerundete Rahmen zu erkennen sind.
Terminalsymbole im Beispiel:
0, 1, ..., 9, x, y, z, +, -, *, /, (, )
Nichtterminalsymbol
Nichtterminalsymbole sind Hilfssymbole, die
in Diagrammen durch rechteckige Rahmen
zu erkennen sind. Nichtterminalsymbole
stehen jeweils für eigene Diagramme.
Nichtterminalsymbole im Beispiel:
ausdruck, summand, faktor, variable, zahl,
ziffer
Terminalsymbol
30
Fachkonzept - Syntaxdiagramm
Mit Hilfe von Syntaxdiagrammen lassen sich
Wörter über dem Alphabet der
Terminalsymbole herleiten. Eine Herleitung
besteht dabei aus einer Folge von
Umformungen eines Ausdrucks entlang der
Wege durch die Syntaxdiagramme mit dem
Ziel, die Nichtterminalsymbole letztlich alle
durch Terminalsymbole zu ersetzen.
ausdruck ->
summand ->
faktor * faktor ->
( ausdruck ) * faktor ->
( summand + summand ) * faktor ->
( faktor + summand ) * faktor ->
( variable + summand ) * faktor ->
( x + summand ) * faktor ->
( x + faktor ) * faktor ->
( x + variable ) * faktor ->
( x + y ) * faktor ->
( x + y ) * ( ausdruck ) ->
( x + y ) * ( summand - summand ) ->
( x + y ) * ( faktor - summand ) ->
( x + y ) * ( variable - summand ) ->
( x + y ) * ( x - summand ) ->
( x + y ) * ( x - faktor ) ->
( x + y ) * ( x - variable ) ->
(x+y)*(x-y)
31
Fachkonzept - Syntaxdiagramm
Konstruktionsmuster:
Sequenz
Alternative
Iteration
Rekursion
32
Übungen
Aufgabe: ipigisi-Sprache
(a) Eine isi-Folge ist eine Folge von i-Symbolen, bei der jeweils benachbarte i-Symbole durch
ein s getrennt sind: i, isi, isisi, .... Entwickle ein Syntaxdiagramm zur Beschreibung von isiFolgen.
(b) Eine ipigisi-Folge hat die Struktur isi-Folge p isi-Folge g isi-Folge. Beispiele für solche
ipigisi-Folgen sind: ipigi, ipigisi, isipigisi, isipigisi, .... Entwickle Syntaxdiagramme zur
Beschreibung von ipigisi-Folgen.
(c) Ein mathematisch korrekter ipigisi-Ausdruck ist eine ipigisi-Folge, bei der die Summe der iSymbole vor und nach dem g-Symbol gleich sind. Kann man korrekte ipigisi-Ausdrücke mit
Hilfe von Syntaxdiagrammen beschreiben?
Aufgabe: Die Sprache "hallihallo"
Zur Sprache "hallihallo" gehören die folgenden Wörter:
hallo, hallihallo, hallihallihallo, hallihallihallihallo, ...
Beschreibe die Wörter der "hallihallo"-Sprache mit Hilfe von Syntaxregeln.
33
Teil 3
Grammatiken
34
Stark vereinfachte E-Mail-Adressen
Die folgenden Syntaxdiagramme legen den
Aufbau von stark vereinfachten E-MailAdressen fest. Beachte, dass in diesen
Adressen nur die Symbole b, @ und .
vorkommen dürfen. Eine nach diesen
Syntaxdiagrammen gültige E-Mail-Adresse ist
z.B. [email protected].
emailadresse ->
user @ domain ->
name @ domain ->
buchstabe buchstabe @ domain ->
b buchstabe @ domain ->
b b @ domain ->
b b @ subdomains topleveldomain ->
b b @ name . name . topleveldomain ->
b b @ buchstabe . name . topleveldomain ->
b b @ b . name . topleveldomain ->
b b @ b . buchstabe buchstabe buchstabe . topleveldomain ->
b b @ b . b buchstabe buchstabe . topleveldomain ->
b b @ b . b b buchstabe . topleveldomain ->
b b @ b . b b b . topleveldomain ->
[email protected]
35
Syntaxdiagramme und Ersetzungsregeln
emailadresse -> user @ domain
user -> name
domain -> subdomains @ topleveldomain
subdomains -> name .
subdomains -> name . subdomains
topleveldomain -> b b
name -> b
name -> b name
buchstabe -> b
Ersetzungsregeln
Syntaxdiagramme
36
Ersetzungsregeln
emailadresse -> user @ domain
user -> name
domain -> subdomains @ topleveldomain
subdomains -> name .
subdomains -> name . subdomains
topleveldomain -> b b
name -> buchstabe
name -> buchstabe name
Ersetzungsregeln
buchstabe -> b
E -> U@D
U -> N
D -> ST
S -> N.
S -> N.S
T -> bb
N -> B
N -> BN
B -> b
Ersetzungsregeln in
abgekürzter Form
Aufgabe
37
Entwickle mit Hilfe der Ersetzungsregeln (in abkürzender Schreibweise) eine Ableitung der
Adresse [email protected]. In jedem Ersetzungsschritt darf nur eine Regel angewandt werden.
E -> U@D
U -> N
D -> ST
S -> N.
S -> N.S
T -> bb
N -> B
N -> BN
B -> b
E ->
# mit der Regel E -> U@D
U@D ->
# mit der Regel U -> bU
bU@D ->
# mit der Regel U -> bU
Ersetzungsregeln
[email protected]
Ableitung eines
Wortes
Aufgabe
38
Teste die folgenden Ersetzungsregeln. Welche E-Mail-Adressen lassen sich mit diesen Regeln
ausgehend vom Symbol E ableiten?
E -> bU
U -> bU
U -> @S
S -> bB
B -> bB
B -> .S
B -> .T
T -> bZ
Z -> b
E ->
# mit der Regel E -> bU
bU ->
# mit der Regel U -> bU
bbU ->
# mit der Regel U -> bU
Ersetzungsregeln
[email protected]
Ableitung eines
Wortes
39
Fachkonzept - Grammatik
Eine Grammatik besteht aus den folgenden
Komponenten:
 einer endlichen nichtleeren Menge T von
Terminalsymbolen (Alphabet der
betreffenden Sprache)
 einer endlichen nichtleeren Menge N von
Nichtterminalsymbolen (Hilfsymbole)
E -> U@D
U -> bU
U -> λ
D -> bS
S -> bS
S -> .bS
.bS -> .bb
 einer endlichen Menge P von Produktionen
(Ersetzungsregeln)
Grammatik
 einem Startsymbol S  N (zum Starten
einer Ableitung)
Man schreibt auch kurz: G = (T, N, P, S).
T = {b, @, .}
N = {E, U, D, S}
P = {E -> U@D, ..., .bS -> .bb}
S: E
Terminalsymbole
Nichtterminalsymbole
Produktionen
Startsymbol
Fachkonzept - Ableitung
40
Eine Ableitung beginnt immer mit dem
Startsymbol. Sie endet, wenn alle
Nichtterminalsymbole ersetzt sind. Ein
Ableitungsschritt besteht darin, ein Teilwort
innerhalb eines Worts mit Hilfe einer
passenden Produktion zu ersetzen.
Produktionen sind demnach
Ersetzungsregeln.
E ->
U@D ->
bU@D ->
bbU@D ->
bb@D ->
bb@bS ->
[email protected] ->
[email protected] ->
[email protected] ->
[email protected] ->
[email protected]
#
#
#
#
#
#
#
#
#
#
mit
mit
mit
mit
mit
mit
mit
mit
mit
mit
der
der
der
der
der
der
der
der
der
der
Regel
Regel
Regel
Regel
Regel
Regel
Regel
Regel
Regel
Regel
E -> U@D
U -> bU
U -> bU
U -> λ
D -> bS
S -> .bS
S -> bS
S -> bS
S -> .bS
.bS -> bb
E -> U@D
U -> bU
U -> λ
D -> bS
S -> bS
S -> .bS
.bS -> .bb
Grammatik
Ableitung
41
Fachkonzept - Sprache zur Grammatik
Eine Grammatik G = (T, N, P, S) erzeugt eine
Sprache L(G) über dem Alphabet T. L(G) ist
dabei die Menge der Wörter über T, die vom
Startsymbol S mit Hilfe der Produktionen aus
P abgeleitet werden können. Man nennt L(G)
die von G erzeugte Sprache.
E -> U@D
U -> bU
U -> λ
D -> bS
S -> bS
S -> .bS
.bS -> .bb
L(G1) = {..., [email protected], ...}
E -> bU
U -> bU
U -> @S
S -> bB
B -> bB
B -> .S
B -> .T
T -> bZ
Z -> b
Menge der stark vereinfachten E-Mail-Adressen
L(G2) = {..., [email protected], ...}
Menge der stark vereinfachten E-Mail-Adressen
Beachte, dass verschiedene Grammatiken
dieselbe Sprache erzeugen können.
Grammatik G1
Grammatik G2
42
Grammatiken für natürliche Sprachen
Die Beschreibung, Erkennung und
Übersetzung natürlicher Sprachen ist sehr
schwierig. Der Beschreibungsansatz über
Grammatiken (im Sinne der Informatik) hat
bisher nicht zum Erfolg geführt. Heute
benutzt man eher statistische Methoden, um
natürliche Sprachen zu erfassen und
automatisiert zu verarbeiten.
<S> ->
<NP><VP> ->
<A><N><VP> ->
die <N><VP> ->
die Katze <VP> ->
...
die Katze fängt die Maus
<S> -> <NP><VP>
<NP> -> <N>
<NP> -> <A><N>
<NP> -> <N><PP>
<VP> -> <V>
<VP> -> <V><NP>
<VP> -> <VP><PP>
<PP> -> <P><NP>
<N> -> Katze
<N> -> Maus
...
<V> -> fängt
...
<A> -> der
<A> -> die
<A> -> das
<A> -> ein
<A> -> eine
...
<P> -> mit
<P> -> in
...
Grammatik
43
Experimente mit JFlap
Eingabe
der
Grammatik
Ableitung eines Wortes
44
Übungen
Aufgabe
Teste mit JFlap die folgenden Grammatiken. Mach dir mit Hilfe von Tests auch die
Besonderheiten der Regelsysteme klar. Findest du weitere Ersetzungsregeln, die dieselben EMail-Adressen erzeugen wie die Ersetzungsregeln oben? Teste deine Vorschläge mit JFlap.
E -> U@D
U -> N
D -> ST
S -> N.
S -> N.S
T -> bb
N -> B
N -> BN
B -> b
E -> bU
U -> bU
U -> @S
S -> bB
B -> bB
B -> .S
B -> .T
T -> bZ
Z -> b
E -> U@D
U -> bU
U -> λ
D -> bS
S -> bS
S -> .bS
.bS -> .bb
45
Übungen
Aufgabe
(a) Welche der folgenden Wörter können mit den Produktionen abgeleitet
werden?
ipigisi, isipisigisi, isipisigisisisi
(b) Welche Sprache wird durch die angegebene Grammatik festgelegt?
(c) Entwickle auch Syntaxdiagramme, die den Produktionen entsprechen.
S -> iAi
A -> siAis
A -> piBis
B -> siBis
B -> g
46
Übungen
Aufgabe
Der Aufbau von Rechenausdrücken kann mit
Hilfe von Syntaxdiagrammen beschrieben.
(a) Entwickle eine Grammatik, die den
Syntaxdiagrammen entspricht.
(b) Teste die Grammatik mit JFlap.
47
Teil 4
Backus-Naur-Form
48
Gleitkommazahlen in Python
Grammatiken werden in der Praxis meist in der
Backus-Naur-Form dargestellt. Hierbei werden
Produktionen in einer Kurzschreibweise
dargestellt.
Aufgabe:
Das Werkzeug EBNF-Visualizer benutzt die
unten gezeigte Schreibweise, um die zu den
Syntaxdiagrammen gehörenden Produktionen
darzustellen.
Versuche, mit Hilfe der Syntaxdiagramme die
Bedeutung der Symbole in den zugehörigen
Regeln zu erschließen. Was bedeutet z.B. der
senkrechte Strich |? Welche Bedeutung haben
eckige, geschweifte und runde Klammern?
digit = ("0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9").
intpart = digit {digit}.
fraction = "." digit {digit}.
exponent = (e | E) ["+" | "-"] digit {digit}.
floatnumber = (pointfloat | exponentfloat).
pointfloat = ([intpart] fraction) | (intpart ".").
exponentfloat = (intpart | pointfloat) exponent.
49
Kurzschreibweise für Produktionen
Die (erweiterte) Backus-Naur-Form (kurz BNF bzw. EBNF) ist eine Kurzschreibweise für
Produktionen.
Es gibt eine Reihe verschiedener Schreibweisen für Regeln in (E)BNF. Die am häufigsten
benutzten Schreibweisen werden im Folgenden anhand einfacher Beispiele vorgestellt.
vorzeichen -> +
vorzeichen -> -
vorzeichen -> + | Alternative
zahl -> ziffer
zahl -> ziffer zahl
zahl = ziffer {ziffer}
zahl = ziffer ziffer*
zahl = ziffer+
Iteration
zahlmitvorzeichen -> zahl
zahlmitvorzeichen -> + zahl
zahlmitvorzeichen -> - zahl
zahlmitvorzeichen = [vorzeichen] zahl
optionale Teile
50
Übungen
Aufgabe:
Erzeuge die Syntaxdiagramme für
Rechenausdrücke mit dem Werkzeug EBNFVisualizer.
51
Übungen
Aufgabe:
Erzeuge die Syntaxdiagramme für stark
vereinfachte E-Mail-Adressen mit dem
Werkzeug EBNF-Visualizer.
52
Übungen
Aufgabe:
Entwickle eine Grammatik in Backus-Naur-Form für Postanschriften. Beachte die folgenden
Aspekte:
 Eine Postanschrift besteht aus einem Personenteil, gefolgt von einer Straße, gefolgt von der
Stadt.
 Der Personenteil besteht aus einem Titelteil und einem Namensteil, gefolgt von einem
Zeilenende.
 Der Titelteil besteht aus einem Titel oder ist leer.
 Der Vornamenteil besteht aus einem Vornamen oder einem Initial, auf den ein Punkt folgt.
 Der Namensteil besteht aus einem Vornamensteil, einem Nachnamen oder aus einem
Vornamensteil und wiederum aus einem Namensteil.
 Eine Straße besteht aus einem Straßenname, gefolgt von einer Hausnummer, gefolgt von
einem Zeilenende.
 Eine Stadt besteht aus einer Postleitzahl, gefolgt von einem Stadtname, gefolgt von einem
Zeilenende.
Eine Lösung findest du in der freien Enzyklopädie Wikipedia unter dem Stichwort Backus-NaurForm.
53
Teil 5
Reguläre Ausdrücke
54
Mustersuche in OpenOffice
Es kommt des öfteren vor, dass man bestimmte
Zeichenketten in einem langen Text suchen
möchte. Textverarbeitungsprogramme stellen in
der Regel spezielle Suchfunktionen für diesen
Zweck bereit.
Das Textverarbeitungsprogramm OpenOffice
erlaubt nicht nur einfache Suchmuster wie z.B.
"RFC", sondern auch komplexere Suchmuster
wie z.B. "RFC...", wobei die Punkte hier für
Ziffern von 0 bis 9 stehen sollen. Ein mögliches
Suchergebnis wäre z.B. "RFC0822". Die
Beschreibung der Suchmuster erfolgt mit Hilfe
regulärer Ausdrücke. Die Abbildung zeigt, wie
man ein Suchmuster in OpenOffice mit einem
regulären Ausdruck festlegt.
55
Aufgabe
Besorge dir die RFC 5322 und teste die oben gezeigten Suchoperationen. Benutze die
folgenden regulären Ausdrücke als Suchmuster und lasse sie von OpenOpffice beim Text RFC
5322 auswerten. Beschreibe jeweils, wonach gesucht wird.
0
 0+
 00+
 00*
 [0-9]
 [1-9](\.)
 ([1-9](\.))+
 ([1-9ABC](\.))+
 [1-9](\.)?[1-9]
 (From:)|(To:)
Denke dir selbst weitere Suchmuster aus, um die Bedeutung der Metazeichen zu erschließen.
Du kannst auch die Hilfe von OpenOffice zu Rate ziehen.
56
Aufgabe
Entwickle einen regulären Ausdruck, mit dem man alle in der RFC 5322 vorkommenden E-MailAdressen als Suchergebnis geliefert bekommt.
57
Fachkonzept - regulärer Ausdruck
Reguläre Ausdrücke über dem Alphabet Σ und die Wortmengen, die sie beschreiben, werden
wie folgt festgelegt:
Ø ist ein regulärer Ausdruck.
Er beschreibt die leere Wortmenge {}.
λ ist ein regulärer Ausdruck.
Er beschreibt die Wortmenge {λ}, in der nur
das leere Wort vorkommt.
Für jedes a  Σ ist a ein regulärer Ausdruck.
Der reguläre Ausdruck a beschreibt die
Wortmenge {a}.
58
Fachkonzept - regulärer Ausdruck
Reguläre Ausdrücke über dem Alphabet Σ und die Wortmengen, die sie beschreiben, werden
wie folgt festgelegt:
Wenn α und β reguläre Ausdrücke sind, dann
ist auch die Konkatenation αβ ein regulärer
Ausdruck.
Wenn α die Wortmenge A und β die
Wortmenge B beschreibt, dann beschreibt
die Konkatenation αβ die Menge {ab | a  A
und b  B} aller Wörter, die mit einem Wort
aus A beginnen und mit einem Wort aus B
enden.
Wenn α und β reguläre Ausdrücke sind, dann
ist auch die Alternative α+β ein regulärer
Ausdruck.
Wenn α die Wortmenge A und β die
Wortmenge B beschreibt, dann beschreibt
die Alternative α+β die Menge {w | w  A
oder w  B} aller Wörter, die in A oder in B
vorkommen.
Wenn α ein regulärer Ausdruck ist, dann ist
auch die Iteration α* ein regulärer Ausdruck.
Wenn α die Wortmenge A beschreibt, dann
beschreibt die Iteration α* die Menge A*
aller Wörter, die durch endlich-maliges
Aneinanderfügen von Wörtern aus A
entstehen.
59
Fachkonzept - regulärer Ausdruck
Beispiele
regulärer Ausdruck
beschriebene Wortmenge
Ø
{}
λ
{λ}
0
{0}
1
{1}
10
{10}
0+1
{0, 1}
1*
{λ, 1, 11, 111, 1111, ...}
01*
{0, 01, 011, 0111, 01111, ...}
0*1*
{λ, 0, 00, ..., 1, 01, 001, ..., 11, 011, 0011, ... }
0*+1*
{λ 0, 00, 000, ..., 1, 11, 111, ...}
0+1(0+1)*
{0, 1, 10, 11, 100, 101, 110, 111, ...}
60
Übungen
Aufgabe:
Erkläre jeweils, welche Wortmengen hier beschrieben werden:
(halli)*hallo
Too*r
(5+6+7+8+9+10)(a+b+c+d)
((0+1)(0+1+2+3+4+5+6+7+8+9)+2(0+1+2+3)):(0+1+2+3+4+5)(0+1+2+3+4+5+6+7+8
+9)
Aufgabe:
Beschreibe die Menge der vereinfachten E-Mail-Adressen mit einem regulären Ausdruck.
61
Reguläre Ausdrücke in Python
import re
def suchen(regAusdruck, textdatei):
f = open(textdatei, 'r')
rfctext = f.read()
for match in re.finditer(regAusdruck, rfctext):
print(repr(match.group()))
# Test
suchen("([1-9ABC]\.)+", "rfc5322.txt")
>>>
'1.'
'1.1.'
'1.2.'
'1.2.1.'
'1.2.2.'
'1.2.3.'
...
>>>
62
Reguläre Ausdrücke in Python
import re
def suchen(regAusdruck, textdatei):
f = open(textdatei, 'r')
rfctext = f.read()
return re.findall(regAusdruck, rfctext)
# Test
print(suchen("(?:[1-9ABC]\.)+", "rfc5322.txt"))
>>>
>>>
['1.', '1.1.', '1.2.', '1.2.1.', '1.2.2.', '1.2.3.', '2.', '2.1.', '2.1.1.',...]
>>>
63
Übungen
Aufgaben:
Besorge dir die RFC 5322 und teste die oben gezeigten Suchoperationen. Benutze die
folgenden regulären Ausdrücke als Suchmuster und lasse sie von Python beim Text RFC 5322
auswerten. Beschreibe jeweils, wonach gesucht wird.
0
 0+
 00+
 00*
 [0-9]
 [1-9](\.)
 ([1-9](\.))+
 ([1-9ABC](\.))+
 [1-9](\.)?[1-9]
 (From:)|(To:)
Denke dir selbst weitere Suchmuster aus, um die Bedeutung der Metazeichen zu erschließen.
Du kannst auch die Hilfe von OpenOffice zu Rate ziehen.
64
Literaturhinweise
F. Gasper, I. Leiß, M. Spengler, H. Stimm: Technische und theoretische Informatik. Bsv 1992.
E. Modrow: Automaten, Schaltwerke, Sprachen. Dümmlers Verlag 1988.
R. Baumann: Informatik für die Sekundarstufe II, Band 2. Klett-Verlag 1993.
Informatik heute, Band 2. Schroedel-Verlag 1988.
U. Schöning: Theoretische Informatik – kurzgefasst. Spektrum Akademischer Verlag 2001.
J. E. Hopcroft / J. D. Ullman: Einführung in die Automatentheorie, Formale Sprachen und
Komplexitätstheorie. Addison-Wesley 1988.
S. H. Rodger, T. W. Finley: JFLAP. Jones and Bartlett Publishers 2006.
...
Die Darstellung hier orientiert sich an den Materialien auf den Webseiten:
http://www.inf-schule.de
Herunterladen