For creating a membership algorithm. So the main question we wanted to answer was -
Does a given Grammer produce the given string?
So we thought we can actually solve this by producing all strings with size 0, then size 1, then size 2. Till we reach a length of our given string. Like if I am given ABC. I will produce strings with the length of size 0,1,2,3 not more than that.
The problem was -
Because of null even a string of length 50 can be reduced to a length of 3, So we needed to check all possible combination which is exponential in time, Means we are writing a procedure, not an algorithm.
And because of unit productions, we were not sure whether we were doing some useful work or not. Like converting A to B , B to C, C to D. We are actually taking a lot of extra steps. so we needed an algorithm which can do that.
So in order to work on the earlier concept, we need to remove all the abnormality and restrict our grammar to produce steps that increase the length of the string in every step. CNF does that. and GNF is used for the conversion of CNF to PDA.