Automaten und Formale Sprachen“ alias ” Theoretische Informatik ...

ti.inf.uni.due.de

Automaten und Formale Sprachen“ alias ” Theoretische Informatik ...

Automaten und Formale Sprachen“


alias

Theoretische Informatik


Sommersemester 2013

Dr. Sander Bruggink

Übungsleitung: Jan Stückrath

Sander Bruggink Automaten und Formale Sprachen 1


Reguläre Sprachen

Kleine Zusammenfassung

Vor- und Nachteile der Formalismen:

Reguläre Grammatiken

schaffen die Verbindung zur Chomsky-Hierarchie

werden zur Erzeugung von Sprachen eingesetzt.

nichtdeterministisch → weniger gut dazu geeignet, um zu entscheiden,

ob sich ein bestimmtes Wort in der Sprache befindet.

NFAs

erlauben oft kleine, kompakte Darstellungen von Sprachen

haben intuitive, graphische Notation

nichtdeterministisch → weniger gut dazu geeignet, um zu entscheiden,

ob sich ein bestimmtes Wort in der Sprache befindet.

Sander Bruggink Automaten und Formale Sprachen 113


Reguläre Sprachen

Kleine Zusammenfassung

Wir haben verschiedene Modelle zur Beschreibung regulärer Sprachen

kennengelernt:

DFAs

können gegenüber äquivalenten NFAs exponentiell größer werden

erlauben eine effiziente Lösung des Wortproblems (einfach den

Übergängen des Automaten nachlaufen und überprüfen, ob ein

Endzustand erreicht wird)

Alle Modelle benötigen jedoch relativ viel Schreibaufwand und Platz für

die Notation. Gesucht wird also eine kompaktere Repräsentation:

sogenannte reguläre Ausdrücke.

Sander Bruggink Automaten und Formale Sprachen 114


Reguläre Sprachen

Reguläre Ausdrücke

Reguläre Ausdrücke

Regulärer Ausdruck

Ein regulärer Ausdruck (englisch: regular expression) ist folgendermaßen

induktiv definiert:

∅, ε und a (wobei a ∈ Σ) sind reguläre Ausdrücke;

wenn α und β reguläre Ausdrücke sind, dann sind auch

(α | β),

(αβ),

(α ∗ )

reguläre Ausdrücke;

alles, was nicht durch die obigen Regeln erzeugt werden kann, ist kein

regulärer Ausdruck.

Bemerkung: Statt (α | β) wird oft auch (α + β) geschrieben.

Sander Bruggink Automaten und Formale Sprachen 115


Reguläre Sprachen

Reguläre Ausdrücke

Reguläre Ausdrücke

Nach der Festlegung der Syntax regulärer Ausdrücke, müssen wir auch

deren Bedeutung festlegen, d.h., welcher reguläre Ausdruck steht für

welche Sprache?

Sprache eines regulären Ausdrucks

L(∅) = ∅

L(ε) = {ε}

L(a) = {a}

L(α | β) = L(α) ∪ L(β)

L(αβ) = L(α)L(β), wobei

L 1 L 2 = {w 1 w 2 | w 1 ∈ L 1 , w 2 ∈ L 2 } für

zwei Sprachen L 1 , L 2 .

L((α) ∗ ) = (L(α)) ∗ , wobei

L ∗ = {w 1 . . . w n | n ∈ N 0 , w i ∈ L} für

eine Sprache L

Sander Bruggink Automaten und Formale Sprachen 116


Reguläre Sprachen

Reguläre Ausdrücke

Reguläre Ausdrücke

Sei Σ = {a, b, c}

α 1 = (ab | ba)

α 2 = (ab | ba) ∗

α 3 = (ab | ba)c ∗

α 4 = (a | b | c) ∗ abc(a | b | c) ∗

L 5 = Sprache aller Wörter, die mit a beginnen und mit bb enden

L 6 = Sprache aller Wörter, die gerade viele a’s enthalten

Sander Bruggink Automaten und Formale Sprachen 117


Reguläre Ausdrücke

Reguläre Sprachen

Reguläre Ausdrücke

Reguläre Grammatik

DFA

NFA

Regulärer Ausdruck

Sander Bruggink Automaten und Formale Sprachen 118


Reguläre Sprachen

Reguläre Ausdrücke

Regulärer Ausdrücke → NFA

Reguläre Ausdrücke → NFAs

Zu jedem regulären Ausdruck γ gibt es einen NFA M mit L(γ) = T (M).

Beweis durch Induktion über den Aufbau von γ.

Sander Bruggink Automaten und Formale Sprachen 119


Reguläre Sprachen

Reguläre Ausdrücke

Reguläre Ausdrücke → NFAs

Reguläre Ausdrücke → NFAs

Zu jedem regulären Ausdruck γ gibt es einen NFA M mit L(γ) = T (M).

Beweis durch Induktion über den Aufbau von γ.

