Ei Vitor,
Na C você não pode usar regras separadas, porque você pode gerar 1...1 e 2...2 alternadamente. A solução seria:
P -> 1P1 | 2P2 | 0
Na D, se você quiser usar uma regra só, precisa usar P -> P1 (e não P -> 1P) para garantir que não haverá zeros depois de uns.
P -> 0P1 | P1 | 1
Já na E não existe o símbolo "+", para alternativas você deve usar o símbolo "|". A nossa convenção é que a primeira variável é a variável de partida, portanto sua solução deveria ser:
P -> X | Y
X -> 0X1 | λ
Y -> OP2 | 1
[]z, Andrei