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 (C) =?
Đáp án đúng: D
Để tìm FOLLOW(C), ta xét các luật sinh có C ở vế phải.
- A → BC
- A → DBC
Từ A → BC, theo định nghĩa FOLLOW, FOLLOW(C) chứa FOLLOW(A).
Từ A → DBC, theo định nghĩa FOLLOW, FOLLOW(C) chứa FOLLOW(A).
Ta cần tìm FOLLOW(A):
- S → A, suy ra FOLLOW(A) chứa $ (ký hiệu kết thúc chuỗi).
Vậy FOLLOW(C) = { $ }.
Câu hỏi liên quan
Follow(S) là tập hợp các terminal có thể xuất hiện ngay sau S trong một chuỗi dẫn xuất.
Vì S là ký hiệu bắt đầu, '$' (ký hiệu kết thúc chuỗi) luôn thuộc Follow(S).
Vậy, Follow(S) = { $ }
Để tìm Follow(B), ta cần xem xét các quy tắc sinh ra B ở vế phải và vế trái:
- Ở vế phải:
+ S -> BCD: First(CD) = First(C) = {c}. Do đó, c ∈ Follow(B).
+ A -> BBA: First(BA) = First(B) = {b}. Do đó, b ∈ Follow(B).
- Ở vế trái:
+ B -> bEc: Theo sau B không có gì, xét S -> BCD, D -> a hoặc D -> BDb, ta có nếu B là cuối chuỗi thì ta thêm $ (ký hiệu kết thúc chuỗi) vào Follow(B) vậy $ ∈ Follow(B)
Vậy Follow(B) = {b, c, $}
Đáp án A, B, C, D đều không chính xác
Để 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, $}.
Trong trường hợp này, ta có E' -> .E trong I0. Khi di chuyển dấu chấm qua E, ta được E' -> E.. Tiếp theo, ta cần đóng tập mục này bằng cách thêm tất cả các luật sinh có E ở bên trái và dấu chấm ở đầu. Như vậy, ta thêm E -> .E + T và E -> .T.
Tiếp tục đóng tập mục, ta thêm các luật sinh có T ở bên trái và dấu chấm ở đầu: T -> .T * F và T -> .F.
Cuối cùng, ta thêm các luật sinh có F ở bên trái và dấu chấm ở đầu: F -> .(E) và F -> .id.
Vậy Goto(I0, E) = {E' -> E., E -> E. + T}.
Để giải quyết, ta cần:
1. Xác định I0: I0 là closure của {E' -> .E}.
Closure(I0) sẽ bao gồm tất cả các luật sinh có E ở bên phải dấu '->', tức là:
E' -> .E
E -> .E + T
E -> .T
T -> .T * F
T -> .F
F -> .(E)
F -> .id
2. Tính Goto(I0, T): Phép Goto(I0, T) sẽ dịch dấu chấm '.' qua ký hiệu 'T' trong tất cả các mục có 'T' ngay sau dấu chấm, sau đó tính closure của tập các mục mới này.
Từ I0, ta có hai mục có 'T' sau dấu chấm là: E -> .T và T -> .T * F. Do đó:
- Từ E -> .T, ta có E -> T.
- Từ T -> .T * F, ta có T -> T. * F
Closure({E -> T., T -> T. * F}) sẽ là chính nó (vì không có luật sinh nào có E hoặc T ở bên phải dấu -> bắt đầu bằng ký tự không kết thúc).
3. Đối chiếu kết quả: So sánh kết quả tính toán với các phương án đáp án.
Phân tích các đáp án:
* A: Sai. Chứa nhiều mục không liên quan đến việc Goto(I0, T).
* B: Sai. E' -> E . không phải là kết quả của Goto(I0,T).
* C: Sai. Tương tự A, chứa nhiều mục không liên quan.
* D: Đúng. Đáp án này chứa chính xác các mục thu được sau phép Goto(I0, T) và closure của nó: E -> T. và T -> T. * F
Vậy, đáp án đúng là D.

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
ĐĂNG KÝ GÓI THI VIP
- Truy cập hơn 100K đề thi thử và chính thức các năm
- 2M câu hỏi theo các mức độ: Nhận biết – Thông hiểu – Vận dụng
- Học nhanh với 10K Flashcard Tiếng Anh theo bộ sách và chủ đề
- Đầy đủ: Mầm non – Phổ thông (K12) – Đại học – Người đi làm
- Tải toàn bộ tài liệu trên TaiLieu.VN
- Loại bỏ quảng cáo để tăng khả năng tập trung ôn luyện
- Tặng 15 ngày khi đăng ký gói 3 tháng, 30 ngày với gói 6 tháng và 60 ngày với gói 12 tháng.