Appearance
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:
- Remove ε
- Find out the ε containing variables in RIGHT side of other Rules
- 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