Grammatiktransformationen: Chomsky-Normalform & Bereinigung

Eingeordnet in Elektronik

Geschrieben am in Deutsch mit einer Größe von 7,19 KB

Beseitigung unzugänglicher Symbole

Algorithmus zur Entfernung unzugänglicher Symbole

Um unzugängliche Symbole aus einer Grammatik G = (N, T, P, S) zu entfernen und eine neue Grammatik G' = (N', T', P', S) zu erstellen, gehen Sie wie folgt vor:

  1. Initialisierung

    Initialisieren Sie die Menge der erreichbaren Nichtterminale N' (z.B. mit dem Startsymbol S) und die Menge der erreichbaren Produktionen P' als leer.

  2. Iteration zur Ermittlung erreichbarer Symbole

    Wiederholen Sie die folgenden Schritte, bis sich N' nicht mehr ändert:

    • Für jedes Nichtterminal A ∈ N', wenn A → w eine Produktion in P ist, dann:
      1. Fügen Sie A → w zu P' hinzu.
      2. Für jedes Nichtterminal B, das in w vorkommt, fügen Sie B zu N' hinzu.
      3. Für jedes Terminal a, das in w vorkommt, werden keine weiteren Regeln zu P' hinzugefügt, da Terminals nicht expandieren.

Beseitigung von Epsilon-Regeln (ε-Regeln)

Algorithmus zur Entfernung von ε-Regeln

Gegeben sei eine Grammatik G = (N, T, P, S). Wenn ε ∈ L(G) (d.h., das leere Wort wird von S erzeugt), darf die Produktion S → ε nicht gelöscht werden. Alle anderen ε-Regeln können beseitigt werden.

Definition: Nullable Symbole

Ein Nichtterminal A ∈ N ist nullable (oder anfechtbar), wenn A ⇒* ε (d.h., A kann das leere Wort erzeugen).

  1. Berechnung aller nullable Symbole

    Bestimmen Sie die Menge Nε aller nullable Nichtterminale:

    1. Initialisieren Sie Nε mit allen Nichtterminalen A, für die eine Produktion A → ε ∈ P existiert.
    2. Wiederholen Sie: Fügen Sie zu Nε alle Nichtterminale B hinzu, für die eine Produktion B → w ∈ P existiert, wobei alle Symbole in w bereits in Nε enthalten sind (d.h., w ⇒* ε). Fahren Sie fort, bis sich Nε nicht mehr ändert.
  2. Modifikation der Produktionen

    Wir modifizieren die Regeln in P wie folgt, um P' zu erstellen:

    Für jede Produktion B → x1x2...xn ∈ P (wobei B ≠ S, falls S → ε beibehalten werden soll), fügen wir zu P' alle Produktionen B → y1y2...yn hinzu. Dabei gilt: yi = xi, wenn xi nicht nullable ist. Wenn xi nullable ist, kann yi entweder xi oder ε sein. Dies gilt für alle möglichen Kombinationen der nullable Symbole, die durch ε ersetzt werden können, solange die resultierende rechte Seite nicht leer ist.

    Hinweis: Wenn ε ∈ L(G), fügen Sie am Ende die Regel S → ε zu P' hinzu, falls sie nicht bereits durch die Modifikation entstanden ist und S selbst nullable ist.

Beseitigung von Einheitsregeln

Algorithmus zur Entfernung von Einheitsregeln

Definition: Eine Einheitsregel ist eine Produktion der Form A → B, wobei A, B ∈ N (Nichtterminale). Für jedes Nichtterminal A ∈ N definieren wir Unit(A) = {B ∈ N | A ⇒* B nur mit Einheitsregeln}.

  1. Initialisierung

    Initialisieren Sie die neue Menge von Produktionen P' mit allen Produktionen aus P: P' = P.

  2. Berechnung von Unit(A)

    Für jedes Nichtterminal A ∈ N, berechnen Sie die Menge Unit(A).

  3. Hinzufügen neuer Produktionen

    Für jedes Nichtterminal A ∈ N:

    • Für jedes B ∈ Unit(A):
      • Für jede Produktion B → w ∈ P, bei der w kein einzelnes Nichtterminal ist (d.h., w ist keine Einheitsregel):
        1. Fügen Sie die Produktion A → w zu P' hinzu.
  4. Entfernen von Einheitsregeln

    Entfernen Sie alle Einheitsregeln (Produktionen der Form X → Y, wobei X, Y ∈ N) aus P'.

Reihenfolge der Grammatiktransformationen

Um eine Grammatik in die Chomsky-Normalform zu überführen, ist es wichtig, die Transformationen in einer bestimmten Reihenfolge anzuwenden:

  1. Beseitigung von Epsilon-Regeln (siehe oben)
  2. Beseitigung von Einheitsregeln (siehe oben)
  3. Beseitigung unzugänglicher Symbole (siehe oben)
  4. (Optional, aber empfohlen: Beseitigung nutzloser Symbole)

Chomsky-Normalform (CNF)

Definition der Chomsky-Normalform

Eine Grammatik befindet sich in Chomsky-Normalform (CNF), wenn alle Produktionen eine der folgenden Formen haben:

  • A → a (wobei A ein Nichtterminal und a ein Terminal ist)
  • A → BC (wobei A, B, C Nichtterminale sind)

Transformation in die Chomsky-Normalform

Wie transformiert man eine beliebige Grammatik G (die bereits von ε-Regeln, Einheitsregeln, nutzlosen Symbolen und unzugänglichen Symbolen bereinigt wurde) in eine Grammatik G' in CNF?

Für jede Produktion A → w in G (wenn ε ∈ L(G), wird S → ε separat behandelt und am Ende wieder hinzugefügt):

  1. Behandlung von Terminalen in rechten Seiten mit Länge > 1

    Wenn |w| = 1:

    • Wenn w ein Terminal ist (z.B. A → a), ist die Regel bereits in CNF.

    Wenn |w| > 1 und w = x1x2...xn:

    • Wenn xi ein Nichtterminal ist, bleibt es unverändert.
    • Wenn xi ein Terminal ist, ersetzen Sie es durch ein neues Nichtterminal Xa und fügen Sie die Regel Xa → xi zu P' hinzu.
  2. Binarisierung der Regeln

    Wenn die rechte Seite einer Produktion mehr als zwei Symbole enthält (z.B. A → B1B2...Bn mit n > 2), führen Sie neue Nichtterminale ein, um die Regel zu binarisieren. Zum Beispiel wird A → B1B2B3 zu den Regeln A → B1D1 und D1 → B2B3.

    Allgemein: A → B1B2...Bn wird zu A → B1D1, D1 → B2D2, ..., Dn-2 → Bn-1Bn.

  3. Behandlung des leeren Wortes

    Am Ende, wenn ε ∈ L(G), fügen Sie die Regel S → ε zu P' hinzu.

Verwandte Einträge: