Skip to content

CFG to CNF

CFG: The language generated by CFG is called Context Free Grammar


Simplification:


CNF: Chomskey Normal Form :-


A→BC [variables]
A→ a [Terminal]

A,B,C Represent Variables. a represents terminal

  • If there exist terminal at right side, then there must be only one terminal
  • If there exist variables at right side, Then there must be exactly TWO variables
  • No ε rules (S→ε) is allowed except START variable → ε
  • START variables cannot exist in the right of any product rules.

CNF Conversion:


EXAMPLE: 1

S→ ASA|aB
A→ B  | S
B→ b  | ε

STEP 1: Add new start variable


L → S 
S→ ASA|aB
A→ B  | S
B→ b  | ε

STEP 2: Remove ε rules except Start Variable pointing to ε


B→ ε Removal:


  1. Remove ε
  2. Find out the ε containing variables in RIGHT side of other Rules
  3. ADD those variables with the ε with those Rules
L → S
S→ ASA|aB | a    [aB → aε == a]
A→ B  | S | ε    [B→ε == ε]
B→ b             [Remove ε from the Variable]

A→ ε Removal:


L → S
S→ ASA | aB | a | AS | SA | S [ASA → εSε  == S]
                              [ASA → εSA ==  SA]    
                              [ASA → ASε == AS]

A→ B  | S  [Remove ε from the Variable]
B→ b

STEP 3: unit rules (V → P)[right side single variable] Removal


Self Removal: S→ S


L → S
S→ ASA | aB | a | AS | SA [Removed S]
A→ B | S
B→ b

A → B Removal:


L → S
S→ ASA | aB | a | AS | SA [Removed S]
A→ b | S [Removed B]
         [A→ B → b == A → b]
B→ b

A→ S Removal:


L → S
S→ ASA | aB | a | AS | SA 
A→ b |ASA | aB | a | AS | SA  [Removed S]
                              [A→ S → ASA | aB | a | AS | SA]
B→ b

L → S Removal:


L → ASA | aB | a | AS | SA     [L → S → ASA | aB | a | AS | SA]
S→ ASA | aB | a | AS | SA 
A→ b |ASA | aB | a | AS | SA  
B→ b

STEP 4: Proper Form Conversion


L → AP | QB | a | AS | SA     [L → S → ASA | aB | a | AS | SA]
P    → SA
Q    → a
S    → AP | QB | a | AS | SA 
A    → b |AP | QB | a | AS | SA  
B     → b

We made two new Rules here:

  • in CNF there can be Maximum TWO variables but as We can see we have "ASA" 3 Variables. To reduced it to TWO variables We made the Below Rule

P → SA

  • in CNF nonTerminal(Variables) and Terminal can't be together, Also Maximum two variables can be declared simultaneously. To fix this issue, we made the Below Rule.

Q → a

The END!
This the Chomollokko Normal Form

Example 2:


A → BAB | B | ε 
B → 00 | ε

STEP 1: Add new start variable


S → A
A → BAB | B | ε 
B → 00 | ε

STEP 2: Remove ε rules except Start Variable pointing to ε


A → ε Removal:


S → A | ε
A → BAB | B | BB 
B → 00 | ε

B→ ε Removal:


S → A | ε
A → BAB | B | BB | BA | AB | A  [(B → ε == ε , BB → εε) == ε] 
                                [There supposed to be an ε . But in previous step we removed ε from B. So we don't need to add it again]
B → 00

STEP 3: unit rules (V → P)[right side single variable] Removal


Self Removal: A → A


S → A | ε
A → BAB | B | BB | BA | AB 
B → 00

A → B Removal:


S → A | ε
A → BAB | 00 | BB | BA | AB
B → 00

S → A Removal:


S → BAB | 00 | BB | BA | AB | ε 
A → BAB | 00 | BB | BA | AB
B → 00

STEP 4: Proper Form Conversion


S → BP | QQ | BB | BA | AB | ε
P → AB
Q → 0
A → BP | QQ | BB | BA | AB
B → QQ

The END!

Example 3:


S→ aXbX
X → aY | bY | ε
Y → X | c

CNF Conversion:


STEP 1: Add new start variable


L → S
S→ aXbX
X → aY | bY | ε
Y → X | c

STEP 2: Remove ε rules except Start Variable pointing to ε


X → ε Removal:

L → S
S → aXbX | aXb | abX | ab
X → aY | bY
Y → X | c | ε
Y → ε Removal:

L → S
S    → aXbX | aXb | abX | ab
X    → aY | bY | a | b
Y    → X | c

STEP 3: unit rules


Self Removal:

Nothing to remove

Single Variables Removal:

Y → X Removal

L    → S
S    → aXbX | aXb | abX | ab
X    → aY | bY | a | b
Y    → aY | bY | a | b | c
L → S Removal

L    → aXbX | aXb | abX | ab
S    → aXbX | aXb | abX | ab
X    → aY | bY | a | b
Y    → aY | bY | a | b | c

STEP 4: Proper Conversion


L    → PQ | PB | AQ | AB

A    → a
B    → b

P    → AX [aX]
Q    → BX [bX]

S    → PQ | PB | AQ | AB
X    → AY | BY | a | b
Y    → AY | BY | a |b | c

The END

Example 5:


S → aX | bY | b | ZZc
X → Yaa| abZ| ε 
Y → bXXb | ab | cZ
Z → a | b | XZ | ε

CNF Conversion:


STEP 1:


U → S
S → aX | bY | b | ZZc
X → Yaa| abZ| ε 
Y → bXXb | ab | cZ
Z → a | b | XZ | ε

STEP 2: ε Removal


X → ε Removal

U → S
S → aX | bY | b | ZZc | a
X → Yaa| abZ
Y → bXXb | ab | cZ | bXb | bb
Z → a | b | XZ | ε | Z
Z → ε Removal:

U → S
S → aX | bY | b | ZZc | a | Zc | c
X → Yaa| abZ | ab
Y → bXXb | ab | cZ | bXb | bb | c
Z → a | b | XZ | Z | X

STEP 3: Unit Removal


Self Removal:

Z → Z Removal:

U → S
S → aX | bY | b | ZZc | a | Zc | c
X → Yaa| abZ | ab
Y → bXXb | ab | cZ | bXb | bb | c
Z → a | b | XZ | X
Single Variable Removal:

Z → X Removal:

U → S
S → aX | bY | b | ZZc | a | Zc | c
X → Yaa| abZ | ab
Y → bXXb | ab | cZ | bXb | bb | c
Z → a | b | XZ | Yaa| abZ | ab
U → S Removal:

U → aX | bY | b | ZZc | a | Zc | c

S → aX | bY | b | ZZc | a | Zc | c
X → Yaa| abZ | ab
Y → bXXb | ab | cZ | bXb | bb | c
Z → a | b | XZ | Yaa| abZ | ab

STEP 4: Proper Conversion


U → AX | BY | b | DC | a | ZC | c
A → a
B → b
C → c
D → ZZ
S → AX | BY | b | DC | a | ZC | c
X → YE| FZ | AB
E → AA
F → AB
Y → GH | AB | CZ | GB | BB | c
G → BX
H → XB
Z → a | b | XZ | YE| FZ | AB