Правило
S -> aSAbb | aA
не является рекурсивным.Левое рекурсивное правило имеет вид
A -> Au
, где u - последовательность терминалов и нетерминалов.Чтобы удалить символ S
с правой стороны правил S
, рассмотрите следующее:
S => aSAbb
=> a(aSAbb)Abb
=> a^n(aA)(Abb)^n
Роль рекурсии на S
заключается в создании этой последовательности.Эквивалентная грамматика:
S -> aKAbb | aA
K -> aSAbb | aA
Грамматики эквивалентны, так как любой производный
S => aSAbb
=> a(aSAbb)Abb
=> a(a(aSAbb)Abb)Abb
теперь является просто производным
S => aKAbb
=> a(aSAbb)Abb
=> a(a(aKAbb)Abb)Abb
, и каждый производный завершаетсяна aA
(думаю: поправьте меня, если я ошибаюсь).