CNF znamená Chomského normálna forma. CFG (bezkontextová gramatika) je v CNF (Chomského normálna forma), ak všetky produkčné pravidlá spĺňajú jednu z nasledujúcich podmienok:
- Začnite generovať symbol ε. Napríklad A → ε.
- Neterminál generujúci dva neterminály. Napríklad S → AB.
- Neterminál generujúci terminál. Napríklad S → a.
Napríklad:
G1 = {S → AB, S → c, A → a, B → b} G2 = {S → aA, A → a, B → c}
Produkčné pravidlá gramatiky G1 spĺňajú pravidlá špecifikované pre CNF, takže gramatika G1 je v CNF. Produkčné pravidlo gramatiky G2 však nespĺňa pravidlá špecifikované pre CNF, keďže S → aZ obsahuje koncovku, za ktorou nasleduje neterminál. Takže gramatika G2 nie je v CNF.
v regexe java
Kroky na premenu CFG na CNF
Krok 1: Odstráňte štartovací symbol z RHS. Ak je štartovací symbol T na pravej strane akejkoľvek produkcie, vytvorte novú produkciu ako:
S1 → S
Kde S1 je nový štartovací symbol.
Krok 2: V gramatike odstráňte nulu, jednotku a zbytočné produkcie. Môžete si pozrieť Zjednodušenie CFG.
Krok 3: Odstráňte terminály z RHS výroby, ak existujú s inými neterminálmi alebo terminálmi. Napríklad produkciu S → aA možno rozložiť ako:
S → RA R → a
Krok 4: Odstráňte RHS s viac ako dvoma neterminálmi. Napríklad S → ASB možno rozložiť ako:
S → RS R → AS
Príklad:
Preveďte daný CFG na CNF. Zvážte danú gramatiku G1:
pole java
S → a | aA | B A → aBB | ε B → Aa | b
Riešenie:
Krok 1: Vytvoríme novú produkciu S1 → S, keďže na pravej strane sa objaví štartovací symbol S. Gramatika bude:
S1 → S S → a | aA | B A → aBB | ε B → Aa | b
Krok 2: Keďže gramatika G1 obsahuje A → ε nulovú produkciu, jej odstránením z gramatiky sa získa:
stiahnite si videá z youtube vlc
S1 → S S → a | aA | B A → aBB B → Aa | b | a
Teraz, keďže gramatika G1 obsahuje produkciu jednotiek S → B, jej výťažok odstránenia:
S1 → S S → a | aA | Aa | b A → aBB B → Aa | b | a
Odstráňte aj produkciu jednotiek S1 → S, jej odstránenie z gramatiky vedie k:
S0 → a | aA | Aa | b S → a | aA | Aa | b A → aBB B → Aa | b | a
Krok 3: Vo výrobnom pravidle S0 → aA | Aa, S → aA | Aa, A → aBB a B → Aa, terminál a existuje na RHS s neterminálmi. Terminál a teda nahradíme X:
S0 → a | XA | AX | b S → a | XA | AX | b A → XBB B → AX | b | a X → a
Krok 4: Vo výrobnom pravidle A → XBB má RHS viac ako dva symboly, čím sa odstraňuje z gramatického výťažku:
S0 → a | XA | AX | b S → a | XA | AX | b A → RB B → AX | b | a X → a R → XB
Pre danú gramatiku je to teda požadovaný CNF.
filtrovanie pythonu