Formale Sprachen und endliche Automaten

Werbung
Formale Sprachen und endliche Automaten
Formale Sprachen
Definition: 1 (Alphabet) Ein Alphabet Σ ist eine endliche, nichtleere
Menge von Zeichen oder Symbolen. Ein Wort über dem Alphabet Σ ist eine endliche Zeichenfolge w = (a1 , . . . , an ) mit n ≥ 0 und ai ∈ Σ für alle
i = 1, . . . , n. Hierbei bezeichnet n die Länge von w, geschrieben |w|.
Das Wort () heißt leeres Wort. Wir schreiben a1 . . . an statt (a1 , . . . , an ) und
ε statt ().
Beispiel: 1 (Alphabete)
• Σ1 = {1}
• Σ2 = {0, 1}
• Σ3 = {0, . . . , 9}
• Σ4 = {a, . . . , z, A, . . . , Z}
Definition: 2 (Wortmengen) Sei Σ ein beliebiges Alphabet. Dann definieren wir:
• Σn = {a1 . . . an | ai ∈ Σ für i = 1, . . . , n}
S
• Σ∗ = n≥0 Σn
S
• Σ+ = n≥1 Σn = Σ∗ \ {ε}
Σn enthält folglich alle Wörter der Länge n, die über dem Alphabet Σ gebildet
werden können. Σ∗ enthält alle Wörter über Σ, während Σ+ alle Wörter über
Σ mit Ausnahme des leeren Wortes enthält.
Definition: 3 (Konkatenation) Sei Σ ein beliebiges Alphabet und seien
v = a1 . . . an und w = b1 . . . bm Wörter über Σ. Dann ist die Konkatenation
von v und w definiert durch
v ◦ w = a1 . . . an b1 . . . bm .
Statt v ◦ w schreiben wir kurz vw.
Definition: 4 (Formale Sprache) Eine Sprache oder formale Sprache über
einem Alphabet Σ ist eine beliebige Teilmenge L ⊆ Σ∗ .
Beispiel: 2 (Formale Sprachen)
• L1 = ∅
• L2 = Σ∗
• L3 = {ε}
• L4 = Menge aller Darstellungen von natürlichen Zahlen
• L5 = Menge aller Java-Programme
• L6 = Menge aller englischen Sätze
Definition: 5 Sei Σ ein beliebiges Alphabet und seien L, L1 , L2 ⊆ Σ∗ Sprachen über Σ. Dann sei
• L1 ∪ L2 = {w | w ∈ L1 ∨ w ∈ L2 } die Vereinigung von L1 und L2 ,
• L1 ∩ L2 = {w | w ∈ L1 ∧ w ∈ L2 } der Schnitt von L1 und L2 ,
• L1 \ L2 = {w ∈ L1 | w 6∈ L2 } die Differenz von L1 und L2 ,
• L̄ = Σ∗ \ L das Komplement von L, und
• L1 ◦ L2 = {vw | v ∈ L1 ∧ w ∈ L2 } die Konkatenation von L1 und L2 .
Statt L1 ◦ L2 schreiben wir wieder kurz L1 L2 .
Definition: 6 Sei L ⊆ Σ∗ eine formale Sprache und n ∈ N. Dann ist die
n-te Potenz Ln von L induktiv definiert durch
L0 = {ε}
Ln+1 = LLn .
S
S
Weiterhin seien L∗ = n≥0 Ln und L+ = n≥1 Ln .
L∗ wird üblicherweise als Kleene- oder Sternabschluss von L bezeichnet.
Definition: 7 Sei Σ ein Alphabet. Die Menge aller regulären Sprachen über
Σ ist induktiv definiert durch:
• Jede endliche Menge L ⊆ Σ∗ ist regulär.
• Sind L1 , L2 ⊆ Σ∗ regulär, so auch L1 ∪ L2 und L1 ◦ L2 .
• Ist L ⊆ Σ∗ regulär, so auch L∗ .
Eine Sprache L ist folglich genau dann regulär, wenn sie sich durch wiederholte Anwendung der Operatoren ∪, ◦ und ∗ aus endlichen Sprachen konstruieren läßt. Beispiele für reguläre Sprachen sind:
• Die Menge aller Dezimaldarstellungen natürlicher Zahlen:
Lnat = {1, . . . , 9} ◦ {0, . . . , 9}∗
• Die Menge aller Dezimaldarstellungen ganzer Zahlen:
Lint = {−, ε} ◦ Lnat
• Die Menge aller dezimalen Festpunktzahlen:
Lfix = (Lint ◦ {.}) ∪ ({.} ◦ Lnat ) ∪ (Lint ◦ {.} ◦ Lnat )
• Die Menge aller dezimalen Fließpunktzahlen:
Lfloat = (Lint ◦ {e, E} ◦ Lint ) ∪ (Lfix ◦ ({ε} ∪ ({e, E} ◦ Lint )))
Derartige Mengenausdrücke sind gut lesbare Beschreibungen für reguläre
Sprachen, allerdings für die praktische Anwendung nicht wirklich tauglich.
Hier geht es vielmehr darum einerseits eine kompakte, einfach zu verarbeitende Beschreibung für eine reguläre Sprache zu haben und andererseits darum
algorithmisch zu entscheiden, ob ein Wort Element einer regulären Sprache
ist. Ersteres leisten die sogenannten regulären Ausdrücke, letzteres spezielle
Automatenmodelle, die sogenannten endlichen Automaten.
Endliche Automaten
Ein endlicher Automat ist eine Maschine, welche nur endlich viele verschiedene Zustände annehmen kann. Unter diesen Zuständen befinden sich einerseits Startzustände, mit denen die Abarbeitung der Maschine beginnt, und
andererseits Endzutände, in denen eine erfolgreiche Abarbeitung endet. Die
Arbeitsweise eines endlichen Automaten läßt sich intuitiv wie folgt beschreiben:
• Der Automat erhält als Eingabe ein Wort w.
• Zu Beginn befindet er sich in einem Startzustand.
• Er liest w zeichenweise von links nach rechts, wobei jedes Zeichen einen
Zustandsübergang bewirkt.
• Befindet er sich nach Abarbeitung von w in einem Endzustand, so wird
w akzeptiert, anderenfalls wird w abgelehnt.
Ein endlicher Automat wird demzufolge dazu benutzt, die Zugehörigkeit eines
Wortes w zu einer (regulären) Sprache L zu überprüfen.
Definition: 8 Ein deterministischer endlicher Automat (DEA) ist ein Quintupel A = (Σ, Q, s, F, δ) mit:
• Σ ist ein Alphabet.
• Q ist eine endliche Menge, deren Elemente wir Zustände nennen.
• s ∈ Q ist der sogenannte Startzustand.
• F ⊆ Q ist die Menge der sogenannten Endzustände oder akzeptierenden Zustände.
• δ : Q × Σ → Q ist die sogenannte Übergangsfunktion.
Eine Konfiguration für A ist ein Paar (q, w) ∈ Q × Σ∗ . Auf der Menge aller
Konfigurationen definiert man die Übergangsschrittrelation `A durch
(p, aw) `A (q, w) ⇔ δ(p, a) = q,
wobei p, q ∈ Q, a ∈ Σ und w ∈ Σ∗ . Die von A akzeptierte Sprache L(A) ist
definiert durch
L(A) = {w ∈ Σ∗ | ∃q ∈ F. (s, w) `∗A (q, ε)},
wobei `∗A den reflexiven, transitiven Abschluss von `A bezeichnet.
Definition: 9 Ein nichtdeterministischer endlicher Automat (NDEA) ist
ein Quintupel A = (Σ, Q, S, F, ∆) mit:
• Σ, Q, F wie beim DEA.
• S ist eine Menge von Startzuständen.
• ∆ ⊆ Q × Σ × Q ist die sogenannte Übergangsrelation.
Die Übergangsschrittrelation ist analog zum DEA definiert durch
(p, aw) `A (q, w) ⇔ (p, a, q) ∈ ∆,
wobei p, q ∈ Q, a ∈ Σ und w ∈ Σ∗ , und die von A akzeptierte Sprache L(A)
durch
L(A) = {w ∈ Σ∗ | ∃p ∈ S, q ∈ F. (p, w) `∗A (q, ε)}
Definition: 10 Ein nichtdeterministischer endlicher Automat mit ε-Übergängen
(ε-NDEA) ist ein Quintupel A = (Σ, Q, S, F, ∆) mit:
• Σ, Q, S, F wie beim NDEA.
• ∆ ⊆ Q × (Σ ∪ {ε}) × Q.
`A und L(A) sind wie beim NDEA definiert, mit dem einzigen Unterschied,
dass a ∈ Σ ∪ {ε} statt a ∈ Σ zugelassen ist.
Definition: 11 (Potenzautomat) Sei A = (Σ, Q, S, F, ∆) ein NDEA. Der
Potenzautomat zu A ist definiert als der DEA A0 = (Σ, Q0 , s0 , F 0 , δ) mit
• Q0 = ℘ (Q), d.h. die Potenzmenge von Q,
• s0 = S,
• F 0 = {P ⊆ Q | P ∩ F 6= ∅}, und
• δ : ℘ (Q) × Σ → ℘ (Q), (P, a) 7→ {q ∈ Q | ∃p ∈ P. (p, a, q) ∈ ∆}.
Satz 1 Eine formale Sprache L ist genau dann regulär, wenn ein endlicher
Automat A existiert, mit L(A) = L.
Reguläre Ausdrücke
Die endlichen Automaten stellen eine effiziente Möglichkeit dar, algorithmisch zu überprüfen, ob ein Wort Element einer regulären Sprache ist. Allerdings sind sie ebenso wie die Mengenausdrücke ungeeignet als kompakte
Darstellung für reguläre Sprachen (insb. bei der Eingabe für den Scannergenerator). Hier werden stattdessen reguläre Ausdrücke verwendet.
Definition: 12 (Reguläre Ausdrücke) Sei Σ ein beliebiges Alphabet. Die
Menge Reg(Σ) aller regulären Ausdrücke α, β, . . . über Σ ist induktiv definiert
durch:
• ∅ und ε sind reguläre Ausdrücke.
• Jedes Zeichen a ∈ Σ ist bereits ein regulärer Ausdruck.
• Sind α, β reguläre Ausdrücke, so auch (α|β), (α · β) und (α∗ ).
In regulären Ausdrücken dürfen Klammern entfallen nach folgenden Regeln:
• “·” bindet stärker als “|” und “∗ ” bindet am stärksten.
• “·” und “|” sind linksassoziativ.
Statt α·β schreibt man kurz αβ. Darüberhinaus verwendet man in der Praxis
erweiterte reguläre Ausdrücke, da die bisherige Darstellung zu umständlich
ist. Das bedeutet, man lässt folgende Abkürzungen zu:
• α+ = α · α∗ ,
• α? = α|ε,
• [a1 . . . an ] = (a1 | . . . |an ) wenn a1 , . . . , an ∈ Σ, und
• [a1 − an ] = [a1 . . . an ] wenn a1 , . . . , an ∈ Σ geordnet.
Definition: 13 Sei Σ ein beliebiges Alphabet. Jedem regulären Ausdruck α ∈
Reg(Σ) wird induktiv eine (reguläre) Sprache L(α) zugeordnet:
• L(∅) = ∅
• L(ε) = {ε}
• L(a) = {a} für alle a ∈ Σ
• L(α|β) = L(α) ∪ L(β)
• L(α · β) = L(α) ◦ L(β)
∗
• L(α∗ ) = L(α)
Satz 2 Eine formale Sprache L ist genau dann regulär, wenn ein regulärer
Ausdruck α existiert, mit L(α) = L.
Korollar 1 Zu jedem regulären Ausdruck α existiert mindestens ein endlicher Automat A, so dass L(α) = L(A).
Herunterladen