Cho văn phạm gồm các luật sinh: S → A; A → BC hoặc A-> DBC; B → bBʼ hoặc B-> Epsilon; B’→ bB’ hoặc B’- > Epsilon; C → c hoặc C-> epsilon; D → a hoặc D-> d, FOLLOW (B’) =?
Đáp án đúng: D
Để tìm FOLLOW(B'), ta xét các luật sinh có B' ở vế phải:
B → bB’ hoặc B-> Epsilon
B’→ bB’ hoặc B’- > Epsilon
Từ B’→ bB’ hoặc B’- > Epsilon, suy ra nếu B' là cuối cùng, thì FOLLOW(B') sẽ chứa FOLLOW(B). B sẽ xuất hiện trong A → BC hoặc A-> DBC. Do đó FOLLOW(B) sẽ chứa FIRST(C) nếu C không thể dẫn đến epsilon, hoặc chứa FIRST(C) và FOLLOW(A) nếu C có thể dẫn đến epsilon. FIRST(C) = {c, epsilon}. Do đó, c thuộc FOLLOW(B).
Tiếp theo, xét A → BC hoặc A-> DBC. FOLLOW(A) = {$} (vì A là ký hiệu bắt đầu). Vì C có thể dẫn đến epsilon (C -> epsilon), FOLLOW(B) phải chứa FOLLOW(A) = {$}. Do đó, $ thuộc FOLLOW(B). Vậy FOLLOW(B) = {c, $}
Vì B' có thể là cuối cùng trong B -> bB', suy ra FOLLOW(B') = FOLLOW(B). Vì vậy FOLLOW(B') = {c, $}.