Induktionsanfang: Für γ = ∅, γ = ε und γ = a gibt es offensichtlich

entsprechende Automaten:

z z z

a

1 z 2

Sander Bruggink Automaten und Formale Sprachen 120


Reguläre Sprachen

Reguläre Ausdrücke

Regulärer Ausdruck → NFA

Induktionschritt

Sei γ ein beliebiger, zusammengesetzter, regulärer Ausdruck.

Nach Definition bedeutet das, dass γ eine der folgenden Formen hat:

γ = α | β

γ = αβ

γ = α ∗

wobei α und β kürzere (und damit kleinere) reguläre Ausdrücke sind. Wir

können also annehmen, dass es für α und β schon NFAs M α und M β , gibt,

so dass L(α) = T (M α ) und L(β) = T (M β ).

Sander Bruggink Automaten und Formale Sprachen 121


Reguläre Sprachen

Reguläre Ausdrücke

Regulärer Ausdruck → NFA

Fall 1: Sei γ = (α | β).

Es M α und M β mit T (M α ) = L(α) und

T (M β ) = L(β). Wir bauen M mit

T (M) = L(α | β).

M hat als Zustände die Vereinigung

beider Zustandsmengen. Ebenso

ergeben sich die Startzustände als

Vereinigung der Startzustandsmengen

und die Endzustände als Vereinigung

der Endzustandsmengen.

Alle Übergänge von M α bzw. M β

bleiben erhalten.

S α E α

S β E β

M α

M β

Dann gilt

T (M) = T (M α ) ∪ T (M β ) = L(α) ∪ L(β)

Sander Bruggink Automaten und Formale Sprachen 122


Reguläre Sprachen

Regulärer Ausdruck → NFA

Reguläre Ausdrücke

Fall 2: Sei γ = αβ.

S α E α S β E β

a

a

M α

a

neu!

M β

Es gilt T (M) = T (M α )T (M β ) = L(α)L(β)

Sander Bruggink Automaten und Formale Sprachen 123


Reguläre Sprachen

Reguläre Ausdrücke

Regulärer Ausdruck → NFA

Fall 2: Sei γ = αβ.

Dann gibt es Automaten M α und M β mit T (M α ) = L(α) und

T (M β ) = L(β). Wir schalten diese Automaten nun wie folgt

hintereinander zu einem Automaten M:

M hat als Zustände die Vereinigung beider Zustandsmengen, die

gleichen Startzustände wie M α und die gleichen Endzustände wie M β .

(Falls ε ∈ L(α), so sind auch die Startzustände von M β Startzustände

von M.)

Alle Übergänge von M α bzw. M β bleiben erhalten.

Alle Zustände von M α , die einen Pfeil zu einem Endzustand von M α

haben, erhalten zusätzlich genauso beschriftete Pfeile zu allen

Startzuständen von M β .

Sander Bruggink Automaten und Formale Sprachen 124


Reguläre Sprachen

Regulärer Ausdruck → NFA

Reguläre Ausdrücke

Fall 3: Sei nun γ = (α) ∗ .

S α

E α

a

a

M α

a

Es gilt T (M) = (T (M α )) ∗ = (L(α)) ∗ .

evtl. zusätzl. Zustand

Sander Bruggink Automaten und Formale Sprachen 125


Reguläre Sprachen

Reguläre Ausdrücke

Regulärer Ausdruck → NFA

Fall 3: Sei nun γ = (α) ∗ .

Dann gibt es einen Automaten M α mit T (M α ) = L(α). Wir bauen aus

diesem Automaten nun wie folgt einen Automaten M:

Alle Zustände, Start- und Endzustände sowie Übergänge bleiben

erhalten.

Zusätzlich erhalten alle Zustände, die einen Pfeil zu einem

Endzustand von M α haben, genauso beschriftete Pfeile zu allen

Startzuständen von M α (Rückkopplung).

Falls ε ∉ T (M α ), so gibt es einen weiteren Zustand, der sowohl Startals

auch Endzustand ist. (Damit auch das leere Wort erkannt wird.)

Sander Bruggink Automaten und Formale Sprachen 126


Reguläre Ausdrücke

Reguläre Sprachen

Reguläre Ausdrücke

Reguläre Grammatik

DFA

NFA

Regulärer Ausdruck

Sander Bruggink Automaten und Formale Sprachen 127


Reguläre Sprachen

Reguläre Ausdrücke

NFA → Regulärer Ausdruck

NFAs → Reguläre Ausdrücke

Zu jedem NFA M gibt es einen regulären Ausdruck γ mit T (M) = L(γ).

Sander Bruggink Automaten und Formale Sprachen 128


Reguläre Sprachen

NFA → Regulärer Ausdruck

Reguläre Ausdrücke

Wir verwenden das folgende Zustandseliminations-Verfahren, das einen

NFA M in einen regulären Ausdruck umwandelt. Dabei erhält man als

