JavaScript is required

Giả sử I là một tập các mục của văn phạm G thì bao đóng closure(I) là tập các mục được xây dựng từ I theo qui tắc sau:

A.

Đầu tiên là tất cả các mục của I được thêm cho closure(I). Sau đó nếu A → x.By thuộc closure(I) và B → z là một luật sinh thì thêm B → . z vào closure(I) nếu nó chưa có trong đó. Lặp lại bước này cho đến khi không thể thêm vào closure(I) được nữa.

B.

Nếu A → x.By thuộc closure(I) và B → z là một luật sinh thì thêm B → . z vào closure(I) nếu nó chưa có trong đó.

C.

Nếu A → x.By thuộc closure(I) và tồn tại B → z thì thêm B → z vào closure(I).

D.

Nếu A → x.By thuộc closure(I) và tồn tại B → z thì loại A → x.By khỏi closure(I).

Trả lời:

Đáp án đúng: A


Định nghĩa bao đóng (closure) của một tập các mục văn phạm (items) I là một tập các mục được xây dựng lặp đi lặp lại. Đầu tiên, tất cả các mục trong I được thêm vào closure(I). Sau đó, nếu có một mục A → x.By trong closure(I), nghĩa là ta đang xét một luật sinh A → xBy và đã đọc xong x, chuẩn bị đọc B, thì ta cần thêm tất cả các luật sinh của B (B → z) vào closure(I) dưới dạng B → .z (nếu nó chưa có trong đó). Việc này được lặp lại cho đến khi không còn mục nào có thể được thêm vào closure(I) nữa. Phương án A mô tả chính xác định nghĩa này. Các phương án còn lại không đầy đủ hoặc không chính xác quy tắc thêm các luật sinh của B.

Câu hỏi liên quan