Во-первых, почему w2 не может иметь форму Ba.
Взять следующую грамматику с W в качестве начального символа:
W -> lambda
W -> aX
X -> Wb
генерирует {a n b n : n натуральный}, который не является обычным языком. Так что это ограничение необходимо, если вы хотите создавать только обычные языки. В качестве альтернативы вы можете разрешить w2 = Ba, но запретить правила вида w2 = aB - это также дает обычные языки. Эта грамматика будет строить слово «назад».
Если вы разрешите оба типа правил, вы получите класс, известный как линейные языки .
Во-вторых, почему лямбда разрешена только для начального символа.
Это не необходимое ограничение.
Вы можете исключить любое использование лямбды для нетерминальных символов: возьмите некоторое правило W -> лямбда, удалите его и замените все правила U -> aW на U -> aW и U -> a. Очевидно, что вы не можете исключить использование лямбды для терминального символа (язык больше не будет давать пустое слово).
Таким образом, каждая грамматика типа 3, которая во многих местах использует лямбду, может быть "нормализована" к грамматике, которая использует лямбду только для начального символа.