formale sprachen klaus becker 2010. 2 formale sprachen

64
Formale Sprachen Klaus Becker 2010

Upload: carl-wendel

Post on 05-Apr-2015

143 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

Formale Sprachen

Klaus Becker

2010

Page 2: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

2 Formale Sprachen

Page 3: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

3 Teil 1

Sprachen und ihre Beschreibung

Page 4: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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

Page 5: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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

Page 6: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

6 Aufbau einer Email-Adresse

Quelle: http://www.web-toolbox.net/webtoolbox/index.htm

2822

Page 7: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

7 Ein Blick in die RFC 2822

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.

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

Informelle Beschreibun

g

Page 8: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 9: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

9

<html> <head> <title>Steckbrief von Bailey</title> </head> <body> <h1>Steckbrief</h1> <p><img src="bailey1.jpg" alt="Foto von Bailey" /></p> <p> Ich heiße <em>Bailey</em>. Ich lebe in der Nähe von Kaiserslautern. </p> <p> Ich interessiere mich für <em>Agility-Sport</em>. Meine Lieblingsdisziplinen sind: </p> <ul> <li><em>Sprung</em> durch einen Reifen</li> <li><em>Lauf</em> über eine Wippe</li> <li><em>Slalomlauf</em> zwischen Stangen</li> </ul> <p> Ich gehe jedes Wochenende zur <a href="http://www.welpenschule-kl.de/index.html">Welpenschule</a> . </p> </body></html>

Sprachen in der Informatik

1 JMP 42 INC 13 DEC 24 TST 25 JMP 26 HLT

X: 1T: Brother JohnC: TraditionalL: 1/4K: CCDEC|CDEC|EFGz|\ % continuesw: Are you slee-ping, Are you slee-ping, Bro-ther John!\ % continuesEFGz|w: Bro-ther John!G/ A/ G/ F/ EC|G/ A/ G/ F/ EC|\ % continuesw: Mor-ning bells are rin-ging, Mor-ning bells are rin-ging,\FB,Ez|FB,Ez|]w: ding ding dong, ding ding dong!

rnbqkb1r/pp1p1ppp/2p2n2/8/2P1p3/2N2NP1/PP1PPP1P/R1BQKB1R w KQkq - 0 5

P2 5 8 15 15 15 8 15 15 15 8 8 8 15 8 8 8 8 8 12 12 12 12 12 12 5 12 5 12 12 12 12 12 12 12 5 12 5 12 12 12 12 12 12

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

[email protected]

Page 10: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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 = """P25 81515 15 8 15 1515 8 8 8 15 8 8 8 8 812 12 12 12 1212 5 12 5 1212 12 12 12 1212 5 12 5 1212 12 12 12 12"""

print(invertieren(bild))

Page 11: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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: 1T: Brother JohnC: TraditionalL: 1/4K: CCDEC|CDEC|EFGz|\ % continuesw: Are you slee-ping, Are you slee-ping, Bro-ther John!\ % continuesEFGz|w: Bro-ther John!G/ A/ G/ F/ EC|G/ A/ G/ F/ EC|\ % continuesw: Mor-ning bells are rin-ging, Mor-ning bells are rin-ging,\FB,Ez|FB,Ez|]w: ding ding dong, ding ding dong!

Page 12: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 13: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

13 Sprachen in der Informatik

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

Python

PGM

Page 14: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

14 Sprachen in der Informatik

Sprachen zur Darstellung von Information:

HTML

XML

SVG

ABC

...

Sprachen zur Verarbeitung von Daten:

Python

Java

Delphi

Assembler

...

Darstellen Deuten

Verarbeiten

Information

Daten

Information

Daten

Page 15: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

...

Page 16: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 17: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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. Hinter-einanderreihung 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.

Eine (formale) Sprache über einem Alphabet Σ ist eine bestimmte Teilmenge der Menge Σ* aller möglichen Wörter über Σ.

Sprache der römischen Zahlen:

L = {I, II, III, IV, V, VI, VII, VIII, IX, X, ...}

Menge aller Wörter über dem Alphabet = {I, V, X, L, C, D, M}:

* = {λ, I, II, III, IIII, ..., IX, ..., IIXIXX, ...}

Page 18: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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

...

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:

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öher-wertigem Symbol) bestimmt, indem man den Wert des vorangestellten Symbols vom Wert des höherwertigen Symbols subtrahiert.

