Reguläre Grammatik: Unterschied zwischen den Versionen
Zeile 58: | Zeile 58: | ||
''Diese nicht-reguläre Grammatik lässt sich in eine reguläre Grammatik überführen.'' | ''Diese nicht-reguläre Grammatik lässt sich in eine reguläre Grammatik überführen.'' | ||
''Das gilt aber nicht für jede nicht-reguläre Grammatik!'' | ''Das gilt aber nicht für jede nicht-reguläre Grammatik! Siehe z.B. [[Kontextfreie Grammatik]]'' | ||
=Beziehung zu deterministischen endlichen Automaten= | =Beziehung zu deterministischen endlichen Automaten= |
Version vom 24. November 2017, 20:04 Uhr
Definition
Eine Grammatik G wird durch ein 4-Tupel (N, T, S, P) definiert:
- N ist die Menge der Nichtterminalsymbole.
- T ist die Menge der Terminalsymbole.
- S ∈ N ist das Startsymbol.
- P ist die Menge der Produktionsregeln.
Eine reguläre Grammatik ist eine Grammatik, bei denen alle Produktionen eine der folgenden Formen haben:
- A → aB d.h. Nichtterminalsymbol wird ersetzt durch ein Terminalsymbol gefolgt von einem Nichtterminalsymbol'
- A → a d.h. Nichtterminalsymbol wird ersetzt durch ein Terminalsymbol.
- A → ε d.h. Nichtterminalsymbol wird ersetzt durch nichts. (ε steht für nichts.)
Beispiele
KGB-Sprache
Die KGB-Sprache besteht aus allen Ziffernfolgen, die irgendwo die Zahlenkette "007" enhalten.
Die Grammatik G der KGB-Sprache kann wie folgt definiert werden:
- G= (N, T, S, P)
- Nichtterminalsymbole N = {S, A, B, C}
- Terminalsymbole T = {0,...,9}
- Startsymbol S = S
- Produktionsregeln P = {
- S → 0A | 0S | 1S | 2S | ... | 9S
- A → 0B
- B → 7C
- C → ε | 0C | ... | 9C
- }
Beispiel für die Ableitung eines Wortes
Dass das Wort "060074" zu der KGB-Sprache gehört, lässt sich durch folgende Ableitung zeigen:
- S → 0S → 06S → 060A → 0600B → 06007C → 06007
Bei der letzten Ableitung wurde das C durch nichts (ε) ersetzt.
Beispiel für eine nicht-reguläre Grammatik
Die folgende Grammatik für den KGB-Automaten ist nicht regulär:
- G= (N, T, S, P)
- Nichtterminalsymbole N = {S, A}
- Terminalsymbole T = {0,...,9}
- Startsymbol S = S
- Produktionsregeln P = {
- S → 007A | 0S | 1S | 2S | ... | 9S
- A → ε | 0A | ... | 9A
- }
Die unterstrichene Regel verstößt gegen die Anforderungen, denn vor dem Nicht-Terminalsymbol sind drei Terminalsymbole!
Hinweis:
Diese nicht-reguläre Grammatik lässt sich in eine reguläre Grammatik überführen.
Das gilt aber nicht für jede nicht-reguläre Grammatik! Siehe z.B. Kontextfreie Grammatik
Beziehung zu deterministischen endlichen Automaten
- Zu jeder regulären Grammatik gibt es einen deterministischen endlichen Automaten.
- Dazu erstellt man aus der regulären Grammatik erst einen Nicht-deterministischen endlichen Automaten, indem man aus jedem Nichtterminalsymbol einen Zustand macht und aus jeder Produktionsregel einen Übergang.
- Aus dem Nicht-deterministischen endlichen Automaten kann man einen deterministischen endlichen Automaten erstellen. Das ist mühsam, aber es ist bewiesen, dass das immer geht!
- Zu jedem deterministischen endlichen Automaten gibt es eine reguläre Grammatik.
- Diese lässt sich leicht aus dem Übergangsgraphen konstruieren, indem man aus jedem Zustand ein Nichtterminalsymbol macht und aus jedem Übergang eine Regel (mit einem Terminalsymbol und einem Nichtterminalsymbol).
Beziehung zu regulären Sprachen
Aus der Beziehung zu den deterministischen endlichen Automaten folgt direkt:
- Jede reguläre Grammatik erzeugt eine reguläre Sprache.
- Denn zu jeder regulären Grammatik gibt es einen deterministischen endlichen Automaten, und dieser erkennt eine reguläre Sprache.
- Zu jeder regulären Sprache gibt es eine reguläre Grammatik.
- reguläre Sprachen sind genau die Sprachen, die von deterministischen endlichen Automaten erkannt werden. Zu jedem deterministischen endlichen Automaten kann man eine reguläre Grammatik finden.
Grenzen der regulären Grammatik
Für alle Sprachen, für die es keinen deterministischen endlichen Automaten gibt, gibt es auch keine reguläre Grammatik!
Begründung:
Wenn es für eine Sprache eine reguläre Grammatik gibt, dann kann man sie in einen deterministischen endlichen Automaten überführen.
D.h. umgekehrt:
Wenn es zu einer Sprache keinen deterministischen endlichen Automaten gibt, dann kann es zu der Sprache auch keine reguläre Grammatik geben. (Denn die ließe sich in einen deterministischen endlichen Automaten überführen.)
Beispiel
Für die Sprache L = {anbn} gibt es keinen deterministischen endlichen Automaten:
Siehe Beispiel für Grenzen des deterministischen endlichen Automaten.
Deswegen gibt es für diese Sprache auch keine reguläre Grammatik.