Эта круговая зависимость не должна быть с самого начала. это алгоритм поиска 'follow's:
Инициируйте все последующие группы в {}, кроме S, который является инициатором в {$}.
Пока есть изменения, для каждого A∈V выполните:
Для каждого Y → αAβ сделать:
следовать (A) = следовать (A) ∪ сначала (β)
Если β ⇒ * ε, также выполните: следовать (A) = следовать (A) ∪ следовать (Y)
Итак, в вашем случае вы должны получить:
Последующие (S) = {с, $}
Следуйте (B) = {с, $}
Последующие (D) = {а, с}