...

Page 19: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

19

Trennung zwischen Syntax u. Semantik

Alphabet: Σ = {i, p, g, s}.

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.

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

Das folgende Beispiel soll klarmachen, dass Syntax und Semantik unabhängige Merkmale einer Sprache sind.

Page 20: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

20

Trennung zwischen Syntax u. Semantik

Einheit Bedeutung

ipigisi 1+1=2

isipigisisi 2+1=3

ipisigisisi 1+2=3

isisipigisisisi 3+1=4

isipisigisisisi 2+2=4

ipisisigisisisi 1+3=4

...

Einheit Bedeutung

ipigisi 1 ist gleich 1 subtrahiert von 2

isipigisisi 2 ist gleich 1 subtrahiert von 3

ipisigisisi 1 ist gleich 2 subtrahiert von 3

isisipigisisisi 3 ist gleich 1 subtrahiert von 4

isipisigisisisi 2 ist gleich 2 subtrhiert von 4

ipisisigisisisi 1 ist gleich 3 subtrahiert von 4

...

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.

gleiche Syntax, unterschiedliche Semantik

Page 21: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 22: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 23: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

23 Teil 2

Syntaxdiagramme

Page 24: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

24 Aufbau einer Email-Adresse

Quelle: http://www.web-toolbox.net/webtoolbox/index.htm

2822

Page 25: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 26: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 27: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 28: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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 + 2 0 * y

Page 29: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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, +, -, *, /, (, )

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

Nichtterminalsymbol

Terminalsymbol

Page 30: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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 )

Page 31: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

31

Konstruktionsmuster:

Sequenz

Alternative

Iteration

Rekursion

Fachkonzept - Syntaxdiagramm

Page 32: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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 isi-Folgen.

(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 i-Symbole 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.

Page 33: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

33 Teil 3

Grammatiken

Page 34: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

34 Stark vereinfachte E-Mail-Adressen

Die folgenden Syntaxdiagramme legen den Aufbau von stark vereinfachten E-Mail-Adressen 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 ->b b @ b . b b b . b b

Page 35: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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

Page 36: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

36 Ersetzungsregeln

emailadresse -> user @ domainuser -> namedomain -> subdomains @ topleveldomainsubdomains -> name .subdomains -> name . subdomainstopleveldomain -> b bname -> buchstabename -> buchstabe namebuchstabe -> b

E -> U@DU -> ND -> STS -> N.S -> N.ST -> bbN -> BN -> BNB -> bErsetzungsregel

n

Ersetzungsregeln in abgekürzter

Form

Page 37: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

37 Aufgabe

E -> # mit der Regel E -> U@D

U@D -> # mit der Regel U -> bU

bU@D -> # mit der Regel U -> bU

[email protected]

E -> U@DU -> ND -> STS -> N.S -> N.ST -> bbN -> BN -> BNB -> b

Ersetzungsregeln

Ableitung eines Wortes

Entwickle mit Hilfe der Ersetzungsregeln (in abkürzender Schreibweise) eine Ableitung der Adresse [email protected]. In jedem Ersetzungsschritt darf nur eine Regel angewandt werden.

Page 38: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

38 Aufgabe

E -> # mit der Regel E -> bU

bU -> # mit der Regel U -> bU

bbU -> # mit der Regel U -> bU

[email protected]

E -> bUU -> bUU -> @SS -> bBB -> bBB -> .SB -> .TT -> bZZ -> b

Ersetzungsregeln

Ableitung eines Wortes

Teste die folgenden Ersetzungsregeln. Welche E-Mail-Adressen lassen sich mit diesen Regeln ausgehend vom Symbol E ableiten?

Page 39: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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)

einer endlichen Menge P von Produktionen (Ersetzungsregeln)

einem Startsymbol S N (zum Starten einer Ableitung)

Man schreibt auch kurz: G = (T, N, P, S).

E -> U@DU -> bUU -> λ D -> bSS -> bSS -> .bS.bS -> .bb

T = {b, @, .} Terminalsymbole

N = {E, U, D, S}

P = {E -> U@D, ..., .bS -> .bb}

S: E

Nichtterminalsymbole

Produktionen

Startsymbol

Grammatik

Page 40: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

40 Fachkonzept - Ableitung

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@DU -> bUU -> λ D -> bSS -> bSS -> .bS.bS -> .bb

