Powerpoint-Präsentation Teil 1

Werbung
Formale Sprachen
Teil 1
Klaus Becker
2006
Sprachbeschreibung und -erkennung
2



Sprachbeschreibung mit Grammatiken, Syntaxdiagrammen, regulären
Ausdrücken
Spracherkennung mit endlichen Automaten
Anwendungen
3
Teil 1
Einführung
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.the-low-carb-way.com/coffee.php
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
7
Aufgabe
Werfen Sie einen Blick in die RFC 2822. Versuchen Sie zu verstehen, wie die
korrekte Form einer Email-Adresse in diesem Dokument beschrieben wird.
Internet Message Format
Status of this Memo
This document specifies an Internet standards track protocol for the Internet community, and
requests discussion and suggestions for improvements. Please refer to the current edition of
the "Internet Official Protocol Standards" (STD 1) for the standardization state and status of
this protocol. Distribution of this memo is unlimited.
Copyright Notice
Copyright (C) The Internet Society (2001). All Rights Reserved.
Abstract
This standard specifies a syntax for text messages that are sent between computer users,
within the framework of "electronic mail" messages. This standard supersedes the one
specified in Request For Comments (RFC) 822, "Standard for the Format of ARPA Internet Text
Messages", updating it to reflect current practice and incorporating incremental changes that
were specified in other RFCs.
...
Quelle: http://www.ietf.org/rfc/rfc2822.txt
Ein Blick in die RFC 2822
8
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
9
Standardisierung in RFC´s
Die Requests for Comments (kurz RFC; zu deutsch Aufforderung zu Kommentaren) sind
eine Reihe von technischen und organisatorischen Dokumenten des RFC-Editor zum Internet
(ursprünglich ARPANET), die am 7. April 1969 begonnen wurden. Bei der ersten
Veröffentlichung noch im ursprünglichen Wortsinne zur Diskussion gestellt, behalten RFC auch
dann ihren Namen, wenn sie sich durch allgemeine Akzeptanz und Gebrauch zum Standard
entwickelt haben.
RFC Status
Jeder RFC besitzt einen Status. Hier ein paar Beispiele.
• Informational – Hinweis, Idee, Nutzung.
• Experimental – Zum Experimentieren
• Proposed Standard – Vorschlag für Standard
• Draft Standard – Begutachtung von min. 2 unabhäng. Implementierungen
• Standard – Offizieller Standard STDn
• Historic – Nicht mehr benutzt
Quelle: http://de.wikipedia.org/wiki/Request_for_Comments
10
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.
11
Teil 2
Sprachbeschreibung mit Grammatiken
12
Vereinfachte Email-Adressen
Informelle Beschreibung:
Eine vereinfachte Email-Adresse besteht aus einer Benutzerkennung, dem @-Zeichen und
einer Domainangabe.
Die Benutzerkennung ist eine nicht-leere Folge von Kleinbuchstaben (hier nur a, b, c).
Die Domainangabe ist eine Folge von mindestens zwei Domainnamen, die mit einem Punkt
getrennt werden. Ein Domainname ist eine nicht-leere Folge von Kleinbuchstaben (hier nur a,
b, c).
Beispiele für korrekte Email-Adressen:
[email protected]
[email protected]
[email protected]
Beispiele für inkorrekte Email-Adressen:
abba@ca
@a.a
baba@@bc.ba
// Die Domainangabe besteht aus nur einem Domainnamen.
// Hier fehlt die Benutzerkennung.
// Hier ist ein @-Zeichen zu viel.
13
Die Sprache der Email-Adressen
Die Menge der korrekt gebildeten Email-Adressen wird in der Informatik als
(formale) Sprache aufgefasst.
Das Alphabet dieser Sprache ist die Menge der zur Bildung von Email-Adressen erlaubten
Zeichen:
 = {a, b, c, ., @}
