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).