CFG To CNF Conversion
CFG To CNF Conversion
1. If Start Symbol S occurs in some RHS, create new start symbol S1and
new production rule S1 → S
◼ S → ASA | aB
◼A→B|S
◼B→b|€
◼ S1 → S
◼ S → ASA | a B
◼A→B|S
◼B→b|€
Chomsky Normal Form (CNF)
◼ Step 2
◼ Remove Null Productions
After removing B → €
S1 → S S1 → S
S → ASA | a B S → ASA | a B | a
A→ B | S A→ B | S| €
B→b|€ B→b
After removing A → €
S1 → S S1 → S
S → ASA | a B | a S → ASA | a B | a | AS | SA | S
A→ B | S| € A→ B | S
B→b B→b
Chomsky Normal Form (CNF)
◼ Step 3
◼ Remove Unit Productions S → S, S1 → S,
A → B, A → S
After removing S → S
S1 → S S1 → S
◼→ ASA | a B | a | AS | SA | S
S S → ASA | a B | a | AS | SA
A→ B | S A→ B | S
◼→ b
B B→b
After removing S1 → S
S1 → ASA | a B | a | AS | SA
S → ASA | a B | a | AS | SA
A→ B | S
B→b
Chomsky Normal Form (CNF)
◼ Step 3
◼ Remove Unit Productions
After removing A → B
S1 → ASA | a B | a | AS | SA S1 → ASA | a B | a | AS | SA
S → ASA | a B | a | AS | SA S → ASA | a B | a | AS | SA
A→ B | S A→ b | S
B→b B→b
After removing A → S
S1 → ASA | a B | a | AS | SA
S → ASA | a B | a | AS | SA
A → b | ASA | a B | a | AS | SA
B→b
Chomsky Normal Form (CNF)
◼ Step 4
◼ Find out productions that have more than
two variables in RHS
Productions that have more than two
variables in RHS
S1 → ASA | a B | a | AS | SA S1 → ASA
S → ASA | a B | a | AS | SA S → ASA
A → b | ASA | a B | a | AS | SA A → ASA
B→b
Replace SA with X
S1 → AX | a B | a | AS | SA
S → AX | a B | a | AS | SA
A → b | AX | a B | a | AS | SA
B→b
X → SA
Chomsky Normal Form (CNF)
◼ Step 5
◼ Change Productions
◼ S1 → aB, S → aB, A → aB
Productions that have one terminal
and one nonterminal in RHS
S1 → AX | a B | a | AS | SA S1 → a B
S → AX | a B | a | AS | SA S→aB
A → b | AX | a B | a | AS | SA A→ a B
B→b
X → SA
Replace a with Y
Required Chomsky Normal Form S1 → AX | Y B | a | AS | SA
S → AX | Y B | a | AS | SA
A → b | AX | Y B | a | AS | SA
B→b
X → SA
Y → a
Chomsky Normal Form(CNF)
◼ Chomsky Normal Form(CNF) puts some
constraints on the grammar rules while
preserving the same language. The benefit is
that if a grammar is in CNF, then we can
avoid the ambiguity problem during
parsing. Another benefit of CNF is that it
provides an upper bound for parsing
complexity.