20.07.2013 Aufrufe

Formale Sprachen und Automaten - Kapitel 1: Grundlagen

Formale Sprachen und Automaten - Kapitel 1: Grundlagen

Formale Sprachen und Automaten - Kapitel 1: Grundlagen

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Formale</strong> <strong>Sprachen</strong> <strong>und</strong> <strong>Automaten</strong><br />

<strong>Kapitel</strong> 1: Gr<strong>und</strong>lagen<br />

Vorlesung an der DHBW Karlsruhe<br />

Thomas Worsch<br />

Karlsruher Institut für Technologie, Fakultät für Informatik<br />

Wintersemester 2012


Ziel<br />

Einführung<br />

◮ der wichtigsten Gr<strong>und</strong>begriffe<br />

◮ für prägnantes Reden<br />

◮ der wichtigsten Notationen<br />

◮ für prägnantes Schreiben<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 2/19


1.1 Beispiel<br />

Ein Übersetzer für Java (oder C, oder . . . )<br />

◮ liest als Eingabe eine Folge von Zeichen,<br />

◮ von denen der Benutzer „verspricht“, dass sie alle aus einer<br />

gewissen Menge A stammen.<br />

(Java: Teilmenge von Unicode, C: ASCII-Zeichensatz).<br />

◮ Diese Menge ist endlich <strong>und</strong> man nennt sie auch ein Alphabet.<br />

Ein Programm ist eine Zeichenfolge mit der Eigenschaft syntaktisch<br />

korrekt zu sein.<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 3/19


1.2 Definition<br />

◮ Alphabet: endliche Menge von Zeichen.<br />

◮ Wort über A: Folge von Zeichen aus A.<br />

◮ Länge |w| eines Wortes w:<br />

Anzahl Zeichen, aus denen es besteht.<br />

◮ Das leere Wort besteht aus 0 Zeichen: || = 0.<br />

Damit man es trotzdem sieht, schreibt man ε, also |ε| = 0.<br />

◮ Menge aller Wörter über einem Alphabet A schreiben wir A ∗ .<br />

◮ <strong>Formale</strong> Sprache über A:<br />

beliebige Teilmenge L ⊆ A ∗ von Wörtern<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 4/19


1.2 Definition<br />

◮ Alphabet: endliche Menge von Zeichen.<br />

◮ Wort über A: Folge von Zeichen aus A.<br />

◮ Länge |w| eines Wortes w:<br />

Anzahl Zeichen, aus denen es besteht.<br />

◮ Das leere Wort besteht aus 0 Zeichen: || = 0.<br />

Damit man es trotzdem sieht, schreibt man ε, also |ε| = 0.<br />

Aber ε ist kein Symbol aus A !<br />

◮ Menge aller Wörter über einem Alphabet A schreiben wir A ∗ .<br />

◮ <strong>Formale</strong> Sprache über A:<br />

beliebige Teilmenge L ⊆ A ∗ von Wörtern<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 4/19


Beachte: Benutzung des Wortes „Wort“<br />

◮ eine beliebige Folge von Zeichen aus dem benutzten Alphabet<br />

◮ auch wenn das Alphabet das Leerzeichen enthält<br />

◮ Ein Java-Programm ist ein Wort (in diesem Sinne).<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 5/19


1.3 Definition (Konkatenation)<br />

Es sei A ein beliebiges Alphabet.<br />

◮ Für zwei Wörter w1, w2 ∈ A ∗ mit<br />

w1 = a1 · · · ak, mit a1, . . . , ak ∈ A <strong>und</strong><br />

w2 = b1 · · · bℓ, mit b1, . . . , bℓ ∈ A ist ihre<br />

Konkatenation w1 · w2 = w1w2 = a1 · · · akb1 · · · bℓ.<br />

◮ Für das leere Wort gilt: w · ε = w = ε · w.<br />

◮ Die Potenzen eines Wortes w ∈ A ∗ sind so definiert:<br />

w 0 = ε<br />

w k+1 = w k w für alle k ∈ N0<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 6/19


1.4 Beispiele<br />

◮ 00 · 10 = 0010, aber 10 · 00 = 1000.<br />

◮ Die Konkatenation von Wörtern ist also nicht kommutativ.<br />

