(Poscomp, 2023) Seja a seguinte linguagem, onde ε representa a string vazio e $ representa um marcador de fim de entrada.
G = ({S, A, B, C, D}, {a, b, c, d, e}, P, A)
P = {S → ABCD
A → aA | ε
B → bB | ε
C → cC | e
D → d | ε}É correto afirmar que:
a. O conjunto FIRST(A) é igual ao conjunto FIRST(B).
b. O conjunto FIRST(D) é igual ao conjunto FIRST(S).
c. O conjunto FIRST(C) é igual ao conjunto FOLLOW(B).
d. O conjunto FOLLOW(B) é igual ao conjunto FOLLOW(S).
e. O conjunto FOLLOW(A) é igual a FOLLOW(D).
Para respondermos a essa questão, primeiramente precisaremos calcular os conjuntos FIRST e FOLLOW de cada um dos não-terminais presentes na gramática livre de contexto apresentada.
| Não-terminal | FIRST | FOLLOW |
|---|---|---|
| S | {a, b, c, e} | {$} |
| A | {a, ε} | {b, c, e} |
| B | {b, ε} | {c, e} |
| C | {c, e} | {d, $} |
| D | {d, ε} | {$} |
Diante do exposto, vamos analisar cada uma das afirmações a seguir:
a. O conjunto FIRST(A) é igual ao conjunto FIRST(B).
FIRST(A) = {a, ε} e FIRST(B) = {b, ε}, logo FIRST(A) ≠ FIRST(B)
b. O conjunto FIRST(D) é igual ao conjunto FIRST(S).
FIRST(D) = {d, ε} e FIRST(S) = {a, b, c, e}, logo FIRST(D) ≠ FIRST(S)
c. O conjunto FIRST(C) é igual ao conjunto FOLLOW(B).
FIRST(C) = {c, e} e FOLLOW(B) = {c, e}, logo FIRST(C) = FOLLOW(B)
d. O conjunto FOLLOW(B) é igual ao conjunto FOLLOW(S).
FOLLOW(B) = {c, e} e FOLLOW(S) = {$}, logo FOLLOW(B) ≠ FOLLOW(S)
e. O conjunto FOLLOW(A) é igual a FOLLOW(D).
FOLLOW(A) = {b, c, e} e FOLLOW(D) = {$}, logo FOLLOW(A) ≠ FOLLOW(D)