Postać normalna Chomsky'ego
CFG jest w normalnej formie Chomsky'ego, jeśli produkcje są w następujących formach -
- A → a
- A → BC
- S → ε
gdzie A, B i C to nieterminale i a jest terminalem.
Algorytm konwersji do postaci normalnej Chomsky'ego -
Step 1 - Jeśli symbol startu S występuje po prawej stronie, utwórz nowy symbol początku S’ i nową produkcję S’→ S.
Step 2- Usuń zerowe produkcje. (Korzystanie z algorytmu usuwania Null Production omówionego wcześniej)
Step 3- Usuń produkcje jednostkowe. (Korzystanie z omówionego wcześniej algorytmu usuwania produkcji jednostkowej)
Step 4 - Wymień każdą produkcję A → B1…Bn gdzie n > 2 z A → B1C gdzie C → B2 …Bn. Powtórz ten krok dla wszystkich produkcji, które mają dwa lub więcej symboli po prawej stronie.
Step 5 - Jeśli prawa strona jakiejkolwiek produkcji jest w formie A → aB gdzie a jest terminalem, a A, B są nieterminalne, wtedy produkcja jest zastępowana przez A → XB i X → a. Powtórz ten krok dla każdej produkcji, która jest w formieA → aB.
Problem
Zamień następujący CFG na CNF
S → ASA | aB, A → B | S, B → b | ε
Rozwiązanie
(1) Od S pojawia się w RHS, dodajemy nowy stan S0 i S0→S jest dodawany do zestawu produkcyjnego i staje się -
S 0 → S, S → ASA | aB, A → B | S, B → b | ∈
(2) Teraz usuniemy zerowe produkcje -
B → ∈ i A → ∈
Po usunięciu B → ε zbiór produkcyjny staje się -
S 0 → S, S → ASA | aB | a, A → B | S | ∈, B → b
Po usunięciu A → ∈ zestaw produkcyjny staje się -
S 0 → S, S → ASA | aB | a | AS | SA | S, A → B | S, B → b
(3) Teraz usuniemy produkcje jednostkowe.
Po usunięciu S → S zestaw produkcyjny staje się -
S 0 → S, S → ASA | aB | a | AS | SA, A → B | S, B → b
Po usunięciu S 0 → S zestaw produkcyjny staje się -
S 0 → ASA | aB | a | AS | SA, S → ASA | aB | a | AS | SA
A → B | S, B → b
Po usunięciu A → B zestaw produkcyjny staje się -
S 0 → ASA | aB | a | AS | SA, S → ASA | aB | a | AS | SA
A → S | b
B → b
Po usunięciu A → S zestaw produkcyjny staje się -
S 0 → ASA | aB | a | AS | SA, S → ASA | aB | a | AS | SA
A → b | ASA | aB | a | AS | SA, B → b
(4) Teraz dowiemy się więcej niż dwóch zmiennych w RHS
Tutaj S 0 → ASA, S → ASA, A → ASA narusza dwa nie-zaciski w RHS
Dlatego zastosujemy krok 4 i krok 5, aby uzyskać następujący końcowy zestaw produkcyjny, który jest w CNF -
S 0 → AX | aB | a | AS | SA
S → AX | aB | a | AS | SA
A → b | AX | aB | a | AS | SA
B → b
X → SA
(5)Musimy zmienić produkcje S 0 → aB, S → aB, A → aB
A ostateczny zestaw produkcyjny to -
S 0 → AX | YB | a | AS | SA
S → AX | YB | a | AS | SA
A → b A → b | AX | YB | a | AS | SA
B → b
X → SA
Y → a