JavaScript is required

Cho văn phạm S → A hoặc S-> BCD; A → BBA hoặc A->EB; B → bEc hoặc B->BC hoặc B->BDc ; C → c ; D → a hoặc D-> BDb; E → a hoặc E->bE , Follow(D)=?

A.

{ a,b,c, dollar }

B.

{ b, c, dollar }

C.

{ a, c, dollar }

D.

{ dollar }

Trả lời:

Đáp án đúng: B


Để tìm Follow(D), ta cần xem xét các vị trí mà D xuất hiện ở vế phải của các luật sinh và áp dụng các quy tắc sau:

  • Quy tắc 1: Nếu có luật sinh A → αBβ, thì mọi phần tử trong First(β) (ngoại trừ ε) đều thuộc Follow(B).
  • Quy tắc 2: Nếu có luật sinh A → αB, hoặc A → αBβ mà First(β) chứa ε (tức là β ⇒* ε), thì mọi phần tử trong Follow(A) đều thuộc Follow(B).

Áp dụng vào văn phạm đã cho:

  • D xuất hiện trong B → BDc. Áp dụng quy tắc 1, First(c) = {c} nên c ∈ Follow(D).
  • D xuất hiện trong D → BDb. Áp dụng quy tắc 1, First(b) = {b} nên b ∈ Follow(D).
  • D là cuối cùng trong B → BDc. Follow(B) cần được thêm vào Follow(D). Để tìm Follow(B), ta xét các luật sinh có B:
    • S → BCD => First(CD) = {c}. Vậy c thuộc Follow(B).
    • A → BBA => First(BA). First(B) = {b}, vậy b thuộc Follow(A)
    • B → bEc => Không liên quan trực tiếp đến Follow(B)
    • B → BC => First(C) = {c}. Vậy c thuộc Follow(B)
    • B → BDc => First(Dc) = {a, b}. Vậy a và b thuộc Follow(B).
  • D → BDb => b thuộc Follow(D)

Như vậy, Follow(B) chứa {c}. Xét S → BCD, Follow(S) = {$}, vậy Follow(B) phải chứa {$}.

Vậy Follow(D) = {a, b, c, $}.

Câu hỏi liên quan