Ein Wort über diesem Alphabet ist eine beliebige Folge von Zeichen aus dem Alphabet.
Beispiele für Wörter über  = {a, b, c, ., @}: [email protected], @a.a, baba
Die Sprache der Email-Adressen ist die Menge der Wörter über dem Alphabet , die eine
korrekte Email-Adresse darstellen.
Zur Sprache der Email-Adressen gehören u. a. folgende Wörter:
[email protected]
[email protected]
[email protected]
Nicht zur Sprache der Email-Adressen gehören u. a. folgende Wörter:
abba@ca
@a.a
baba@@bc.ba
// Die Domainangabe besteht aus nur einem Domainnamen.
// Hier fehlt die Benutzerkennung.
// Hier ist ein @-Zeichen zu viel.
14
Formale Sprachen
Ein Alphabet ist eine nicht-leere, endliche (geordnete) Menge von
Zeichen.
Alphabet für vereinfachte Email-Adressen:  = {a, b, c, ., @}
Durch Hintereinanderreihung endlich vieler Zeichen aus einem vorgegebenen Alphabet  erhält man ein Wort (über diesem Alphabet). Die Menge
aller möglichen Wörter über einem Alphabet  wird mit * bezeichnet. Zu
dieser Menge gehört auch das sogenannte leere Wort ( bzw. ), das keine
Zeichen enthält.
Wörter über : [email protected], [email protected], abab, @a@a@a, ..., , ...
Eine (formale) Sprache über dem Alphabet  ist eine Teilmenge von *.
Sprache der Email-Adressen: Menge der Wörter über , die korrekte Email-Adressen bilden.
Zu dieser Sprache gehören: [email protected], [email protected], [email protected], ...
Nicht zu dieser Sprache gehören: , abab, @a@a@a, ...
L = {..., [email protected], ..., [email protected], ..., [email protected], ...}
15
Festlegung formaler Sprachen
Ziel ist es, die Regeln zur Bildung der Wörter einer Sprache zu präzisieren.
Aus den Regeln soll man zweifelsfrei ableiten können, ob ein Wort über dem
gegebenen Alphabet zur Sprache gehört oder nicht.
Zu präzisierende Sprache der vereinfachten Email-Adressen:
Eine „korrekte“ vereinfachte Email-Adresse wird folgendermaßen gebildet:
- Eine vereinfachte Email-Adresse besteht aus einer Benutzerkennung, dem @-Zeichen und
einer Domainangabe.
- Die Benutzerkennung ist eine nicht-leere Folge der Kleinbuchstaben a, b, c.
- Die Domainangabe ist eine Folge von mindestens zwei Domainnamen, die mit einem Punkt
getrennt werden. Ein Domainname ist eine nicht-leere Folge der Kleinbuchstaben a, b, c.
16
Syntaxdiagramme
Informelle Beschreibung:
Eine vereinfachte Email-Adresse besteht aus
einer Benutzerkennung, dem @-Zeichen und
einer Domainangabe.
Buchstabe
a
b
c
Die Benutzerkennung ist eine nicht-leere
Folge von Kleinbuchstaben (hier nur a, b, c).
Die Domainangabe ist eine Folge von
mindestens zwei Domainnamen, die mit
einem Punkt getrennt werden. Ein
Domainname ist eine nicht-leere Folge von
Kleinbuchstaben (hier nur a, b, c).
Name
Buchstabe
Das obere Syntaxdiagramm legt fest, dass ein Buchstabe hier entweder ein
a oder ein b oder ein c ist. Das untere Syntaxdiagramm beschreibt, wie ein
Name aus Buchstaben zusammengesetzt wird.
Jeder Weg durch diese Diagramme – beginnend im Diagramm „Name“ –
ergibt einen korrekt gebildeten Namen.
Bsp.: bc; Weg: Name  Buchstabe [ b ]  Buchstabe [ c ] 
17
Syntaxdiagramme
Informelle Beschreibung:
Eine vereinfachte Email-Adresse besteht aus
einer Benutzerkennung, dem @-Zeichen und
einer Domainangabe.
Buchstabe
a
b
c
Die Benutzerkennung ist eine nicht-leere
Folge von Kleinbuchstaben (hier nur a, b, c).
Die Domainangabe ist eine Folge von
mindestens zwei Domainnamen, die mit
einem Punkt getrennt werden. Ein
Domainname ist eine nicht-leere Folge von
Kleinbuchstaben (hier nur a, b, c).
Name
Buchstabe
Wenn man den Pfeilen im Syntaxdiagramm folgt, so erhält man einen (dem
Diagrammnamen entsprechenden) syntaktisch korrekten Ausdruck.
Syntaxdiagramme können wie im Beispiel oben geschachtelt werden. Trifft
man auf ein Rechteck, so muss man in das zugehörige Syntaxdiagramm
springen. Trifft man auf ein Oval, so wird der zugehörige Inhalt in den zu
bildenden Ausdruck übernommen.
Aufgabe
18
Entwickeln Sie analog Syntaxdiagramme für eine Domainangabe und für
eine Email-Adresse. Benutzen Sie dabei die bereits angegebenen
Syntaxdiagramme.
Die Domainangabe ist eine Folge von mindestens zwei Domainnamen, die mit einem Punkt
getrennt werden. Ein Domainname ist eine nicht-leere Folge von Kleinbuchstaben (hier nur a,
b, c).
DomainAngabe
Eine vereinfachte Email-Adresse besteht aus einer Benutzerkennung, dem @-Zeichen und
einer Domainangabe. Die Benutzerkennung ist eine nicht-leere Folge von Kleinbuchstaben
(hier nur a, b, c).
EmailAdresse
Lösung
19
Die Domainangabe ist eine Folge von mindestens zwei Domainnamen, die mit einem Punkt
getrennt werden. Ein Domainname ist eine nicht-leere Folge von Kleinbuchstaben (hier nur a,
b, c).
DomainAngabe
Name
.
Name
Eine vereinfachte Email-Adresse besteht aus einer Benutzerkennung, dem @-Zeichen und
einer Domainangabe. Die Benutzerkennung ist eine nicht-leere Folge von Kleinbuchstaben
(hier nur a, b, c).
EmailAdresse
Name
@
DomainAngabe
Aufgabe
20
Überprüfen Sie anhand der angegeben Beispiele, ob die entwickelten
Syntaxdiagramme tatsächlich die Bildung von vereinfachten Email-Adressen
korrekt beschreiben.
Beispiele für korrekte Email-Adressen: [email protected], [email protected], [email protected]
Beispiele für inkorrekte Email-Adressen: abba@ca, @a.a, baba@@bc.ba
Buchstabe
a
Name
b
DomainAngabe
EmailAdresse
Buchstabe
c
Name
.
Name
@
Name
DomainAngabe
21
Die Grammatik einer formalen Sprachen
Syntaxdiagramme legen die Regeln fest, mit denen die Wörter einer
Sprache gebildet werden. Sie können daher als eine Art Grammatik der
Sprache aufgefasst werden. Ziel ist es im Folgenden, den Grammatikbegriff
der Informatik zu präzisieren und verschiedene Darstellungsformen
aufzuzeigen.
Buchstabe
a
Name
b
DomainAngabe
EmailAdresse
Buchstabe
c
Name
.
Name
@
Name
DomainAngabe
Bestandteile von Syntaxdiagrammen
22
Buchstabe
a
Name
b
DomainAngabe
EmailAdresse
Buchstabe
c
Name
.
Name
@
Terminalsymbol
Name
DomainAngabe
Nichtterminalsymbol
Terminalsymbole sind lexikalische Einheiten, die zur Bildung von EmailAdressen benötigt werden. Sie gehören also zum Alphabet der Sprache.
Nichtterminalsymbole sind zusätzliche Platzhalter, die zur Beschreibung
der zulässigen Email-Adressen benutzt werden.
Übersetzung in Produktionsregeln
23
Buchstabe
Produktionsregeln
Ba
Bb
a
b
Name
DomainAngabe
c
Bc
NB
Buchstabe
N  BN
H  .N
Name
.
Name
H  .NH
D  NH
EmailAdresse
Name
@
DomainAngabe
E  N@D
Ableitung eines Worts
24
Buchstabe
a
Name
b
Buchstabe
c
Ba
Bb
Bc
NB
DomainAngabe
N  BN
Name
.
Name
H  .N
H  .NH
EmailAdresse
D  NH
Name
@
DomainAngabe
E  N@D
E  N@D  B@D  c@D  c@NH  c@BH  c@aH  [email protected][email protected][email protected]
Ableitung
Eine Ableitung eines Worts mit den Produktionsregeln entspricht einem
Weg durch die Syntaxdiagramme.
25
Grammatikbegriff der Informatik
Eine Grammatik besteht aus den folgenden Komponenten:
- einer endlichen nichtleeren Menge T von Terminalsymbolen,
- einer endlichen nichtleeren Menge NT von Nichtterminalsymbolen,
- einer endlichen Menge P von Produktionen (Regeln) und
- einem Startsymbol S  N.
Kurz: G = (T, N, P, S)
Terminalsymbole: T = {a, b, c, ., @}
Nichtterminalsymbole: NT = {E, D, H, N, B}
// Alphabet d. Sprache
// zusätzliche Platzhalter
Produktionen: P = {B  a, B  b, ..., E  N@D} // eigentliche Regeln
Ba
Bb
Bc
NB
N  BN
Startsymbol: E
// startet Ableitung
Eine Produktion (Regel) hat immer die Gestalt u  v.
Die linke Seite u und die rechte Seite v sind dabei Wörter
über dem Alphabet V = T  N.
H  .N
H  .NH
D  NH
E  N@D
26
Worterzeugung als Ableitung
Terminalsymbole: T = {a, b, c, ., @}
Nichtterminalsymbole: NT = {E, D, H, N, B}
// Alphabet d. Sprache
// zusätzliche Platzhalter
Produktionen: P = {B  a, B  b, ..., E  N@D} // eigentliche Regeln
Ba
Bb
Bc
NB
N  BN
Startsymbol: E
// startet Ableitung
Eine Ableitung beginnt immer mit dem Startsymbol.
Sie endet, wenn alle Nichtterminalsymbole ersetzt sind.
Ein Ableitungsschritt besteht darin, dass ein Teilwort innerhalb
eines Worts mit Hilfe einer passenden Produktion zu ersetzen.
Produktionen sind demnach Ersetzungsregeln.
Beachte: Es gibt oft verschiedene Ableitungen eines Wortes.
H  .N
H  .NH
D  NH
E  N@D
E  N@D  B@D  c@D  c@NH  c@BH  c@aH  [email protected][email protected][email protected]
E  N@D  N@NH  [email protected][email protected][email protected][email protected][email protected][email protected][email protected]
27
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.
Terminalsymbole: T = {a, b, c, ., @}
Nichtterminalsymbole: T = {E, D, H, N, B}
// Alphabet d. Sprache
// zusätzliche Platzhalter
Produktionen: P = {B  a, B  b, ..., E  N@D} // eigentliche Regeln
Ba
Bb
Bc
NB
N  BN
Startsymbol: E
// startet Ableitung
H  .N
H  .NH
D  NH
L(G) = {..., [email protected], ..., [email protected], ..., [email protected], ..., [email protected], ...}
E  N@D
28
Backus-Naur-Schreibweise
Oft ist es zweckmäßig, die sog. Backus-Naur-Form als Kurzschreibweise für
Produktionen zu benutzen. Statt Backus-Naur-Form wird auch die
Abkürzung BNF verwendet.
Ba
Ba|b|c
Bb
Bc
NB
N  B | BN
N  BN
H  .N
H  .N | .NH
H  .NH
D  NH
D  NH
E  N@D
E  N@D
Grammatik in
Normalform
Grammatik in
BNF
Ein Vergleich mit der RFC
29
Die Struktur von Email-Adressen wird in der RFC 2822 in Backus-Naur-Form
spezifiziert. Diese Art der Spezifikation findet man in sehr vielen
professionell erstellten Sprachbeschreibungen.
RFC 2822
Internet Message Format
April 2001
3.4.1. Addr-spec specification
addr-spec
=
local-part "@" domain
E  N@D
local-part
=
dot-atom / quoted-string / obs-local-part
N  B | BN
domain
=
dot-atom / domain-literal / obs-domain
D  NH
domain-literal
=
[CFWS] "[" *([FWS] dcontent) [FWS] "]" ...
H  .N | .NH
dcontent
=
dtext / quoted-pair
Ba|b|c
dtext
=
NO-WS-CTL /
; Non white space controls
...
EmailAdressen in BNF
Vereinfachte
Email-Adressen
in BNF
30
JFlap
Zum Experimentieren mit Grammatiken benutzen wir im Folgenden das
Programm „JFlap“ als Werkzeug.
JFlap erhält man hier: http://www.jflap.org
31
Aufgabe
Starten Sie zunächst den Grammatik-Teil von JFlap und geben Sie die
entwickelte Grammatik für vereinfachte Email-Adressen ein. Beachten Sie,
dass das Startsymbol in der ersten Produktion auf der linken Seite stehen
muss.
JFlap erhält man hier: http://www.jflap.org
32
Aufgabe
Testen Sie die eingegebene Grammatik. Rufen Sie hierzu die Menüpunkte
[Input] [Brute Force Parse] auf und geben Sie die zu untersuchende
Zeichenkette ein (Achtung: Zeichenkette nicht zu lang wählen).
Testen Sie auch
Zeichenketten, die
keine korrekte
vereinfachte EmailAdresse darstellen
sollen.
33
Aufgabe
JFlap zeigt Ableitungen auch in einer Baumdarstellung an. Wie ist ein
solches Baumdiagramm zu lesen?
Aufgabe
34
A  aB
A  bB
A  cB
B  aB
B  bB
B  cB
B  @C
C  aD
C  bD
C  cD
D  aD
D  bD
D  cD
D  .E
E  aF
E  bF
E  cF
F  aF
F  bF
F  cF
F  .E
F
Testen Sie die abgebildete „alternative Grammatik“ für
vereinfachte Email-Adressen. Vergleichen Sie diese alternative
Grammatik mit der bisher betrachteten.
Was fällt
auf, wenn
Sie
längere
Wörter
untersuchen?
Haben Sie
eine
Erklärung
hierfür?
35
Aufgabe
Versuchen Sie, die korrekte Darstellung von Zahlen (natürliche Zahlen wie
13 / ganze Zahlen wie –4 / Dezimalzahlen wie 3.14 / Dezimalzahlen mit
Exponentenschreibweise wie -0.12 E-2) exakt zu beschreiben. Verwenden
Sie hierzu Syntaxdiagramme / eine Grammatik. Testen Sie die Ergebnisse
mit JFlap.
36
Aufgabe
Beschreiben Sie die folgenden „Sprachen“ mit Hilfe einer Grammatik:
- Die Sprache der korrekten Zeitangaben wie z. B. 12:15
- Die Sprache der Klassenbezeichner: 5a, 5b, 6a, 6b, ..., 10a, 10b
Aufgabe
37
Als der Münchner Dienstmann Alois in den Himmel kam, überreichte ihm
Petrus eine Harfe und wies ihn in die himmlische Zungensprache
"Frohlocken" ein. Ihre Sätze werden entsprechend der der folgenden
Syntaxdiagramme gebildet.
frohlocken
hosianna
singen
Bilden Sie verschiedene
Wörter, die zur
himmlischen
Zungensprache gehören.
.
.
hosianna
singen
ha
l
le
lu
u
ja
Beschreiben Sie diese
Sprache mit Hilfe einer
Grammatik.
Quelle: Bundeswettbewerb Informatik 1990; siehe auch: Gasper, Leiß, Spengler, Stimm S. 177
38
Aufgabe
Informieren Sie sich bei Wikipedia über die erweiterte Backus-Naur-Form
(EBNF). Analysieren Sie die dort abgebildete Grammatik für eine einfache
Programmiersprache und bilden Sie einige Wörter dieser Sprache.
Beschreiben Sie diese Programmiersprache auch mit Hilfe von
Syntaxdiagrammen.
(* ein einfaches Beispiel in EBNF - Wikipedia *)
Programm = 'PROGRAM' Bezeichner 'BEGIN' { Zuweisung ";" } 'END' "."
Bezeichner = Buchstabe { ( Buchstabe | Ziffer ) }
Zahl = [ "-" ] Ziffer { Ziffer }
String = '"' { AlleZeichen - '"'} '"'
Zuweisung = Bezeichner ":=" ( Zahl | Bezeichner | String )
Buchstabe = "A" | "B" | "C" | ... | "X" | "Y" | "Z" ;
Ziffer = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
AlleZeichen = ? alle sichtbaren Zeichen ?
Quelle: http://de.wikipedia.org/wiki/Erweiterte_Backus-Naur-Form
39
Teil 3
Spracherkennung mit Automaten
Spracherkennungssysteme
40
Ein Spracherkennungssystem soll bei Eingabe eines beliebigen Wortes
entscheiden, ob dieses Wort zur vorgegebenen Sprache gehört oder nicht.
Wort
ja / nein
41
Erzeugende Systeme
Bisher haben wir zur Spracherkennung Systeme benutzt, die systematisch
Ableitungen mit Hilfe von Grammatikregeln erzeugen und überprüfen, ob
das gegebene Wort auf diese Weise erhalten werden kann.
[email protected]
E
N@D 
B@D 
a@D
b@D
c@D 
c@NH 
c@BH 
c@aH 
[email protected]
[email protected]
c@bH
c@cH
c@BNH 
...
E  N@D
// Sackgasse
// Sackgasse
D  NH
H  .N
H  .NH
NB
//
//
//
//
Sackgasse
Sackgasse
Sackgasse
Sackgasse
N  BN
Ba
Bb
Bc
ja
42
Aufgabe
Laden Sie die Datei „EmailDA1.jff“ in JFlap und rufen Sie die Menüpunkte
[Input] [Step by State] auf. Geben Sie einige korrekt bzw. nicht korrekt
gebildete vereinfachte Email-Adressen ein und lassen Sie das System diese
Wörter verarbeiten. Wie stellt das System die Korrektheit fest?
Analysierende Systeme
43
Das System analysiert das gegebene Wort Schritt für Schritt und überprüft,
ob die Verarbeitung des Worts vom Anfangszustand i. e. Endzustand führt.
c
b
a
c
b
a
c
b
a
Anfangszustand
q0
c
b
a
q1
@
.
@
.
[email protected] :Eingabe
c
b
a
q2
@
.
q3
@
c
b
a
.
q4
.
@
.
q5
@
q6
@
.
c
b
a
Endzustand
Ausgabe: ja
44
Endlicher Automat als Akzeptor
Ein erkennender Automat / Akzeptor besteht aus den folgenden
Komponenten:
- einer endlichen Menge Z von Zuständen,
- einem Anfangszustand za  Z,
- einer Menge Ze  Z von Endzuständen,
- einer endlichen Menge E von Eingabezeichen und
- einer Überführungsfunktion : Z x E  Z.
Kurz: A = (Z, za, Ze, E, )
45
Endlicher Automat als Akzeptor
Zustände: Z = {q0, q1, q2, q3, q4, q5, q6}
Anfangszustand: q0
Endzustände: {q5}
Eingabezeichen: E = {a, b, c, . @}
Überführungsfunktion : Z x E  Z
: (q0, a)  q1; : (q0, b)  q1; : (q0, c)  q1; : (q0, .)  q6; : (q0, @)  q6;
: (q1, a)  q1; : (q1, b)  q1; : (q1, c)  q1; : (q1, .)  q6; : (q1, @)  q2;
...
46
Die Sprache eines Akzeptors
Unter der Sprache L(A) eines Akzeptors A = (Z, za, Ze, E, A, ) versteht
man die Menge aller Wörter über dem Alphabet E, die den Automaten vom
Anfangszustand za in einen Endzustand aus Ze überführen.
Eingabe: [email protected]
Ausgabe: ja
47
Aufgabe
Entwickeln Sie einen Akzeptor für Bitfolgen:
- mit gerader Anzahl von Nullen : 0010 0001
- die mindestens zwei aufeinander folgende Einsen oder Nullen enthalten,
wie z. B. : 10110101
48
Aufgabe
Entwickeln Sie Akzeptoren für verschiedene Zahldarstellungen:
- ganze Zahlen : -3, -2, -1, 0, 1, +1, 2, +2, ...
- Dezimalzahlen : 3.14, ...
- Dezimalzahlen mit Exponentenschreibweise: -0.12 E-2, ...
49
Aufgabe
In den Vereinigten Staaten gibt es die League Against Sexist Speach
(LASS), die sich einen Akzeptor wünscht, der erkennt, ob in einem Wort die
Zeichenfolge „man“ vorkommt.
Quelle: R. Baumann, Informatik für die SII, Band 2, S. 216.
Aufgabe
50
Entwickeln Sie einen Akzeptor für die himmlische Zungensprache.
frohlocken
hosianna
singen
.
.
hosianna
singen
ha
l
le
lu
u
ja
51
Teil 4
Exkurs:
Sprachbeschreibung mit regulären
Ausdrücke
52
Reguläre Ausdrücke
Reguläre Ausdrücke sind ein weiteres in der Informatik gebräuchliches
Hilfsmittel zur Beschreibung von Sprachen.
Artikel: Kluge E-Mail Adressen Validation
von Jan Winkler
...
Für das Prüfen mit Regulären Ausdrücken werden wir den folgenden Ausdruck verwenden:
^([a-zA-Z0-9\\-\\.\\_]+)(\\@)([a-zA-Z0-9\\-\\.]+)(\\.)([a-zA-Z]{2,4})$.
Im Einzelnen beschreibt dieser den Benutzernamen, ein @, die Domain, einen Punkt und 2
(z.B. de) bis 4 (z.B. info) Zeichen für die TLD. Bei der zweiten Variante werden wir die
zerteilten Stücke der Adresse auf ihre Länge prüfen:
...
Quelle: http://www.html-world.de/artikel/art_j14.php
53
Beispiele für reguläre Ausdrücke
Beispiele für reguläre Ausdrücke:
ab*a
// Menge der Wörter über {a, b}, die mit a beginnen, dann eine beliebige Anzahl (evtl. auch
keine) von b´s enthalten und mit a enden. Bsp.: aa, aba, abba, abbba, ...
b*ba
// Menge der Wörter über {a, b}, die mit einer beliebige Anzahl (evtl. keine) von b´s beginnen
und dann ein b gefolgt von einem a enthalten. Bsp.: ba, bba, bbba, ...
a(a+b)b
// Menge der Wörter über {a, b}, die mit a beginnen, dann ein a oder ein b enthalten und mit
b enden. Bsp.: aab, aba
a(a+b)*b
// Menge der Wörter über {a, b}, die mit a beginnen, dann eine beliebige Anzahl (evtl. keine)
a´s oder b´s enthalten und mit b enden. Bsp.: ab, aab, abb, aaab, aabb, abab, abbb, ...
(aa*b)*
// Menge der Wörter über {a, b}, die beliebig oft (evtl. gar nicht) die Zeichenfolge „a gefolgt
von beliebig vielen a´s gefolgt von einem b“ wiederholen. Bsp.: , ab, aaab, aabaaab, ...
b*(ab*ab*ab*)*
// Menge der Wörter über {a, b}, die eine durch 3 teilbare Anzahl von a´s enthalten.
Bsp.: bbababbba, aababbbbababbba, ...
54
Verknüpfung von Wortmengen
X und Y seien Wortmengen über dem Alphabet .
XY = {xy | xX, yY} ist die Menge aller Wörter, die sich ergeben, wenn
man an ein beliebiges Wort aus X ein beliebiges Wort aus Y hängt.
X0 = {}; X1 = X; X2 = XX; X3 = X2X = XXX; ...
X* = X0  X1  X2  X3 … ist die Menge aller Wörter, die sich ergeben,
wenn man beliebig viele (auch keine) Wörter aus X aneinanderhängt.
X+ = X1  X2  X3  X4 … ist die Menge aller Wörter, die sich ergeben,
wenn man beliebig viele Wörter, aber mindestens ein Wort aus X
aneinanderhängt.
Beispiele: Sei X = {a, b}; Y = {c}.
XY = {ac, bc}
X0 = {}; X1 = X = {a, b}; X2 = XX = {aa, ab, ba, bb}
X* = X0  X1  X2  X3 … = {, a, b, aa, ab, ba, bb, ...}
X+ = X1  X2  X3  X4 … = {a, b, aa, ab, ba, bb, ...}
55
Regeln für reguläre Ausdrücke
Gebeben sei das Alphabet .
 ist ein regulärer Ausdruck, der die leere Menge {} bezeichnet.
 ist ein regulärer Ausdruck, der die Menge {} mit dem leeren Wort
