JavaScript is required

Cho văn phạm với các luật sinh: S -> AB; A -> aA ; A -> epsilon; B -> bB ; B-> epsilon, Follow (B) = ?

A.

{a }

B.

{a,b}

C.

{a,dollar }

D.

{dollar }

Trả lời:

Đáp án đúng: D


Để tìm Follow(B), ta cần xem xét các luật sinh có B ở vế phải:

  • S -> AB

Theo định nghĩa, Follow(B) chứa tất cả các terminal có thể theo sau B trong một chuỗi dẫn xuất từ văn phạm. Trong trường hợp này, B xuất hiện ở cuối luật sinh S -> AB. Do đó, Follow(B) sẽ chứa tất cả các terminal thuộc Follow(S). Vì S là ký hiệu bắt đầu, Follow(S) chứa '$' (ký hiệu kết thúc chuỗi). Mặt khác, B có thể không xuất hiện ở cuối chuỗi dẫn xuất (ví dụ: S -> A), nên Follow(B) chỉ chứa các terminal theo sau B trong các luật sinh khác, hoặc Follow(S) nếu B ở cuối. Trong luật S -> AB, nếu A có thể dẫn xuất ra chuỗi rỗng (epsilon), thì Follow(B) sẽ chứa Follow(S). Vì A -> aA | epsilon, A có thể dẫn xuất ra epsilon. Do đó Follow(B) chứa Follow(S) = {$}

Tuy nhiên, ta cũng cần xét xem có luật sinh nào khác mà B xuất hiện ở vế phải không. Ở đây không có, nên Follow(B) = {$}

Câu hỏi liên quan