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) =?
Trả lời:
Đáp án đúng: D
Để tìm FOLLOW(B), ta cần xem xét các luật sinh mà B xuất hiện ở vế phải.
1. A → BC: Từ luật này, FOLLOW(B) chứa FIRST(C). FIRST(C) = {c, ε}. Do đó, FOLLOW(B) chứa {c}.
2. A → DBC: Từ luật này, FOLLOW(B) chứa FIRST(C). FIRST(C) = {c, ε}. Do đó, FOLLOW(B) chứa {c}.
3. B → bBʼ: Luật này không trực tiếp cho ta thông tin về FOLLOW(B), vì B xuất hiện ở vế trái. Tuy nhiên, nó liên quan đến FIRST(B').
4. B' → bB' hoặc B' → ε: Luật này cho thấy FIRST(B') = {b, ε}.
Tiếp theo, ta cần xem xét các trường hợp mà C có thể là ε.
Nếu C → ε, thì từ A → BC, ta có A → B. Vì vậy, FOLLOW(B) chứa FOLLOW(A).
Vì S → A, FOLLOW(A) chứa FOLLOW(S) và FOLLOW(S) chứa '$' (ký tự kết thúc chuỗi).
Vậy FOLLOW(A) chứa '$'. Do đó FOLLOW(B) cũng chứa '$'.
Kết hợp lại, FOLLOW(B) = {c, $}.
Vậy đáp án đúng là D. { c, dollar }





