Я думаю, что Первое уже неверно.
Поскольку A и B являются необязательными, а C имеет непустое первое:
First(S) = First(A) + First(B) + First(C) - {ε}
First(A) = {a} + First(C) + {ε}
First(B) = First(C) + {d, ε}
First(C) = {e, f}
=>
First(A) = {a, e, f, ε}
First(B) = {d, e, f, ε}
=>
First(S) = {a, d, e, f}
Сначала, когда за вхождением следует nt, Следуйте правилу в конце.
Follow(S) = {$}
Follow(A) = First(B) - {ε} + Follow(B) = {d, e, f}
Follow(B) = First(C) = {e, f}
Follow(C) = Follow(S) + Follow(B) + {b} = {b, e, f, $}
(надеюсь, я получил этосправа.)
Подробно:
Follow(S) = {$} [Start rule]
Follow(A) = First(B) - {ε} [S --> A.BC]
+ First(C) [S --> AB.C as B or First(B) contains ε]
+ Follow(B) [B. --> C | dA. | ε]
Follow(B) = First(C) [S --> AB.C as C does not contain ε stops]
Follow(C) = Follow(S) [S. --> ABC.]
+ {b} [A --> a | C.b |ε]
+ Follow(B) [B. --> C. | dA | ε]
Точка на LHS, как X. ->... приводит к Follow (S);
Точка на RHS похожа на ... -> ... .X ... приводит к First (X) - {ε} Пока естьε-production для X, продолжайте: ... -> ... X. ...
Помните, что это "мои" правила, ваша книга может использовать немного другую алгебру.