JavaScript is required

Cho văn phạm gồm các luật sinh: epsilon; epsilon; S → A; A → BC hoặc A-> DBC; B → bBʼ hoặc B-> epsilon; B’→ bB’ hoặc B’- > C → c hoặc C-> D → a hoặc D-> d, FIRST(D) =?

A.

{ a,b,c, epsilon }

B.

{ b,d, epsilon }

C.

{ a,d, epsilon }

D.

{ c,d, epsilon }

Trả lời:

Đáp án đúng: C


Câu hỏi yêu cầu tìm FIRST(D) trong văn phạm đã cho. FIRST(D) là tập hợp các terminal có thể xuất hiện đầu tiên khi dẫn xuất từ D.

Theo luật sinh D → a hoặc D → d, các terminal có thể xuất hiện đầu tiên khi dẫn xuất từ D là 'a' và 'd'. Ngoài ra, vì D có thể dẫn xuất ra 'a' hoặc 'd' trực tiếp nên tập FIRST(D) không chứa epsilon. Do đó, FIRST(D) = {a, d}.

Tuy nhiên, cần xem xét thêm các luật dẫn xuất. Vì D có thể dẫn xuất ra a hoặc d, nên FIRST(D) = {a, d}. Các đáp án A, B và D đều không chính xác.

Đáp án C là { a, d, epsilon }, tuy nhiên, D không dẫn xuất ra epsilon, nên epsilon không thuộc FIRST(D)

Trong trường hợp này, không có đáp án nào đúng, tuy nhiên đáp án C là gần đúng nhất nếu bỏ epsilon

Câu hỏi liên quan