JavaScript is required

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

A.

A. {0}

B.

B. {1}

C.

C. {0,1}

D.

D. {0,1,epsilon}

Trả lời:

Đáp án đúng: D


Để tìm First(S), ta cần xem xét các luật sinh có S ở vế trái. Trong trường hợp này, ta có luật S -> AB.

  1. Nếu A dẫn xuất ra một chuỗi bắt đầu bằng terminal '0', thì '0' sẽ thuộc First(S). Luật A -> 0A cho thấy A có thể dẫn xuất ra một chuỗi bắt đầu bằng '0'.
  2. Nếu A dẫn xuất ra một chuỗi bắt đầu bằng terminal '1', thì '1' sẽ thuộc First(S). Luật A -> 1 cho thấy A có thể dẫn xuất ra '1'.
  3. Nếu A dẫn xuất ra epsilon (chuỗi rỗng), ta cần xét đến B. Nếu B dẫn xuất ra một chuỗi bắt đầu bằng terminal '0', thì '0' sẽ thuộc First(S). Luật B -> 0 cho thấy B có thể dẫn xuất ra '0'.
  4. Nếu A dẫn xuất ra epsilon, và B dẫn xuất ra một chuỗi bắt đầu bằng terminal '1', thì '1' sẽ thuộc First(S). Luật B -> 1A cho thấy B có thể dẫn xuất ra chuỗi bắt đầu bằng '1'.
  5. Nếu A và B đều dẫn xuất ra epsilon, thì epsilon thuộc First(S).

Tuy nhiên, câu hỏi này chỉ yêu cầu First(S) mà không yêu cầu phải loại bỏ epsilon nếu có. Vậy, First(S) = {0, 1}.

Câu hỏi liên quan