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)=?
Đá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.
- 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'.
- 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'.
- 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'.
- 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'.
- 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}.