logo

Chomskys normala form (CNF)

CNF står för Chomsky normal form. En CFG (kontextfri grammatik) är i CNF (Chomsky normal form) om alla produktionsregler uppfyller något av följande villkor:

  • Börja generera ε till exempel A → ε.
  • En icke-terminal som genererar två icke-terminaler. Till exempel S → AB.
  • En icke-terminal som genererar en terminal. Till exempel, S → a.

Till exempel:

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

Produktionsreglerna för Grammatik G1 uppfyller reglerna som specificeras för CNF, så grammatiken G1 är i CNF. Produktionsregeln för Grammar G2 uppfyller dock inte reglerna som specificeras för CNF eftersom S → aZ innehåller terminal följt av icke-terminal. Så grammatiken G2 finns inte i CNF.

byta namn på katalogen i linux

Steg för att konvertera CFG till CNF

Steg 1: Eliminera startsymbolen från RHS. Om startsymbolen T finns till höger om någon produktion, skapa en ny produktion som:

 S1 → S 

Där S1 är nystartssymbolen.

Steg 2: Ta bort null, enhet och värdelösa produktioner i grammatiken. Du kan hänvisa till förenklingen av CFG.

Steg 3: Eliminera terminaler från produktionens RHS om de finns med andra icke-terminaler eller terminaler. Till exempel kan produktion S → aA delas upp som:

 S → RA R → a 

Steg 4: Eliminera RHS med fler än två icke-terminaler. Till exempel kan S → ASB delas upp som:

 S → RS R → AS 

Exempel:

Konvertera den givna CFG till CNF. Betrakta den givna grammatiken G1:

funktioner i en pandaserie
 S → a | aA | B A → aBB | ε B → Aa | b 

Lösning:

Steg 1: Vi kommer att skapa en ny produktion S1 → S, eftersom startsymbolen S visas på RHS. Grammatiken blir:

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

Steg 2: Eftersom grammatik G1 innehåller A → ε nollproduktion, ger dess borttagning från grammatiken:

sorteringsmatris i java
 S1 → S S → a | aA | B A → aBB B → Aa | b | a 

Nu, eftersom grammatik G1 innehåller enhetsproduktion S → B, ger dess borttagning:

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

Ta också bort enhetsproduktionen S1 → S, dess borttagning från grammatiken ger:

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

Steg 3: I produktionsregeln S0 → aA | Aa, S → aA | Aa, A → aBB och B → Aa, terminal a finns på RHS med icke-terminaler. Så vi kommer att ersätta terminal a med X:

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

Steg 4: I produktionsregeln A → XBB har RHS fler än två symboler, vilket tar bort det från grammatikutbytet:

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

Därför, för den givna grammatiken, är detta den nödvändiga CNF.

spara youtube video vlc