Formale Sprachen und Automaten

Download Report

Transcript Formale Sprachen und Automaten

Formale Sprachen und Automaten
Klaus Becker
2004
Formale Sprachen
2
Formale Sprachen
! Terminalsymbole
KB
ATagZustand
ETagZustand
ATagZustandsmenge
ETagZustandsmenge
Bezeichner
=
=
=
=
=
'<' z '>'
'<' '/' z '>'
'<' z m '>'
'<' '/' z m '>'
{Alphanumeric}+
! Produktionen
"Start Symbol" = <Zustandsmenge>
<Zustand>
<Zustaende>
<Zustaende>
<Zustandsmenge>
::=
::=
::=
::=
ATagZustand Bezeichner ETagZustand
<Zustand>
<Zustand> <Zustaende>
ATagZustandsmenge <Zustaende>
ETagZustandsmenge
Formale Sprachen
3
KB
Teil 1
Sprachbeschreibung und Spracherkennung
Formale Sprachen
4
KB
Exkurs: XML
<?xml version="1.0"?>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high</zustand>
</zustandsmenge>
<anfangszustand>
<zustand>off</zustand>
</anfangszustand>
<ueberfuehrungsfunktion>
<delta>off,Schalter,low</delta>
<delta>low,Schalter,high</delta>
<delta>high,Schalter,off</delta>
</ueberfuehrungsfunktion>
<ausgabefunktion>
<lambda>off,Schalter,AnAus</lambda>
<lambda>low,Schalter,AnAn</lambda>
<lambda>high,Schalter,AusAus</lambda>
</ausgabefunktion>
</automat>
Formale Sprachen
5
Was ist XML?
<?xml version="1.0"?>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high</zustand>
</zustandsmenge>
...
</automat>
„XML (Abk. für extended markup language) ist eine Metasprache
zur Beschreibung von Auszeichnungssprachen für allgemeine
Dokumente.“ (Duden Informatik)
Mit Hilfe von XML kann man Informationen strukturiert darstellen.
Des weiteren kann man die Struktur (und die Formatierung) von
Dokumenten festlegen, d. h. man kann die Sprache festlegen, in
der die Dokumente verfasst werden müssen.
KB
Formale Sprachen
6
KB
Darstellung von XML-Dokumenten
<?xml version="1.0"?>
<automat name="Klimaanlage">
XML-Dokument
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high</zustand>
Browser-Ansicht
</zustandsmenge>
<anfangszustand>
<zustand>off</zustand>
</anfangszustand>
<ueberfuehrungsfunktion>
<delta>off,Schalter,low</delta>
<delta>low,Schalter,high</delta>
<delta>high,Schalter,off</delta>
</ueberfuehrungsfunktion>
<ausgabefunktion>
<lambda>off,Schalter,AnAus</lambda>
<lambda>low,Schalter,AnAn</lambda>
<lambda>high,Schalter,AusAus</lambda>
</ausgabefunktion>
</automat>
Formale Sprachen
7
Ein fehlerhaftes Dokument
<?xml version="1.0"?>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high<zustand>
</zustandsmenge>
<anfangszustand>
<zustand>off</zustand>
</anfangszustand>
...
</automat>
Der Browser erkennt, wenn ein allgemeiner Syntaxfehler vorliegt
(hier: kein passendes Ende-Tag gefunden).
KB
Formale Sprachen
8
Noch ein fehlerhaftes Dokument
<?xml version="1.0"?>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high</zustand>
</zustandsmenge>
<!-- kein Anfangszustand -->
<ueberfuehrungsfunktion>
<delta>off,Schalter,low</delta>
<delta>low,Schalter,high</delta>
<delta>high,Schalter,off</delta>
</ueberfuehrungsfunktion>
...
</automat>
Der Browser erkennt aber nicht, wenn ein spezieller Syntaxfehler
vorliegt (hier: betrifft die vom Benutzer vorgesehene Struktur des
Dokuments).
KB
Formale Sprachen
9
KB
Festlegung der Dokumentenstruktur
<?xml version="1.0"?>
<!DOCTYPE automat
[
<!ELEMENT automat (zustandsmenge?, anfangszustand,
eingabemenge?, ausgabemenge?,
ueberfuehrungsfunktion, ausgabefunktion)>
<!ATTLIST automat name CDATA #REQUIRED>
<!ELEMENT zustandsmenge (zustand)+>
<!ELEMENT anfangszustand (zustand)>
<!ELEMENT zustand (#PCDATA)>
<!ELEMENT eingabemenge (eingabe)+>
<!ELEMENT eingabe (#PCDATA)>
<!ELEMENT ausgabemenge (ausgabe)+>
<!ELEMENT ausgabe (#PCDATA)>
<!ELEMENT ueberfuehrungsfunktion (delta)*>
<!ELEMENT delta (#PCDATA)>
<!ELEMENT ausgabefunktion (lambda)*>
<!ELEMENT lambda (#PCDATA)>
]
>
<automat name="Klimaanlage2">...</automat>
Formale Sprachen
10
KB
Dokument mit festgelegtem Typ
<?xml version="1.0"?>
<!DOCTYPE automat
[
<!ELEMENT automat (zustandsmenge?, anfangszustand,
eingabemenge?, ausgabemenge?,
ueberfuehrungsfunktion, ausgabefunktion)>
<!ATTLIST automat name CDATA #REQUIRED>
<!ELEMENT zustandsmenge (zustand)+>
<!ELEMENT anfangszustand (zustand)>
<!ELEMENT zustand (#PCDATA)>
<!ELEMENT eingabemenge (eingabe)+>
<!ELEMENT eingabe (#PCDATA)>
<!ELEMENT ausgabemenge (ausgabe)+>
<!ELEMENT ausgabe (#PCDATA)>
<!ELEMENT ueberfuehrungsfunktion (delta)*>
<!ELEMENT delta (#PCDATA)>
<!ELEMENT ausgabefunktion (lambda)*>
<!ELEMENT lambda (#PCDATA)>
]
>
<automat name="Klimaanlage2">...</automat>
Aktivierung des Parser
11
Formale Sprachen
<HTML>
<HEAD>
<TITLE>Automatenbeschreibungstest</TITLE>
<SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="ONLOAD">
Document = Test.XMLDocument;
message =
"parseError.errorCode: „ + Document.parseError.errorCode + "\nl„
+ "parseError.filepos: „ + Document.parseError.filepos + "\nl„
+ "parseError.line: „ + Document.parseError.line + "\nl„
+ "parseError.linepos: „ + Document.parseError.linepos + "\nl„
+ "parseError.reason: „ + Document.parseError.reason + "\nl„
+ "parseError.srcText: „ + Document.parseError.srcText;
alert (message);
</SCRIPT>
</HEAD>
<BODY>
<XML ID="Test" SRC="Klimaanlage2.XML"></XML>
<H2>DTD Automatentest</H2>
</BODY>
</HTML>
KB
nach J. Müller: XML, Teil 4. In: LOG IN 122/123 (2003)
Korrekte Automatenbeschreibung
12
<?xml version="1.0"?>
<!DOCTYPE automat
[
<HEAD>
...
<TITLE>Automatenbeschreibungstest</TITLE>
]
<SCRIPT LANGUAGE="JavaScript" FOR="window"
> EVENT="ONLOAD">
Document = Test.XMLDocument;
<automat name="Klimaanlage">
message =
<zustandsmenge>
<zustand>off</zustand>
"parseError.errorCode: „ + Document.parseError.errorCode
+ "\nl„
<zustand>low</zustand>
+ "parseError.filepos: „ + Document.parseError.filepos + "\nl„
<zustand>high</zustand>
+ "parseError.line: „ + Document.parseError.line
+ "\nl„
</zustandsmenge>
+ "parseError.linepos: „ + Document.parseError.linepos
<anfangszustand>+ "\nl„
+ "parseError.reason: „ + Document.parseError.reason
+ "\nl„
<zustand>off</zustand>
+ "parseError.srcText: „ + Document.parseError.srcText;
</anfangszustand>
...
alert (message);
</automat>
</SCRIPT>
Formale Sprachen
<HTML>
</HEAD>
<BODY>
<XML ID="Test" SRC="Klimaanlage2.XML"></XML>
<H2>DTD Automatentest</H2>
</BODY>
</HTML>
Der Parser überprüft die Dokumentenstruktur.
KB
13
Fehlerhafte Automatenbeschreibung
<?xml version="1.0"?>
<!DOCTYPE automat
[
<HEAD>
...
<TITLE>Automatenbeschreibungstest</TITLE>
]
<SCRIPT LANGUAGE="JavaScript" FOR="window"
> EVENT="ONLOAD">
Document = Test.XMLDocument;
<automat name="Klimaanlage">
message =
<zustandsmenge>
<zustand>off</zustand>
"parseError.errorCode: „ + Document.parseError.errorCode
+ "\nl„
<zustand>low</zustand>
+ "parseError.filepos: „ + Document.parseError.filepos + "\nl„
<zustand>high</zustand>
+ "parseError.line: „ + Document.parseError.line
+ "\nl„
</zustandsmenge>
+ "parseError.linepos: „ + Document.parseError.linepos
+ "\nl„ -->
<!-- kein Anfangszustand
+ "parseError.reason: „ + Document.parseError.reason
+ "\nl„
...
+ "parseError.srcText: „ + Document.parseError.srcText;
</automat>
Formale Sprachen
<HTML>
alert (message);
</SCRIPT>
</HEAD>
<BODY>
<XML ID="Test" SRC="Klimaanlage4.XML"></XML>
<H2>DTD Automatentest</H2>
</BODY>
</HTML>
KB
Der Parser erkennt einen
Syntaxfehler.
Übersicht
Formale Sprachen
14
KB
Aus: M. Näf: Einführung in XML, DTD und XSL. www.internet-kompetenz.ch/xml/
15
Zielsetzung
Formale Sprachen
Ziel ist es, Verfahren zur präzisen Festlegung von Sprachen (wie
der Automatenbeschreibungssprache) zu entwickeln.
KB
<?xml version="1.0"?>
<!DOCTYPE automat
[
<!ELEMENT automat (zustandsmenge?, anfangszustand,
eingabemenge?, ausgabemenge?,
ueberfuehrungsfunktion, ausgabefunktion)>
<!ATTLIST automat name CDATA #REQUIRED>
<!ELEMENT zustandsmenge (zustand)+>
<!ELEMENT anfangszustand (zustand)>
<!ELEMENT zustand (#PCDATA)>
<!ELEMENT eingabemenge (eingabe)+>
...
]
>
<automat name="Klimaanlage2">...</automat>
16
Zielsetzung
Formale Sprachen
Ziel ist es, Systeme zu entwickeln, mit deren Hilfe man
entscheiden kann, ob eine „sprachliche Beschreibung“ (wie eine
Automatenbeschreibung) korrekt oder fehlerhaft ist.
KB
<?xml version="1.0"?>
<!DOCTYPE automat
[
...
]
>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high</zustand>
</zustandsmenge>
<!-- kein Anfangszustand -->
...
</automat>
Formale Sprachen
17
KB
Teil 2
Sprachbeschreibung mit Grammatiken
Formale Sprachen
18
KB
Die Sprache der Zustandsmengen
Das präzise Festlegen einer Sprache soll zunächst anhand einer
übersichtlichen, vereinfachten Teilsprache der XMLAutomatenbeschreibungssprache entwickelt werden. Wir
betrachten hierzu die Beschreibung von Zustandsmengen, die in
verkürzter Form dargestellt werden.
<zm>
<z>z0</z>
<z>z1</z>
<z>z2</z>
<z>z21</z>
<z>z3</z>
</zm>
Informelle Beschreibung
Formale Sprachen
19
<zm>
<z>z0</z>
<z>z1</z>
<z>z2</z>
<z>z21</z>
<z>z3</z>
</zm>
Regeln:
/1/ Eine Zustandsmengenbeschreibung wird durch die Tags <zm>
und </zm> eingeschlossen.
/2/ Sie enthält beliebig viele, aber mindestens einen Zustand.
/3/ Jeder Zustand wird durch die Tags <z> und </z>
eingeschlossen.
...
KB
20
Das Alphabet einer Sprache
Formale Sprachen
Jede Sprache benutzt bestimmte Zeichen, um Wörter bzw. Sätze
zu bilden. Die Menge  der zulässigen Zeichen wird Alphabet
genannt. Ein Alphabet ist somit eine endliche (geordnete) Menge
von Zeichen.
Zustandsmengenbeschreibung:
<zm><z>z0</z><z>z1</z><z>z2</z><z>z21</z><z>z3</z></zm>
Das Alphabet der Zustandsmengen-Sprache:
 = {<, >, /, a, ..., z, A, ..., Z, 0, ..., 9}
KB
Wörter über einem Alphabet
Formale Sprachen
21
Durch Hintereinanderreihung endlich vieler Zeichen aus dem
vorgegebenen Alphabet  erhält man Wörter (über dem Alphabet).
Die Menge aller möglichen Wörter über einem Alphabet  wird mit
* bezeichnet. Zu dieser Menge gehört auch das sogenannte leere
Wort , das keine Zeichen enthält.
Das Alphabet der Zustandsmengen-Sprache:
 = {<, >, /, a, ..., z, A, ..., Z, 0, ..., 9}
Wörter über diesem Alphabet:
<zm><z>z0</z><z>z1</z><z>z2</z><z>z21</z><z>z3</z></zm>
<zm><z>rotgelb</z></zm>
<a><z3
KB
Formale Sprachen
22
Eine (formale) Sprache über einem Alphabet  ist eine Teilmenge
von *.
Formale Sprachen
Wörter, die zur Zustandsmengen-Sprache gehören:
<zm><z>z0</z><z>z1</z><z>z2</z><z>z21</z><z>z3</z></zm>
<zm><z>rotgelb</z></zm>
Wörter, die nicht zur Zustandsmengen-Sprache gehören:
<a><z3
<zm><z>rotgelb<z><zm>
Problem: Festlegung aller Wörter, die zur Sprache gehören
KB
Syntaxdiagramme
23
ATagZustand
Formale Sprachen
<
z
>
/
z
>
m
>
z
m
ETagZustand
<
ATagZustandsmenge
<
z
ETagZustandsmenge
<
KB
/
>
Syntaxdiagramme
24
AlphanumerischesZeichen
Formale Sprachen
a
b
...
A
B
...
0
1
Bezeichner
AlphanumerischesZeichen
Zustand
ATagZustand
KB
Bezeichner
ETagZustand
...
25
Bestandteile von Syntaxdiagramme
AlphanumerischesZeichen
Formale Sprachen
a
b
...
A
B
...
0
1
...
Terminalsymbol
Bezeichner
AlphanumerischesZeichen
Nichtterminalsymbol
Terminalsymbole gehören zum Alphabet der Sprache.
Nichtterminalsymbole sind Variablen, die als Platzhalter für
syntaktische Einheiten fungieren.
KB
26
Übung
Formale Sprachen
Ergänzen Sie die Sprachbeschreibung um Syntaxdiagramme für
Zustandsmengen. Beachten Sie, dass eine Zustandsmenge beliebig
viele, aber mindestens einen Zustand hat.
KB
Lösung
27
Zustandsmenge
Formale Sprachen
ATagZustandsmenge
KB
Zustand
ETagZustandsmenge
28
Übersetzung in Produktionsregeln
ATagZustand
Formale Sprachen
<
KB
z
>
<ATagZustand>  '<' 'z' '>'
Übersetzung in Produktionsregeln
29
AlphanumerischesZeichen
Formale Sprachen
a
KB
b
...
A
B
<AlphanumerischesZeichen>  'a'
<AlphanumerischesZeichen>  'b'
...
...
0
1
...
30
Übersetzung in Produktionsregeln
Bezeichner
Formale Sprachen
AlphanumerischesZeichen
KB
<Bezeichner>  <AlphanumerischesZeichen>
<Bezeichner>  <AlphanumerischesZeichen> <Bezeichner>
31
Übung
Formale Sprachen
Ergänzen Sie die fehlenden Produktionsregeln.
KB
32
Lösung
<Zustand>  <ATagZustand> <Bezeichner> <ETagZustand>
Formale Sprachen
<Zustaende>  <Zustand>
KB
<Zustaende>  <Zustand> <Zustaende>
<Zustandsmenge> 
<ATagZustandsmenge> <Zustaende> <ETagZustandsmenge>
Formale Sprachen
33
KB
Grammatik
Eine Grammatik ist ein Tupel G = (T, N, P, S) bestehend aus
- einer endlichen nichtleeren Menge T von Terminalzeichen,
- einer endlichen nichtleeren Menge N von Nichtterminalzeichen,
- einer endlichen Menge P von Produktionen (Regeln) und
- einem Startsymbol S  N.
Eine Produktion (Regel) hat die Gestalt u  v.
Die linke Seite u und die rechte Seite v sind dabei Wörter über
dem Alphabet V = T  N.
Backus-Naur-Form
34
Die Backus-Naur-Form ist eine Kurzschreibweise für Produktionen.
<AlphanumerischesZeichen>  'a'
Formale Sprachen
<AlphanumerischesZeichen>  'b'
...
<AlphanumerischesZeichen> ::= 'a' | 'b' | .. | 'A' | 'B' | .. | '0' | ..
<Bezeichner>  <AlphanumerischesZeichen>
<Bezeichner>  <AlphanumerischesZeichen> <Bezeichner>
<Bezeichner> ::= <AlphanumerischesZeichen> |
<AlphanumerischesZeichen> <Bezeichner>
KB
35
Übung
Formale Sprachen
Beschreiben Sie die gesamte Grammatik der Zustandsmengensprache in Backus-Naur-Form.
KB
36
Wortproblem
Gegeben: Wort über dem Alphabet T
Formale Sprachen
Beispiel: <zm><z>z0</z></zm>
KB
Gesucht: Ableitung des Wortes mit Hilfe der Produktionen der
Grammatik ausgehend vom Startzustand
Ableitung durch Wortersetzung:
Eine Produktion u  v wird so interpretiert, dass u überall, wo es
als Teil eines Wortes auftritt, durch v ersetzt werden darf.
Worterzeugung
37
Gegeben: <zm><z>z0</z></zm>
Formale Sprachen
Gesucht: Ableitung des Wortes mit Hilfe der Produktionen
KB
Startsymbol
<Zustandsmenge> 
<ATagZustandsmenge> <Zustaende> <ETagZustandsmenge> 
'<' 'zm' '>' <Zustaende> <ETagZustandsmenge> 
'<' 'zm' '>' <Zustaende> '<' '/' 'zm' '>' 
'<' 'zm' '>' <Zustand> '<' '/' 'zm' '>' 
'<' 'zm' '>' <ATagZustand> <Bezeichner> <ETagZustand> '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' <Bezeichner> <ETagZustand> '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' <Alphan.Zeichen> <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' 'z' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' 'z' <AlphanumerischesZeichen> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' 'z' '0' '<' '/' 'z' '>' '<' '/' 'zm' '>'
Wort aus Terminalsymbolen
Übung
38
Kommentieren Sie die Ableitung, indem Sie für jeden Ersetzungsschritt die benutzte Grammatikregel (Produktion) angeben.
Formale Sprachen
<Zustandsmenge> 
<ATagZustandsmenge> <Zustaende> <ETagZustandsmenge> 
'<' 'zm' '>' <Zustaende> <ETagZustandsmenge> 
'<' 'zm' '>' <Zustaende> '<' '/' 'zm' '>' 
'<' 'zm' '>' <Zustand> '<' '/' 'zm' '>' 
'<' 'zm' '>' <ATagZustand> <Bezeichner> <ETagZustand> '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' <Bezeichner> <ETagZustand> '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' <Alphan.Zeichen> <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' 'z' <Bezeichner> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' 'z' <AlphanumerischesZeichen> '<' '/' 'z' '>' '<' '/' 'zm' '>' 
'<' 'zm' '>' '<' 'z' '>' 'z' '0' '<' '/' 'z' '>' '<' '/' 'zm' '>'
KB
Formale Sprachen
39
KB
Teil 3
Ein Werkzeug zur Sprachbeschreibung
Spracherkennung mit Werkzeugen
Formale Sprachen
40
KB
Siehe: www.devincook.com/goldparser/
Zwei-Stufen-Beschreibung
41
Oft ist eine zweistufige Beschreibung der Sprache zweckmäßig:
Zeichen:
Formale Sprachen
<, >, /, a, ..., z, A, ..., Z, 0, ..., 9
Festlegung der korrekten Token (Wörter)
Wörter / Token:
<zm>, <z>, rotgelb, gruen, ...
Festlegung der korrekten Tokenfolgen (Sätze)
Sätze / Tokenfolgen:
<zm><z>rotgelb</z></zm>, <zm></z>, ...
KB
Sprache der Token
42
Alphabet:
Formale Sprachen
 = {<, >, /, a, ..., z, A, ..., Z, 0, ..., 9}
Grammatik:
<ATagZustand> ::= '<' 'z' '>'
<ETagZustand> ::= '<' '/' 'z' '>'
<ATagZustandsmenge> ::= '<' 'z' 'm' '>'
<ETagZustandsmenge> ::= '<' '/' 'z' 'm' '>'
<AlphanumerischesZeichen> ::= 'a' | 'b' | .. | 'A' | 'B' | .. | '0' | ..
<Bezeichner> ::= <AlphanumerischesZeichen> |
<AlphanumerischesZeichen> <Bezeichner>
KB
Sprache der Tokenfolgen
43
Alphabet:
Formale Sprachen
 = {<z>, </z>, <zm>, </zm>, ..., rotgelb, ..., gruen, ...}
KB
Grammatik:
<Bezeichner> ::= ... | rotgelb | ... | gruen | ...
<Zustand> ::= '<z>' <Bezeichner> '</z>'
<Zustaende> ::= <Zustand> | <Zustand> <Zustaende>
<Zustandsmenge> ::= '<zm>' <Zustaende> '</zm>'
44
Darstellung einer Grammatik
Zwei-stufige Darstellung beim Werkzeug „GOLD Parser Builder“
Formale Sprachen
! Terminalsymbole
ATagZustand
ETagZustand
ATagZustandsmenge
ETagZustandsmenge
Bezeichner
=
=
=
=
=
Reguläre Ausdrücke
! Produktionen
"Start Symbol" = <Zustandsmenge>
<Zustand>
<Zustaende>
<Zustaende>
<Zustandsmenge>
::=
::=
::=
::=
Produktionen in BNF
KB
'<' z '>'
'<' '/' z '>'
'<' z m '>'
'<' '/' z m '>'
{Alphanumeric}+
ATagZustand Bezeichner ETagZustand
<Zustand>
<Zustand> <Zustaende>
ATagZustandsmenge <Zustaende>
ETagZustandsmenge
Formale Sprachen
45
KB
Ableitungsbaum
46
Zustandsautomat
Formale Sprachen
Zur Analyse der Terminalsymbole benutzt das Werkzeug „GOLD
Parser Builder“ einen Automaten.
KB
47
Übung
Formale Sprachen
Aufgabe 1
Testen Sie das Werkzeug am Beispiel der Zustandsmengensprache.
KB
Aufgabe 2
Erstellen Sie eine vollständige Grammatik zur Automatenbeschreibungssprache mit Hilfe des Werkzeugs.
48
Exkurs: Verknüpfung von Sprachen
X und Y seien Sprachen über dem Alphabet .
XY = {xy | xX, yY} ist die Menge aller Worte, die sich ergeben, wenn
man an ein beliebiges Wort aus X ein beliebiges Wort aus Y hängt.
Formale Sprachen
X0 = {}; X1 = X; X2 = XX; X3 = X2X = XXX; ...
X* = X0  X1  X2  X3 … ist die Menge aller Worte, die sich ergeben,
wenn man beliebig viele (auch keine) Worte aus X aneinanderhängt.
X+ = X1  X2  X3  X4 … ist die Menge aller Worte, die sich ergeben,
wenn man beliebig viele Worte, 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, ...}
KB
X+ = X1  X2  X3  X4 … = {a, b, aa, ab, ba, bb, ...}
Exkurs: Reguläre Ausdrücke
Formale Sprachen
49
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,
Beispiele: Sei  = {a, b, c}.
(a+b)*
= ({a}{b})0  ({a}{b})1  ({a}{b})2  …
= {, a, b, aa, ab, ba, ...}
a+b*c
= ({a}1  {a}2  {a}3 …) ({b}0  {b}1  {b}2 …)({c})
= {ac, aac, aaac, …, abc, aabc, aaabc, …, abbc, aabbc, aaabbc, …}
KB
= {aibjc | i >0; j  0}
50
Darstellung und Test regulärer Ausdrücke
Beispiel 1:
Formale Sprachen
! Regulärer Ausdruck
L = a[a|b]*c
"Start Symbol" = <S>
<S> ::= L
a(a+b)*c
Beispiel 2:
! Regulärer Ausdruck
L = b[a]*|[b]+
"Start Symbol" = <S>
<S> ::= L
ba*+b+
Beispiel 3:
! Regulärer Ausdruck
L = A{Letter}*n
KB
"Start Symbol" = <S>
<S> ::= L
A(a+b+...+Z)*n
51
Übung
Erstellen Sie reguläre Ausdrücke zur Beschreibung folgender
Mengen:
Formale Sprachen
(a) Die Menge aller Zeichenketten über dem Alphabet {0, 1}, die
mit 00 enden.
(b) Die Menge aller Zeichenketten über dem Alphabet {a, b}, die
mit a beginnen oder mit b enden.
(c) Die Menge aller Zeichenketten über dem Alphabet {a, b}, die
nach jedem a genau zwei b´s haben.
(d) Alle Namen über dem Standardalphabet, die mit A anfangen.
(e) Die Menge folgender Klassen: {5a, 5b, 5c, ..., 10a, 10b, 10c}.
(f) Die Menge zulässiger Zeitangaben; z. B. 12:00.
KB
Übung
52
Wir betrachten Adressen nach dem http-Protokoll mit folgendem
Aufbau:
Formale Sprachen
http://www.hostname.subdomain.....domain.topleveldomain
KB
Beispiel:
http://www.google.de
Der Einfachheit halber sollen alle Domainnamen nur aus
Buchstaben bestehen.
Entwickeln Sie eine Grammatik zur Beschreibung solcher Adressen.
Testen Sie die Grammatik.
Übung
53
Im Internet-Standarddokument (Request for Comment) RCF1945
für das HTTP-Protokoll findet man die folgende Grammatik für
erlaubte Datum-Uhrzeit-Formate.
Formale Sprachen
HTTP-date
= rfc1123-date | rfc850-date | asctime-date
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
rfc850-date = weekday "," SP date2 SP time SP "GMT"
asctime-date = wkday SP date3 SP time SP 4DIGIT
date1
= 2DIGIT SP month SP 4DIGIT
date2
= 2DIGIT "-" month "-" 2DIGIT
date3
= month SP ( 2DIGIT | ( SP 1DIGIT ))
time
= 2DIGIT ":" 2DIGIT ":" 2DIGIT
wkday
= "Mon" | "Tue" | "Wed" | "Thu" | "Fri" | "Sat" | "Sun"
weekday
= "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday" | "Saturday" | "Sunday"
month
= "Jan" | "Feb" | "Mar" | "Apr" | "May" | "Jun" | "Jul" | "Aug" | "Sep" | "Oct" | "Nov" | "Dec"
Ergänzen Sie geeignete Grammatikregeln für SP, 1DIGIT, 2DIGIT,
4DIGIT. Erzeugen Sie verschiedene korrekte Datum-UhrzeitAngaben.
KB
Formale Sprachen
54
KB
Teil 4
Spracherkennung mit Automaten
Zielsetzung
55
Ziel ist es, Spracherkennungssysteme zu entwickeln.
Formale Sprachen
Ein Spracherkennungssystem soll bei Eingabe eines beliebigen
Wortes entscheiden, ob dieses Wort zur vorgegebenen Sprache
gehört oder nicht.
KB
Wort
ja / nein
56
Vereinfachte Bezeichner
Beispiel: Das System soll vereinfachte Bezeichner erkennen:
Regeln zur Bildung vereinfachter Bezeichner
Formale Sprachen
/1/ Der Bezeichner beginnt mit einem z.
/2/ Danach kommt beliebig oft, aber mindestens einmal eine der
Ziffern 0 oder 1.
Beispiele für korrekte vereinfachte Bezeichner:
z0, z10, z01101, z000000
Beispiele für nicht-korrekte vereinfachte Bezeichner:
0z, z10z, z01a, z
KB
Erzeugende Systeme
57
Formale Sprachen
Spracherkennungsansatz: Erzeugung von Ableitungen
Alphabet:
Erzeugung von Ableitungen:
 = {z, 0, 1, a}
B
zN 
z1 #
z1N 
z10 #
z10N
...
Grammatik:
B  zN
N0
N1
N  0N
N  1N
Wort:
KB
z1001
Erzeuge systematisch
Ableitungen mit Hilfe von
Grammatikregeln und
überprüfe, ob das gegebene
Wort auf diese Weise erzeugt
werden kann.
Analysierende Systeme
58
Formale Sprachen
Spracherkennungsansatz: Zustandsbasierte Wortanalyse
Endzustand
Anfangszustand
KB
Verarbeite das Wort mit Hilfe
eines erkennenden Automaten:
Überprüfe, ob das gegebene
Wort den Automaten vom
Anfangszustand in einen
Endzustand überführt.
Erkennende Automaten
Formale Sprachen
59
Ein erkennender Automat / Akzeptor ist ein Tupel A = (Z, za, Ze, E,
) bestehend aus
- 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.
Zustandsmenge:
Z = {Z0, Z1, Z2, Z3}
Anfangszustand:
za = Z0
Endzustände:
Ze = {Z2}
Eingabemenge:
E = {z, a, 0, 1}
Überführungsfunktion: : (Z0, z)  Z1; (Z0, a)  Z3; ...
KB
60
Die Sprache eines Akzeptors
Formale Sprachen
Sei A = (Z, za, Ze, E, A, ) ein Akzeptor. Unter der Sprache L(A)
dieses Akzeptors versteht man die Menge aller Wörter über dem
Alphabet E, die den Automaten vom Anfangszustand za in einen
Endzustand aus Ze überführen.
L(A) = {z0, z1, z00, z01, z10, z11, ...}
KB
Übung
61
Formale Sprachen
Ein Akzeptor soll Zustandsbeschreibungen der folgenden Form
akzeptieren:
<z>
<z>AAA
<z>AA</z>
BB<z>
BB<z>BBBAAA
B<z>BBABB</z>
Bem.: A steht für ein beliebiges alphanumerisches Zeichen; B steht
für ein Leerzeichen (blank).
Werkzeuge: Automaton Simulator, Charon
KB
Übung
62
Ein Akzeptor soll Zahlen mit folgendem Format akzeptieren:
3.0E-12
Formale Sprachen
0.24E3
KB
...
Präzisieren Sie zunächst die Grammatik dieser Zahldarstellung.
Entwickeln Sie anschließend einen geeigneten Akzeptor.
Werkzeuge: GOLD Parser Builder, Automaton Simulator, Charon
Formale Sprachen
63
KB
Teil 5
Scanner und Parser
Formale Sprachen
64
KB
Automatenbeschreibungsübersetzer
<?xml version="1.0"?>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high</zustand>
</zustandsmenge>
...
</automat>
<?xml version="1.0"?>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high<zustand>
</zustandsmenge>
...
</automat>
Übersetzer
<?xml version="1.0"?>
<automat name="Klimaanlage">
<zustandsmenge>
<zustand>off</zustand>
<zustand>low</zustand>
<zustand>high</zustand>
</zustandsmenge>
...
</automat>
Fehler
65
Vereinfachung: Zustandsmengenübersetzer
<zm>
<z> off </z>
< z>low
</z>
<z> high</z>
<zm>
Formale Sprachen
<zm>
<z> off </z>
<z>low
</z>
<z> high</z>
</zm>
Übersetzer
<zm>
<z>off</z>
<z>low</z>
<z>high</z>
</zm>
KB
Fehler
Scanner
66
<zm>
<z> off <z>
< z>low
</z>
<z> high</z>
</zm>
Formale Sprachen
<zm>
<z> off </z>
<z>low
</z>
<z> high</z>
</zm>
KB
Erzeugt lexikal.
Einheiten
(Token)
<zm>
<z>
off
</z>
<z>
low
</z>
<z>
high
</z>
</zm>
Führt die
lexikalische
Analyse durch
Scanner
<zm>
<z>
off
<z>
!
Parser
Formale Sprachen
67
KB
<zm>
<z>
off
</z>
<z>
low
<z>
<z>
high
</z>
</zm>
<zm>
<z>
off
</z>
<z>
low
</z>
<z>
high
</z>
</zm>
Erzeugt
„Verarbeitungsprogramm“ in
Normalform
<zm>
<z>off</z>
<z>low</z>
<z>high</z>
</zm>
Führt eine
syntaktische
Analyse durch
Parser
<zm>
<z>off</z>
!
Scanner als Akzeptor
68
Formale Sprachen
<zm>
<z> off </z>
<z>low
</z>
<z> high</z>
</zm>
KB
<zm>
<z>
off
</z>
<z>
low
</z>
<z>
high
</z>
</zm>
Verarbeite jedes Zeichen des Quelltextes.
Wenn ein Endzustand verlassen wird,
dann mache aus den verarbeiteten Zeichen
ein neues Token.
Parser als Akzeptor
Formale Sprachen
69
KB
<zm>
<z>
off
</z>
<z>
low
</z>
<z>
high
</z>
</zm>
<zm>
<z>off</z>
<z>low</z>
<z>high</z>
</zm>
Verarbeite jedes Token der Tokenfolge.
Wenn ein Endzustand verlassen wird,
dann mache aus den verarbeiteten Token eine
neue Verarbeitungseinheit.
70
Auftrag
Formale Sprachen
Es sollen Programme entwickelt werden, mit deren Hilfe man
Automatenbeschreibungen (vereinfachte Zustandsmengen)
scannen bzw. parsen kann.
KB
Formale Sprachen
71
KB
Scanner-Prototyp
Scan-Automat
Tokenfolge
Quelltext
Formale Sprachen
72
KB
Klassendiagramm
Formale Sprachen
73
KB
Scan-Algorithmus
begin
automat.anfangszustand;
Token := '';
for i := 0 to Quelltext.Count-1 do
begin
zeile := Quelltext[i];
for j := 1 to length(zeile) do
begin
e := zeile[j];
aZ := automat.getZustand;
if automat.endzustand then eZ := true else eZ := false;
automat.neuerZustand(e);
nZ := automat.getZustand;
if (eZ and (nZ <> aZ)) then
begin
Tokenfolge.Add(Token);
Token := '';
end;
if e <> ' ' then Token := Token + e;
end;
end;
if automat.endzustand then Tokenfolge.Add(Token);
end;
74
Übung
Formale Sprachen
Testen Sie den Scanner. Geben Sie hierzu zunächst den
entwickelten Scan-Automaten für Zustandsmengen ein. Testen Sie
dann verschiedene korrekte und fehlerhafte
Zustandsmengenbeschreibungen.
KB
Formale Sprachen
75
KB
Parser-Prototyp
Parse-Automat
Generierter
Code
Tokenfolge
Formale Sprachen
76
KB
Klassendiagramm
Formale Sprachen
77
KB
Parse-Algorithmus
begin
automat.anfangszustand;
Code := '';
for i := 0 to Quelltext.Count-1 do
begin
Token := Quelltext[i];
aZ := automat.getZustand;
if automat.endzustand then eZ := true else eZ := false;
automat.neuerZustand(Token);
nZ := automat.getZustand;
if (eZ and (nZ <> aZ)) then
begin
Tokenfolge.Add(Code);
Code := '';
end;
Code := Code + Token;
end;
if automat.endzustand then Tokenfolge.Add(Token);
end;
78
Übung
Formale Sprachen
Testen Sie den Parser. Geben Sie hierzu zunächst den entwickelten
Parse-Automaten für Zustandsmengen ein. Testen Sie dann
verschiedene korrekte und fehlerhafte
Zustandsmengenbeschreibungen.
KB
79
Literaturhinweise
Gasper / Leiß / Spengler / Stimm: Technische und theoretische
Informatik. Bsv 1992.
Formale Sprachen
Jürgen Müller: XML. Teil 1 - 4. LOG IN 5-6 (2001), Nr. 120 (2002),
Nr. 121 (2002), Nr. 122/123 (2002).
KB
Selfhtml von Stefan Münz: http://selfhtml.teamone.de/xml/
Linksammlung von Klaus Merkert: http://hsg.regionkaiserslautern.de/faecher/inf/material/xml/index.php