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(C) =?

A.

{ a, epsilon }

B.

{ a, b, epsilon }

C.

{ c, epsilon }

D.

{ b, epsilon }

Trả lời:

Đáp án đúng: C


Để tìm FIRST(C), ta xem xét các luật sinh có C ở vế trái. Trong văn phạm này, ta có luật C → c hoặc C-> D. Do đó, FIRST(C) sẽ chứa 'c'.
Tiếp theo ta xét luật D -> a hoặc D -> d, tức là FIRST(D) = {a, d}. Tuy nhiên, vì C -> D chứ không phải C -> epsilon D, nên FIRST(D) không đóng góp epsilon vào FIRST(C). Vì vậy, FIRST(C) chỉ chứa 'c'. Trong các đáp án đã cho, không có đáp án nào chính xác. Đáp án gần đúng nhất là C, nếu bỏ epsilon đi thì đáp án C đúng

Tuy nhiên, do không có đáp án đúng nên ta sẽ chọn đáp án gần đúng nhất.

Câu hỏi liên quan