◮ w 1 = w 0+1 = w 0 · w = ε · w = w<br />

◮ w 2 = w 1+1 = w 1 · w = w · w = ww<br />

◮ 0 5 = 00000<br />

◮ 0 3 1 3 = 000111<br />

01 3 = 0111<br />

(01) 3 = 010101<br />

◮ (110101101) 0 = ε<br />

◮ Für alle k ∈ N0 ist ε k = ε.<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 7/19


1.5 Bemerkung<br />

◮ Für alle Wörter w1, w2 ∈ A ∗ gilt: |w1w2| = |w1| + |w2|.<br />

◮ Für alle k ∈ N0 ist daher |w k | = k|w|.<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 8/19


Eingabealphabete<br />

◮ In unseren Beispiele meist {0, 1} oder {a, b} o.ä.<br />

◮ Bei Programmiersprachen: oft ASCII oder Unicode oder . . .<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 9/19


1.6 Definition (Produkte auf <strong>Sprachen</strong>)<br />

Für formale <strong>Sprachen</strong> L1, L2, L ⊂ A ∗ definiert man:<br />

◮ Die Konkatenation oder das Produkt zweier <strong>Sprachen</strong><br />

L1 · L2 = L1L2 = {w1w2 | w1 ∈ L1 ∧ w2 ∈ L2}<br />

◮ Die Potenzen einer Sprache L sind so definiert:<br />

L 0 = {ε}<br />

L k+1 = L k L für alle k ∈ N<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 10/19


1.7 Beispiele<br />

◮ {01, 1} · {000, 01} = {01000, 0101, 1000, 101}<br />

◮ {010, 11} 2 = {010010, 01011, 11010, 1111}<br />

◮ {0, 1} 1 = {0, 1}<br />

◮ {0, 1} 2 = {00, 01, 10, 11}<br />

◮ {0, 1} 3 = {000, 001, 010, 011, 100, 101, 110, 111}<br />

◮ A k = w ∈ A ∗ |w| = k <br />

◮ A ∗ = A 0 ∪ A 1 ∪ A 2 ∪ A 3 ∪ · · ·<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 11/19


1.8 Bemerkung<br />

Bei der Konkatenation gilt insbesondere:<br />

◮<br />

◮ analog: L · {ε} = L.<br />

{ε} · L = {w1w2 | w1 ∈ {ε} ∧ w2 ∈ L}<br />

= {w1w2 | w1 = ε ∧ w2 ∈ L}<br />

= {εw2 | w2 ∈ L}<br />

= {w2 | w2 ∈ L}<br />

= L<br />

◮ Wichtig: Die formale Sprache {ε} ist nicht die leere Menge,<br />

sondern eine Menge, die genau ein Element enthält.<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 12/19


1.9 Definition<br />

Der ε-freie Konkatenationsabschluss L + einer formalen Sprache L<br />

<strong>und</strong> der Konkatenationsabschluss L ∗ von L sind so definiert:<br />

L + =<br />

L ∗ =<br />

∞<br />

L k<br />

k=1<br />

∞<br />

k=0<br />

L k = L 0 ∪ L + = {ε} ∪ L +<br />

◮ Das ist konsistent mit A ∗ wie wir es schon definiert haben!<br />

◮ L ∗ = L 0 ∪ L 1 ∪ L 2 ∪ L 3 ∪ · · ·<br />

◮ L + = L 1 ∪ L 2 ∪ L 3 ∪ · · ·<br />

◮ Der ∗ heißt auch Kleene-Operator oder Kleene-Stern.<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 13/19


1.10 Bemerkung<br />

◮ L + ist die Menge aller Wörter, die man als Produkt von einem<br />

oder mehreren Wörtern aus L schreiben kann.<br />

◮ Beachte: Auch in L + kann schon ε enthalten sein,<br />

nämlich dann, wenn ε ∈ L ist.<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 14/19


1.11 Beispiel<br />

◮ Die Menge der syntaktisch korrekten Java-Programme ist eine<br />

formale Sprache LJava ⊂ A ∗ über dem Alphabet<br />

A = {a, . . . , z, A, . . . , Z, +, −, ∗, . . .}.<br />

◮ Ein Java-Übersetzer muss unter anderem überprüfen, ob eine<br />

