Cho văn phạm gồm 7 luật sinh: (1) S->AB; (2) A->0A; (3) A->1; (4) B->1A; (5) B- >0; (6) A-> epsilon; (7) B-> epsilon. First(A)=?
Đáp án đúng: D
Để tìm First(A), ta xét các luật sinh có A ở vế trái:
- A -> 0A: Vì bắt đầu bằng terminal 0, nên 0 thuộc First(A)
- A -> 1: Vì bắt đầu bằng terminal 1, nên 1 thuộc First(A)
- A -> epsilon: Vì A có thể dẫn đến epsilon, nên epsilon thuộc First(A)
Vậy First(A) = {0, 1, epsilon}
Câu hỏi liên quan
Để tìm FOLLOW(B), ta cần xem xét các luật sinh có B ở vế phải. FOLLOW(B) là tập hợp các terminal có thể xuất hiện ngay sau B trong quá trình dẫn xuất.
\n1. Từ luật S -> BA, FOLLOW(B) chứa FIRST(A). FIRST(A) = {1, epsilon}. Tuy nhiên, nếu FIRST(A) chứa epsilon, thì FOLLOW(B) cũng chứa FOLLOW(S). Vì S là ký hiệu bắt đầu, nên $ thuộc FOLLOW(S).
\n2. Xem xét luật khác không có B ở vế phải.
\n3. Vì A -> epsilon, nên từ S -> BA, ta có FOLLOW(B) chứa FOLLOW(S). Giả sử S không xuất hiện ở vế phải của bất kỳ luật nào, ta không cần phải xem xét thêm.
\n4. Do A->1 và A->epsilon, nên FIRST(A) = {1}. Vì A có thể dẫn xuất ra epsilon, FOLLOW(B) sẽ chứa FOLLOW(S). Vì S là ký hiệu bắt đầu, FOLLOW(S) chứa $.
\n5. Vì B có thể là cuối chuỗi (S -> BA, A -> epsilon), nên FOLLOW(B) có thể chứa $ (end marker).
\nTuy nhiên, vì không có dấu $ trong các lựa chọn, ta cần xem xét kỹ hơn. Từ S -> BA, nếu A -> 1 thì B đứng trước 1, nếu A -> epsilon thì B đứng cuối chuỗi, nhưng không có terminal nào theo sau. Nhưng nếu A -> epsilon, ta có thể coi như B là cuối của S.
\nTừ S -> BA, FIRST(A) = {1, epsilon}. Nếu epsilon thuộc FIRST(A), thì FOLLOW(B) sẽ chứa FOLLOW(S). Vì S là ký hiệu bắt đầu, FOLLOW(S) chứa $, nhưng $ không có trong các đáp án. Trong trường hợp này, khi A -> 1, thì 1 thuộc FIRST(A). Khi A -> epsilon, thì không có gì theo sau B.
\nTuy nhiên, ta cần xem xét kỹ các luật sinh. S -> BA, A -> 1 hoặc A -> epsilon. Vậy FOLLOW(B) chứa FIRST(A) ngoại trừ epsilon. Do đó, FOLLOW(B) chứa {1}. Nếu A -> epsilon, thì FOLLOW(B) chứa FOLLOW(S), tức là không có gì cả. Vì không có đáp án nào là {1}, ta cần xem xét lại.
\nNếu ta có thêm một luật sinh nữa có dạng X -> BY, thì FOLLOW(B) sẽ chứa FIRST(Y). Nhưng ở đây không có.
\nNếu A -> 0, thì ta sẽ có 0 thuộc FIRST(A), vậy 0 thuộc FOLLOW(B). Nhưng A -> 1 hoặc epsilon, không phải A -> 0.
\nNhư vậy, chúng ta có A -> 1 hoặc A -> epsilon. Nên FOLLOW(B) chỉ chứa 1 khi A -> 1.
Xét luật B -> A1. Ta thấy 1 luôn theo sau A. Vậy A thuộc FIRST(B). Khi đó, A -> 1 và A -> epsilon, suy ra 1 thuộc FIRST(A). Do đó, FIRST(A) = {1}.
Vậy FOLLOW(B) chứa FIRST(A) = {1}.
Đáp án chính xác nhất là B. {1}
* Phương án A: Mô tả đúng cấu trúc của bảng phân tích M, trong đó A là ký hiệu chưa kết thúc và a là ký hiệu kết thúc hoặc '$'.
* Phương án B: Sai, vì sử dụng 'epsilon' thay vì '$'.
* Phương án C: Sai, vì sử dụng cả '$' và 'epsilon', trong khi chỉ '$' được dùng để đánh dấu kết thúc chuỗi nhập.
* Phương án D: Thiếu ký hiệu '$' để đánh dấu kết thúc chuỗi nhập.
Do đó, phương án A là đáp án đúng nhất.
* A -> BC: Đúng dạng luật sinh, A sinh ra BC.
* A -> B:=C: Đúng dạng luật sinh, A sinh ra B và C (với một ràng buộc nào đó).
* A = B + C: Không đúng dạng luật sinh tiêu chuẩn. Phép cộng (+) và dấu bằng (=) thường không được sử dụng theo cách này trong các biểu diễn luật sinh thông thường. Nó mang ý nghĩa của một phép gán hoặc một công thức toán học hơn là một luật sinh.
* A -> B: Đúng dạng luật sinh, A sinh ra B.
Do đó, phương án C là phương án không đúng với dạng luật sinh của văn bản.
Trong quá trình phân tích cú pháp, chuỗi đầu vào thường là một chuỗi các ký hiệu kết thúc (terminal symbols) được tạo ra từ văn phạm. Chuỗi này thường kết thúc bằng một ký hiệu đặc biệt, thường là ký hiệu '$' (dollar), để đánh dấu sự kết thúc của chuỗi đầu vào. Điều này giúp bộ phân tích cú pháp biết khi nào nó đã xử lý hết chuỗi đầu vào.
- Phương án A đúng vì nó mô tả chính xác thành phần của chuỗi đầu vào: các ký hiệu kết thúc và ký hiệu kết thúc chuỗi '$'.
- Phương án B sai vì nó bao gồm cả ký hiệu không kết thúc, trong khi chuỗi đầu vào chỉ chứa ký hiệu kết thúc.
- Phương án C sai vì nó chỉ đề cập đến ký hiệu không kết thúc, trong khi chuỗi đầu vào chứa ký hiệu kết thúc.
- Phương án D sai vì các luật sinh là một phần của văn phạm, không phải là chuỗi đầu vào.
Để tìm First(S), ta cần xem xét các luật sinh của S. Trong trường hợp này, S -> AB. Do đó, First(S) sẽ chứa tất cả các phần tử có thể bắt đầu từ A và B.
- A -> aA | epsilon, vậy First(A) = {a, epsilon}
- B -> bB | epsilon, vậy First(B) = {b, epsilon}
Vì S -> AB, nên First(S) sẽ chứa First(A). Nếu epsilon thuộc First(A), thì First(S) cũng sẽ chứa First(B). Trong trường hợp này, epsilon thuộc First(A), vì vậy First(S) sẽ chứa {a} (từ First(A)) và {b} (từ First(B)). Do đó, First(S) = {a, b}.

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.