JavaScript is required

Cho văn phạm với các luật sinh: S->aAb; S->c; A->mSn. FOLLOW(S) =?

A.

{b,a}

B.

{a}

C.

{c,n}

D.

{n}

Trả lời:

Đáp án đúng: D


Để tìm FOLLOW(S), ta thực hiện theo các bước sau:

\r\n
    \r\n
  1. \r\n

    Bước 1: Đặt $ vào FOLLOW(S), trong đó S là ký hiệu bắt đầu.

    \r\n
  2. \r\n
  3. \r\n

    Bước 2: Nếu có luật sinh A -> αBβ, thì mọi phần tử của FIRST(β) (ngoại trừ ε) được thêm vào FOLLOW(B).

    \r\n
  4. \r\n
  5. \r\n

    Bước 3: Nếu có luật sinh A -> αB, hoặc A -> αBβ, trong đó FIRST(β) chứa ε, thì mọi phần tử của FOLLOW(A) được thêm vào FOLLOW(B).

    \r\n
  6. \r\n
\r\n

Áp dụng vào văn phạm đã cho:

\r\n
    \r\n
  1. \r\n

    S là ký hiệu bắt đầu, nên $ ∈ FOLLOW(S)

    \r\n
  2. \r\n
  3. \r\n

    Xét luật sinh S -> aAb. Ta thấy b theo sau A, nên FIRST(b) = {b} sẽ được thêm vào FOLLOW(A).

    \r\n
  4. \r\n
  5. \r\n

    Xét luật sinh A -> mSn. Ta thấy n theo sau S, nên FIRST(n) = {n} sẽ được thêm vào FOLLOW(S).

    \r\n
  6. \r\n
  7. \r\n

    Vậy FOLLOW(S) = {$, n}. Vì không có đáp án nào trùng khớp, nên câu hỏi không có đáp án đúng.

    \r\n
  8. \r\n

Câu hỏi liên quan