JavaScript is required

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) =?

A.

{ a, dollar }

B.

{ b, dollar }

C.

{ dollar }

D.

{ c, dollar }

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 }

Câu hỏi liên quan