bezeichnet.
Für jedes a   ist a ein regulärer Ausdruck, der die Menge {a} bezeichnet.
Sind x und y reguläre Ausdrücke, die die Mengen X und Y bezeichnen, so
ist auch
(x+y) ein regulärer Ausdruck, der die Menge XY bezeichnet,
xy ein regulärer Ausdruck, der die Menge XY bezeichnet,
x* ein regulärer Ausdruck, der die Menge X* bezeichnet,
x+ ein regulärer Ausdruck, der die Menge X+ bezeichnet,
Beispiel: Sei  = {a, b, c}.
(a+b)*
= ({a}{b})0  ({a}{b})1  ({a}{b})2  …
= {, a, b, aa, ab, ba, ...}
56
Aufgabe
Beschreiben Sie die folgenden mit Hilfe regulärer Ausdrücke festgelegten
Wortmengen:
(0+(1+2+3+4+5+6+7+8+9)(0+1+2+3+4+5+6+7+8+9)*)
(abc+a*)
(a*b*+c)
(aa+b)*(a+bb)*
57
Aufgabe
Beschreiben Sie die folgenden Wortmengen mit Hilfe regulärer Ausdrücke:
Die Menge der Wörter über {a, b}, die mit a beginnen und mit b enden.
Die Menge aller Zeichenketten über dem Alphabet {0, 1}, die mit 00 enden.
Die Menge aller Zeichenketten über dem Alphabet {a, b}, die nach jedem a
genau zwei b´s haben.
Die Menge folgender Klassenbezeichner: {5a, 5b, 5c, ..., 10a, 10b, 10c}.
Die Menge zulässiger Zeitangaben; z. B. 12:00
58
Aufgabe
Beachten Sie, dass es verschiedene Darstellungen regulärer Ausdrücke
benutzt werden. Versuchen Sie, den unten dargestellten Ausdruck zu
verstehen.
Artikel: Kluge E-Mail Adressen Validation
von Jan Winkler
...
Für das Prüfen mit Regulären Ausdrücken werden wir den folgenden Ausdruck verwenden:
^([a-zA-Z0-9\\-\\.\\_]+)(\\@)([a-zA-Z0-9\\-\\.]+)(\\.)([a-zA-Z]{2,4})$.
Im Einzelnen beschreibt dieser den Benutzernamen, ein @, die Domain, einen Punkt und 2
(z.B. de) bis 4 (z.B. info) Zeichen für die TLD. Bei der zweiten Variante werden wir die
zerteilten Stücke der Adresse auf ihre Länge prüfen:
...
Quelle: http://www.html-world.de/artikel/art_j14.php
Aufgabe
59
Beschreiben Sie die Menge der vereinfachten Email-Adressen mit Hilfe eines
regulären Ausdrucks. Die Syntaxdiagramme können Ihnen bei der
Konstruktion des Ausdrucks weiterhelfen.
Buchstabe
a
Name
b
DomainAngabe
EmailAdresse
c
Name
.
Name
@
Name
DomainAngabe
Buchstabe
Lösung
60
Buchstabe
a
Name
b
c
(a+b+c)
DomainAngabe
Buchstabe
(a+b+c)(a+b+c)*
Name
.
Name
(a+b+c)(a+b+c)*.(a+b+c)(a+b+c)*(.(a+b+c)(a+b+c)*)*
EmailAdresse
Name
@
DomainAngabe
(a+b+c)(a+b+c)*@(a+b+c)(a+b+c)*.(a+b+c)(a+b+c)*(.(a+b+c)(a+b+c)*)*
61
Teil 5
Anwendungen:
Spracherkennung mit einem Parser-Generator
62
Zielsetzung
Bisher wurden Verfahren zur Beschreibung und Erkennung von formalen
Sprachen anhand einfacher Beispielsprachen entwickelt. Ziel ist es jetzt,
formale Sprachen zu betrachten, deren Nähe zu praxisrelevanten Sprachen
offensichtlich ist. Um mit solchen – auch etwas umfangreicheren –
Sprachen experimentell umgehen zu können, wird im Folgenden ein
geeignetes Werkzeug (ein sog. Parser-Generator) eingesetzt. Anders als
JFlap, das mehr für das experimentelle Erlernen von Konzepten gedacht ist,
ist der Parser-Generator ein auch in der Praxis einsetzbares Werkzeug. Als
Beispielsprachen betrachten wir
- ein vereinfachtes HTML
- ein vereinfachtes XML
- eine Sprache für mathematische Rechenausdrücke
- eine einfache Programmiersprache zur Steuerung eines Roboters
63
Vereinfachtes HTML
Informelle Beschreibung:
Ein vereinfachtes HTML-Dokument besteht aus einem Kopf mit Titelangabe und einem Rumpf
mit Abschnitten. Es sind keine Umlaute erlaubt. Es sollen auch keine Tabellen, Links, Bilder
etc. integriert werden.
Der unten abgebildete HTML-Quelltext ist in diesem Sinne ein vereinfachtes HTML-Dokument.
<html>
<head>
<title>Weiterbildungskurs Informatik</title>
</head>
<body>
<p>Der Weiterbildungslehrgang Informatik in Rheinland-Pfalz ist ein Ersatzstudium der
Informatik für Lehrerinnen und Lehrer, die bereits eine Lehrbefaehigung in einem
naturwissenschaftlichen Fach haben.</p>
<p>Der Lehrgang besteht aus sechs Wochenkursen, in denen jeweils typische Themen der
Informatik bearbeitet werden.</p>
<p>Der Lehrgang schliesst dann mit einer Pruefung zum Erwerb der Unterrichtserlaubnis fuer
das Grundfach Informatik ab.</p>
</body>
</html>
64
Lexik / Syntax
Formale Sprachen, die in der Praxis vorkommen, sind oft zweistufig
aufgebaut. Sie basieren auf bestimmten lexikalischen Einheiten, die
vorgegeben sind bzw. nach vorgegeben Regeln gebildet werden können.
Aus diesen lexikalischen Einheiten werden dann die „Wörter“ der Sprache
gemäß einer vorgegebenen Grammatik gebildet. Diese Grammatik
beschreibt die Syntax der Sprache.
<html>
<head>
<title>Weiterbildungskurs Informatik</title>
</head>
<body>
<p>Der Weiterbildungslehrgang ...</p>
<p>Der Lehrgang besteht aus ...</p>
<p>Der Lehrgang schliesst dann ...</p>
</body>
</html>
Lexikalische Einheiten:
- Tags wie <html>
- Zeichenketten (die üblicherweise
einer natürlichen Sprache
entstammen)
Syntaxregeln:
- Das gesamte Dokument wird mit
den Tags <html> ... </html>
eingefasst.
- ...
65
Das Werkzeug „GOLD Parser Builder“
Der Parser-Generator „GOLD Parser Builder“ unterstützt die zweistufige
Beschreibung einer formalen Sprache. Wir zeigen seine Benutzung am
Beispiel des vereinfachten HTML (siehe oben).
Siehe: www.devincook.com/goldparser
66
Lexikalische Einheiten
Die lexikalischen Einheiten werden beim „GOLD Parser Builder“ mit Hilfe
von regulären Ausdrücken festgelegt. Diese bilden dann die
Terminalsymbole bei der Festlegung der Grammatik.
! Terminalsymbole
Ahtml = '<'html'>'
Ehtml = '<''/'html '>'
Ahead = '<'head '>'
Ehead = '<''/'head '>'
Atitle = '<'title '>'
Etitle = '<''/'title '>'
Abody = '<'body '>'
Ebody = '<''/'body '>'
Ap = '<'p '>'
Ep = '<''/'p'>‚
Wort = {Alphanumeric}+
Satzzeichen = '.' | '!' | '?' | ',' | ';' | ':' | '-'
MyHtml.grm
67
Syntaktische Regeln
Die Syntax der Sprache wird mit Hilfe einer Grammatik in BNF-Notation
beschrieben.
Beachte: Nichtterminalsymbole werden im GOLD Parser Builder mit spitzen
Klammern dargestellt – also zufälligerweise genauso wie HTML-Tags.
"Start Symbol" = <HtmlDokument>
! Produktionen
<HtmlDokument> ::= Ahtml <Kopf> <Rumpf> Ehtml
<Kopf> ::= Ahead <Titel> Ehead
<Titel> ::= Atitle <Text> Etitle
<Rumpf> ::= Abody <Absaetze> Ebody
<Absaetze> ::= <Absatz>
<Absaetze> ::= <Absatz> <Absaetze>
<Absatz> ::= Ap <Text> Ep
<Text> ::= <Texteinheit>
<Text> ::= <Texteinheit> <Text>
<Texteinheit> ::= Wort | Satzzeichen
MyHtml.grm
68
Aufgabe: HTML
Testen Sie das Werkzeug „GOLD Parser Builder“. Laden Sie die Grammatik
„MyHtml1.grm“, lassen Sie das Werkzeug den entsprechenden Parser
generieren und testen sie ihn.
Gehen Sie in einem zweiten Schritt hin und erweitern Sie den
Sprachumfang um ...
Einfach: Überschriften: <h1>...</h1>
Schwieriger: vereinfachte Tabellen
Schwieriger: vereinfachte Verweise: <a href="IFB">IFB</a>
...
69
Aufgabe: HTML
Machen Sie sich anhand der Grafik klar,
dass man das gesamte vereinfachte
HTML mit einem endlichen Automaten
erkennen kann.
<html>
<head>
<title>
...Text...
</title>
</head>
<body>
<p>
<p>
...Text...
</p>
</body>
</html>
70
Aufgabe: Parser Builder
Schauen Sie ein wenig „hinter die Kulissen“ des Werkzeugs „GOLD Parser
Builder“. ...
Machen Sie sich klar, dass der Parser Builder einen endlichen Automaten
(DFA) zur lexikalischen Analyse benutzt und einen weiteren komplizierteren
Automat zur syntaktischen Analyse (siehe LALR States).
71
Vereinfachte Rechenausdrücke
Informelle Beschreibung:
Wir betrachten nur Rechenausdrücke, die vollständig geklammert sind. Jede Rechenoperation
muss umklammert werden. – wie z. B. bei (12+3). Eine Rechenoperation bezieht sich auf
Zahlen oder Rechenterme – wie z. B. bei ((13 – 7) * 4). Rechenausdrücke können beliebig
komplex verschachtelt werden – wie z. B. bei (((45 – 6) * (67 / 5)) – (6 * 5)). Die unten
abgebildeten Ausdrücke sind in diesem Sinne vereinfachte Rechenausdrücke.
(12 + 3)
((13 - 7) * 4)
(((45 – 6) * (67 / 5)) – (6 * 5))
...
72
Aufgabe: Rechenausdrücke
Entwickeln Sie eine Grammatik für die Sprache der vereinfachten
Rechenausdrücke und testen Sie sie mit dem Werkzeug „GOLD Parser
Builder“. Zur Festlegung der Terminalsymbole können Sie die unten
gezeigten Vereinbarungen benutzen.
! Terminalsymbole
Zahl = {Digit}+
Kauf = '('
Kzu = ') '
Plus = '+'
Minus = '-'
Mal = '*'
Durch = '/'
! Achtung: Wir erlauben so auch Zahlen mit führenden Nullen, z. B. 007.
73
Aufgabe: Rechenausdrücke
Erweitern Sie die Grammatik so, dass auch Variablen in den
Rechenausdrücken vorkommen können.
74
Aufgabe: Rechenausdrücke
Kann man die Sprache der vereinfachten Rechenausdrücke mit einem
endlichen Automaten erkennen?
(12 + 3)
((13 - 7) * 4)
(((45 – 6) * (67 / 5)) – (6 * 5))
...
75
Programmiersprache für Karol
Ziel ist es, für eine einfache
Programmiersprache einen
Interpreter und einen Compiler zu
entwickeln. Die hier betrachtete
Programmiersprache orientiert sich
an der Sprache zur Steuerung des
Roboters Karol.
hinlegen
schritt
wiederhole solange NichtIstZiegel
wiederhole solange NichtIstWand
schritt
*wiederhole
linksDrehen
*wiederhole
1
76
Die Programmiersprache
Zur Vereinfachung der Darstellung verwenden wir abkürzende Bezeichner
für die Anweisungen der Programmiersprache.
h
s
wh nz
wh nw
s
*wh
l
*wh
hinlegen
schritt
wiederhole solange NichtIstZiegel
wiederhole solange NichtIstWand
schritt
*wiederhole
linksDrehen
*wiederhole
77
Die Programmiersprache MyKa
Elementare Anweisungen:
h
a
s
l
r
„Ziegel hinlegen“
„Ziegel aufheben“
„Schritt vorwärts“
„links drehen“
„rechts drehen“
Elementare Bedingungen:
nz
nw
h
s
wh nz
wh nw
s
*wh
l
*wh
„nicht auf Ziegel“
„nicht vor Wand“
Kontrollanweisung:
wh ...
...
*wh
„wiederhole solange ...“
Ein MyKa-Programm setzt sich – wie im Beispiel gezeigt – aus elementaren
und Kontrollanweisungen zusammen.
Bei der Darstellung von MyKa-Programmen dürfen mehrere Anweisungen in
eine Zeile geschrieben werden, ...
78
Aufgabe: MyKa
Entwickeln Sie eine Grammatik für die Programmiersprache „MyKa“ und
testen Sie diese Grammatik mit Hilfe des GOLD Parser Builder.
79
Vereinfachtes XML
Informelle Beschreibung:
Ein vereinfachtes XML-Dokument besteht aus ineinandergeschachtelten Elementen. Ein
Element besteht aus einem Anfangstag, einem Bezeichner oder einer Elementliste und einem
passenden Endtag. Ein Bezeichner besteht aus beliebigen alphanumerischen Zeichen.
Der unten abgebildete XML-Quelltext ist in diesem Sinne ein vereinfachtes XML-Dokument.
<structure>
<type>grammar</type>
<production>
<left>S</left>
<right>a</right>
</production>
<production>
<left>S</left>
<right>A</right>
</production>
<production>
<left>A</left>
<right>a</right>
</production>
</structure>
Aufgabe: XML
80
Testen Sie folgenden Grammatik-Vorschlag für die Sprache der
vereinfachten XML-Ausdrücke. Hier stimmt etwas nicht. Finden Sie den
Fehler.
Sehr schwierig: Geben Sie eine korrekte Grammatik an.
! Terminalsymbole
ATag
ETag
Text
= '<' {Letter}+ '>'
= '<' '/' {Letter}+ '>‚
= {Alphanumeric}+
"Start Symbol" = <Element>
! Produktionen
<Element>
<ElementListe>
<ElementListe>
<Element>
::=
::=
::=
::=
ATag Text Etag
<Element>
<Element> <ElementListe>
ATag <ElementListe> ETag
81
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.
...
Herunterladen