Eingabezeichenkette ein syntaktisch korrektes Java-Programm<br />

ist oder nicht.<br />

◮ Mit anderen Worten muss ein Übersetzer für jedes w ∈ A ∗<br />

feststellen können, ob w ∈ LJava ist oder nicht<br />

◮ <strong>und</strong> je nachdem dann verschiedene Aktionen durchführen.<br />

Gr<strong>und</strong>lagen Zeichen, Alphabete, Wörter, <strong>Sprachen</strong> 15/19


Probleme bei Programmiersprachen<br />

◮ Wie spezifiziert man (präzise), welche Zeichenfolgen<br />

syntaktisch korrekte Java-Programme sind?<br />

◮ Wie kann z. B. ein Algorithmus aussehen, der überprüft, ob die<br />

Eingabe ein syntaktisch korrektes Java-Programm ist?<br />

Gr<strong>und</strong>lagen „Verarbeitung“ formaler <strong>Sprachen</strong> 16/19


Probleme bei formalen <strong>Sprachen</strong><br />

Verallgemeinert auf beliebige formale <strong>Sprachen</strong>:<br />

◮ Wie spezifiziert man eine formale Sprache?<br />

◮ Inwieweit kann man Algorithmen angeben, die für<br />

Eingabewörter entscheiden, ob sie zu einer vorher spezifizierten<br />

formalen Sprache gehören?<br />

Ist man erst einmal so weit, dann ergeben sich als weitere Fragen:<br />

◮ Kann man den Entscheidungsalgorithmus womöglich<br />

automatisch aus der Spezifikation der formalen <strong>Sprachen</strong><br />

erzeugen?<br />

◮ Gibt es vielleicht Teilklassen (besonders „einfacher“) formaler<br />

<strong>Sprachen</strong>, für die gewisse besonders „schöne“ Spezifizierungs<strong>und</strong><br />

Erkennungsmethoden benutzt werden können?<br />

Gr<strong>und</strong>lagen „Verarbeitung“ formaler <strong>Sprachen</strong> 17/19


Lösungsansätze<br />

◮ Die Entscheidung über die Zugehörigkeit eines Wortes zu einer<br />

formalen Sprache kann manchmal durch Angabe eines<br />

Algorithmus in irgendeiner gängigen Programmiersprache<br />

beschrieben werden.<br />

◮ Für spezielle Klassen formaler <strong>Sprachen</strong> kommt man mit<br />

Algorithmen einer bestimmten speziellen einfachen Struktur<br />

aus.<br />

◮ Übliche Darstellung: gewisse Sorten von <strong>Automaten</strong>.<br />

◮ Typisch: eine Kontrolleinheit (sozusagen mit einem fest<br />

verdrahteten Programm), die auf einen (Daten-)Speicher<br />

zugreifen kann.<br />

◮ Unterschiede insbesondere bei der Speichergröße <strong>und</strong> bei der<br />

Art der möglichen Speicherzugriffe.<br />

◮ Je nach „Kompliziertheit“ der formalen Sprache braucht man<br />

unterschiedlich „mächtige“ <strong>Automaten</strong> für die Erkennung.<br />

Gr<strong>und</strong>lagen „Verarbeitung“ formaler <strong>Sprachen</strong> 18/19


Vorschau<br />

◮ Chomsky-Hierarchie: unterscheide Typ-3-, Typ-2-, Typ-1- <strong>und</strong><br />

Typ-0-<strong>Sprachen</strong> (mit zunehmendem „Schwierigkeitsgrad“).<br />

◮ Schwergewicht auf<br />

◮ regulären <strong>Sprachen</strong> (Typ 3) <strong>und</strong><br />

◮ kontextfreien <strong>Sprachen</strong> (Typ 2)<br />

da z. B. im Übersetzerbau von Bedeutung.<br />

◮ Typ-1- <strong>und</strong> Typ-0-<strong>Sprachen</strong> <strong>und</strong> noch „kompliziertere“ werden<br />

nur kurz abgehandelt.<br />

◮ Regular Expressions<br />

◮ Syntaxanalyse in einfacher Form<br />

Gr<strong>und</strong>lagen Vorschau auf die Vorlesung 19/19

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!