logo

Chomskys normale form (CNF)

CNF står for Chomsky normal form. En CFG (kontekstfri grammatikk) er i CNF (Chomsky normal form) hvis alle produksjonsregler tilfredsstiller en av følgende betingelser:

  • Start symbolgenerering ε For eksempel A → ε.
  • En ikke-terminal som genererer to ikke-terminaler. For eksempel S → AB.
  • En ikke-terminal som genererer en terminal. For eksempel, S → a.

For eksempel:

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

Produksjonsreglene til Grammatikk G1 tilfredsstiller reglene spesifisert for CNF, så grammatikken G1 er i CNF. Produksjonsregelen til Grammar G2 tilfredsstiller imidlertid ikke reglene spesifisert for CNF da S → aZ inneholder terminal etterfulgt av ikke-terminal. Så grammatikken G2 er ikke i CNF.

romertall diagram 1 100

Trinn for å konvertere CFG til CNF

Trinn 1: Fjern startsymbolet fra RHS. Hvis startsymbolet T er på høyre side av en produksjon, oppretter du en ny produksjon som:

 S1 → S 

Hvor S1 er det nye startsymbolet.

Steg 2: Fjern null-, enhets- og ubrukelige produksjoner i grammatikken. Du kan se forenklingen av CFG.

Trinn 3: Eliminer terminaler fra produksjonens RHS hvis de eksisterer med andre ikke-terminaler eller terminaler. For eksempel kan produksjon S → aA dekomponeres som:

 S → RA R → a 

Trinn 4: Eliminer RHS med mer enn to ikke-terminaler. For eksempel kan S → ASB dekomponeres som:

 S → RS R → AS 

Eksempel:

Konverter den gitte CFG til CNF. Tenk på den gitte grammatikken G1:

java erstatte alt
 S → a | aA | B A → aBB | ε B → Aa | b 

Løsning:

Trinn 1: Vi vil lage en ny produksjon S1 → S, ettersom startsymbolet S vises på RHS. Grammatikken vil være:

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

Steg 2: Ettersom grammatikk G1 inneholder A → ε nullproduksjon, gir fjerning fra grammatikken:

ascii tabell java
 S1 → S S → a | aA | B A → aBB B → Aa | b | a 

Nå, ettersom grammatikk G1 inneholder enhetsproduksjon S → B, gir dens fjerning:

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

Fjern også enhetsproduksjonen S1 → S, fjerning av den fra grammatikken gir:

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

Trinn 3: I produksjonsregelen S0 → aA | Aa, S → aA | Aa, A → aBB og B → Aa, terminal a eksisterer på RHS med ikke-terminaler. Så vi vil erstatte terminal a med X:

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

Trinn 4: I produksjonsregelen A → XBB har RHS mer enn to symboler, og fjerner det fra grammatikkutbyttet:

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

Derfor, for den gitte grammatikken, er dette den nødvendige CNF.

hvilken samling i java