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 (A) =?
Đáp án đúng: D
Để tìm FOLLOW(A), ta cần xem xét các luật sinh có A ở vế trái và vế phải. Trong văn phạm đã cho, ta có các luật sinh:
- S → A
- A → BC
- A → DBC
Từ luật sinh S → A, vì A là ký hiệu cuối cùng trong luật sinh này, nên mọi ký hiệu trong FOLLOW(S) cũng thuộc FOLLOW(A). Vì S là ký hiệu bắt đầu, FOLLOW(S) chứa $. Do đó, $ ∈ FOLLOW(A).
Từ luật sinh A → BC, FIRST(C) (nếu C không suy dẫn ra ε) hoặc FOLLOW(A) (nếu C suy dẫn ra ε) sẽ thuộc FOLLOW(A). Vì C → c hoặc C → ε, FIRST(C) = {c}. Tuy nhiên, vì C có thể là ε, FOLLOW(A) sẽ chứa FOLLOW(A), không mang lại thông tin mới.
Từ luật sinh A → DBC, FIRST(C) (nếu C không suy dẫn ra ε) hoặc FOLLOW(A) (nếu C suy dẫn ra ε) sẽ thuộc FOLLOW(A). Tương tự như trên, vì C có thể là ε, FOLLOW(A) sẽ chứa FOLLOW(A), không mang lại thông tin mới.
Vậy, FOLLOW(A) = { $ }.