logo

Chomského normální forma (CNF)

CNF znamená Chomského normální formu. CFG (bezkontextová gramatika) je v CNF (Chomského normální forma), pokud všechna produkční pravidla splňují jednu z následujících podmínek:

  • Začněte generovat symbol ε. Například A → ε.
  • Neterminál generující dva neterminály. Například S → AB.
  • Neterminál generující terminál. Například S → a.

Například:

 G1 = {S → AB, S → c, A → a, B → b} G2 = {S → aA, A → a, B → c} 

Produkční pravidla gramatiky G1 splňují pravidla specifikovaná pro CNF, takže gramatika G1 je v CNF. Produkční pravidlo gramatiky G2 však nesplňuje pravidla specifikovaná pro CNF, protože S → aZ obsahuje terminál následovaný neterminálem. Takže gramatika G2 není v CNF.

textový wrapper css

Kroky pro konverzi CFG na CNF

Krok 1: Odstraňte startovací symbol z RHS. Pokud je počáteční symbol T na pravé straně jakékoli produkce, vytvořte novou produkci jako:

 S1 → S 

Kde S1 je nový startovací symbol.

Krok 2: V gramatice odstraňte null, unit a neužitečné produkce. Můžete se podívat na Zjednodušení CFG .

Krok 3: Odstraňte terminály z RHS výroby, pokud existují s jinými neterminály nebo terminály. Například produkci S → aA lze rozložit jako:

 S → RA R → a 

Krok 4: Odstraňte RHS pomocí více než dvou neterminálů. Například S → ASB lze rozložit jako:

zkuste chytit v Javě
 S → RS R → AS 

Příklad:

Převeďte daný CFG na CNF. Zvažte danou gramatiku G1:

 S → a | aA | B A → aBB | ε B → Aa | b 

Řešení:

Krok 1: Vytvoříme novou produkci S1 → S, protože na pravé straně se objeví startovací symbol S. Gramatika bude:

 S1 → S S → a | aA | B A → aBB | ε B → Aa | b 

Krok 2: Protože gramatika G1 obsahuje A → ε nulovou produkci, její odstranění z gramatiky vede:

stáhnout videa z youtube vlc
 S1 → S S → a | aA | B A → aBB B → Aa | b | a 

Nyní, protože gramatika G1 obsahuje produkci jednotek S → B, její výtěžek odstranění:

 S1 → S S → a | aA | Aa | b A → aBB B → Aa | b | a 

Odstraňte také produkci jednotek S1 → S, její odstranění z gramatiky vede:

cast sql
 S0 → a | aA | Aa | b S → a | aA | Aa | b A → aBB B → Aa | b | a 

Krok 3: Ve výrobním pravidle S0 → aA | Aa, S → aA | Aa, A → aBB a B → Aa, svorka a existuje na RHS s nekoncovkami. Terminál a tedy nahradíme X:

 S0 → a | XA | AX | b S → a | XA | AX | b A → XBB B → AX | b | a X → a 

Krok 4: V produkčním pravidle A → XBB má RHS více než dva symboly, čímž se z výtěžku gramatiky odstraní:

 S0 → a | XA | AX | b S → a | XA | AX | b A → RB B → AX | b | a X → a R → XB 

Pro danou gramatiku je to tedy požadovaný CNF.