How to simplify context free grammars?
Starting point:
$$
S \to ACD \\ A \to a \\ B \to \varepsilon \\ C \to ED \mid \varepsilon \\ D \to BC \mid b \\E \to b
$$
Substitute values of $A,B,E$:
$$
S \to aCD \\ C \to bD \mid \varepsilon \\ D \to C \mid b
$$
Substitute values of $D$:
$$
S \to aCC \mid aCb \\ C \to bC \mid bb \mid \varepsilon
$$
You can generate $bb$ from $C$ even without the rule $C \to bb$:
$$
S \to aCC \mid aCb \\ C \to bC \mid \varepsilon
$$
You can generate $b$ from $C$:
$$
S \to aCC \\ C \to bC \mid \varepsilon
$$
The language of $C$ is $b^*$, so $CC$ generates exactly the same words as $C$:
$$
S \to aC \\ C \to bC \mid \varepsilon
$$



The grammar generates the regular language $ab^*$.