E -> # mit der Regel E -> U@DU@D -> # mit der Regel U -> bUbU@D -> # mit der Regel U -> bUbbU@D -> # mit der Regel U -> λbb@D -> # mit der Regel D -> bSbb@bS -> # mit der Regel S -> [email protected] -> # mit der Regel S -> [email protected] -> # mit der Regel S -> [email protected] -> # mit der Regel S -> [email protected] -> # mit der Regel .bS -> [email protected]

Ableitung

Grammatik

Page 41: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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@DU -> bUU -> λ D -> bSS -> bSS -> .bS.bS -> .bb

L(G1) = {..., [email protected], ...}

Grammatik G1

Menge der stark vereinfachten E-Mail-Adressen

E -> bUU -> bUU -> @SS -> bBB -> bBB -> .SB -> .TT -> bZZ -> b

Grammatik G2

L(G2) = {..., [email protected], ...}

Menge der stark vereinfachten E-Mail-Adressen

Beachte, dass verschiedene Grammatiken dieselbe Sprache erzeugen können.

Page 42: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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

<S> -><NP><VP> -><A><N><VP> ->die <N><VP> ->die Katze <VP> ->...die Katze fängt die Maus

Page 43: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

43 Experimente mit JFlapEingabe der

Grammatik

Ableitung eines Wortes

Ableitung eines Wortes

Page 44: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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 E-Mail-Adressen erzeugen wie die Ersetzungsregeln oben? Teste deine Vorschläge mit JFlap.E -> U@DU -> ND -> STS -> N.S -> N.ST -> bbN -> BN -> BNB -> b

E -> bUU -> bUU -> @SS -> bBB -> bBB -> .SB -> .TT -> bZZ -> b

E -> U@DU -> bUU -> λ D -> bSS -> bSS -> .bS.bS -> .bb

Page 45: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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 -> iAiA -> siAisA -> piBisB -> siBisB -> g

Page 46: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 47: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

47 Teil 4

Backus-Naur-Form

Page 48: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

48 Gleitkommazahlen in Python

Grammatiken werden in der Praxis meist in der Backus-Naur-Form dargestellt. Hierbei werden Produktionen in einer Kurzschreibweise dargestellt.

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.

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?

Page 49: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

49 Kurzschreibweise für Produktionen

vorzeichen -> + | -

Alternative

vorzeichen -> +vorzeichen -> -

zahl = ziffer {ziffer}zahl -> zifferzahl -> ziffer zahl

zahl = ziffer ziffer*

zahl = ziffer+

zahlmitvorzeichen = [vorzeichen] zahlzahlmitvorzeichen -> zahlzahlmitvorzeichen -> + zahlzahlmitvorzeichen -> - zahl

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.

Iteration

optionale Teile

Page 50: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

50 Übungen

Aufgabe:

Erzeuge die Syntaxdiagramme für Rechenausdrücke mit dem Werkzeug EBNF-Visualizer.

Page 51: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

51 Übungen

Aufgabe:

Erzeuge die Syntaxdiagramme für stark vereinfachte E-Mail-Adressen mit dem Werkzeug EBNF-Visualizer.

Page 52: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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-Naur-Form.

Page 53: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

53 Teil 5

Reguläre Ausdrücke

Page 54: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 55: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 56: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

56 Aufgabe

Entwickle einen regulären Ausdruck, mit dem man alle in der RFC 5322 vorkommenden E-Mail-Adressen als Suchergebnis geliefert bekommt.

Page 57: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

λ ist ein regulärer Ausdruck.

Er beschreibt die leere Wortmenge {}.

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

Page 58: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 59: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

59 Fachkonzept - regulärer Ausdruck

Beispiele

regulärer Ausdruck

Ø

λ

0

1

10

0+1

1*

01*

0*1*

0*+1*

0+1(0+1)*

beschriebene Wortmenge

{}

{λ}

{0}

{1}

{10}

{0, 1}

{λ, 1, 11, 111, 1111, ...}

{0, 01, 011, 0111, 01111, ...}

{λ, 0, 00, ..., 1, 01, 001, ..., 11, 011, 0011, ... }

{λ 0, 00, 000, ..., 1, 11, 111, ...}

{0, 1, 10, 11, 100, 101, 110, 111, ...}

Page 60: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 61: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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

Page 62: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.',...]>>>

Page 63: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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.

Page 64: Formale Sprachen Klaus Becker 2010. 2 Formale Sprachen

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