Zwischenschritte Automaten, deren Übergänge nicht mit

Alphabetsymbolen, sondern mit regulären Ausdrücken beschriftet sind.

z

α

1 z 2

Sander Bruggink Automaten und Formale Sprachen 129


Reguläre Sprachen

NFA → Regulärer Ausdruck

Reguläre Ausdrücke

1. Schritt

Zunächst führen wir einen neuen Startzustand und einen neuen

Endzustand ein und verbinden die bisherigen Start- bzw. Endzustände mit

den neuen Zuständen durch Kanten, die mit dem regulären Ausdruck ε

beschriftet sind.

ε

ε

.

S

E

.

ε

ε

Sander Bruggink Automaten und Formale Sprachen 130


Reguläre Sprachen

NFA → Regulärer Ausdruck

Reguläre Ausdrücke

Jetzt wenden wir (nichtdeterministisch) Transformations-Regeln an, die

den Automaten kleiner machen (dabei sorgen die Regeln dafür, dass der

kleinere Automat noch immer die selbe Sprache akzeptiert).

Am Ende gibt es nur noch den Start- und Endzustand, die mit einem Pfeil

verbunden sind (und evtl. noch zusätzliche Sackgassen). Der reguläre

Ausdruck, mit dem dieser Pfeil beschriftet ist, beschreibt nun dieselbe

Sprache wie der ursprüngliche NFA.

γ

z 1 z 2

Sander Bruggink Automaten und Formale Sprachen 131


Reguläre Sprachen

Reguläre Ausdrücke

NFA → Regulärer Ausdruck

Regel V: Zwei parallel verlaufende Pfeile mit den Beschriftungen α und β

können zu einer einzigen Transition mit der Beschriftung (α | β)

verschmolzen werden.

α

z 1 z 2

(α | β)

⇒ z 1 z 2

β

Gleiches gilt im Fall, wenn ein Zustand zwei Schleifen besitzt.

α z β ⇒ z (α | β)

Sander Bruggink Automaten und Formale Sprachen 132


Reguläre Sprachen

NFA → Regulärer Ausdruck

Reguläre Ausdrücke

Regel S: Schleifen werden entfernt, indem man ihre Beschriftung α (mit

einem ∗ versieht) mit auf die nachfolgenden Kanten setzt.

β 1

x 1

(α) ∗ β 1

x 1

α

z

.

⇒ z

β n

x n

(α) ∗ β n

.

x n

Dies ist aber nur zulässig, wenn es sich dabei um die einzige Schleife des

Zustands handelt.

Sander Bruggink Automaten und Formale Sprachen 133


Reguläre Sprachen

NFA → Regulärer Ausdruck

Reguläre Ausdrücke

Regel E: Ein Zustand z wird eliminiert, indem man die Zustände, von

denen aus Kanten nach z hineinführen, und Zustände, in die Kanten von z

aus hineinführen, geeignet miteinander verbindet.

x 1

y 1

α 1 β 1

. z .

α n β m

x n

y m


x 1

.

x n

α 1 β 1

α n β 1

α 1 β m

α n β m

y 1

.

y m

Sander Bruggink Automaten und Formale Sprachen 134


Reguläre Sprachen

Reguläre Ausdrücke

NFA → Regulärer Ausdruck

Die Anwendung von Regel E ist nur zulässig, wenn:

sich keine Schleife am zu entfernenden Zustand z befindet und

es mindestens eine nach z hineinführende und eine aus z

herausführende Kante gibt.

Sander Bruggink Automaten und Formale Sprachen 135


Reguläre Sprachen

NFA → Regulärer Ausdruck

Reguläre Ausdrücke

Sobald keine Regel mehr anwendbar ist, haben wir im Allgemeinen

folgende Situation (und evtl. zusätzliche Sackgassen):

γ

z 1 z 2

Dann ist γ der gesuchte reguläre Ausdruck.

Falls es keine Kante zwischen Anfangs- und Endzustand gibt γ = ∅.

Sander Bruggink Automaten und Formale Sprachen 136


Reguläre Sprachen

Reguläre Ausdrücke

Reguläre Ausdrücke

Wozu sind reguläre Ausdrücke in der Praxis nützlich?

Suchen und Ersetzen in Editoren

(Tools: vi, emacs, . . . )

Pattern-Matching und Verarbeitung großer Texte und Datenmengen,

z.B. beim Data-Mining

(Tools: grep, sed, awk, perl, . . . )

Übersetzung von Programmiersprachen:

Lexikalische Analyse – Umwandlung einer Folge von Zeichen (das

Programm) in eine Folge von Tokens, in der bereits die

Schlüsselwörter, Bezeichner, Daten, etc. identifiziert sind.

(Tools: lex, flex, . . . )

Sander Bruggink Automaten und Formale Sprachen 137

Weitere Magazine dieses Users
Ähnliche Magazine