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, FIRST(A) =?
Đáp án đúng: D
Để tìm FIRST(A), ta cần xem xét các luật sinh của A:
A → BC
A → DBC
FIRST(A) sẽ bao gồm FIRST(BC) và FIRST(DBC).
FIRST(BC) = FIRST(B). Vì B → bB' | epsilon, nên FIRST(B) = {b, epsilon}.
FIRST(DBC) = FIRST(D). Vì D → a | d, nên FIRST(D) = {a, d}.
Vậy, FIRST(A) = FIRST(BC) ∪ FIRST(DBC) = {b, epsilon} ∪ {a, d} = {a, b, d, epsilon}.
Tuy nhiên, do C → c | epsilon nên nếu B và D đều dẫn đến epsilon thì C sẽ được xét. Vì có B → epsilon và C → c | epsilon nên c có thể thuộc FIRST(A). Nhưng vì không có trường hợp B và D cùng dẫn đến epsilon trong các luật sinh, ta cần xem xét các trường hợp cụ thể hơn.
Nếu A → BC, và B → epsilon, thì FIRST(C) được thêm vào FIRST(A). Vì C → c | epsilon, FIRST(C) = {c, epsilon}. Vậy {c} có thể thuộc FIRST(A).
Nếu A → DBC, và D → a | d, thì FIRST(D) = {a, d}.
Như vậy, FIRST(A) = {a, b, c, d, epsilon}.