Reputation: 37
all the lower case and the λ are terminal symbols
I need help deriving the follow set of this grammar. I normally do not have trouble with these problems and I know the rules, but when I practiced this example from my book this is the only thing I could get:
Follow(S) = {$} U Follow(E)
Follow(C) =
Follow(E) =
Upvotes: 0
Views: 381
Reputation: 85877
According to https://www.cs.uaf.edu/~cs331/notes/FirstFollow.pdf:
To compute FOLLOW(A) for all nonterminals A, apply the following rules until nothing can be added to any FOLLOW set:
- Place $ in FOLLOW(S), where S is the start symbol and $ is the input right endmarker.
- If there is a production A ⇒ αΒβ, then everything in FIRST(β), except for ε, is placed in FOLLOW(B).
- If there is a production A ⇒ αΒ, or a production A ⇒ αΒβ where FIRST(β) contains ε (i.e., β ⇒ε), then everything in FOLLOW(A) is in FOLLOW(B).
Assuming S
is the start symbol in your grammar and λ
represents an empty string, we get:
{$} ⊆ Follow(S)
by rule 1.(First(E) \ {λ}) ⊆ Follow(S)
by rule 2 / production 2.Follow(E) ⊆ Follow(S)
by rule 3 / production 4.(First(then S E) \ {λ}) ⊆ Follow(C)
by rule 2 / production 2.Follow(S) ⊆ Follow(E)
by rule 3 / production 2.First(then S E)
is just then
(because it's terminal), so we have {then} ⊆ Follow(C)
.
This is the only constraint on Follow(C)
, so the smallest set that satisfies it is:
Follow(C) = {then}
Because we have Follow(E) ⊆ Follow(S)
and Follow(S) ⊆ Follow(E)
, it follows (hah) that they're equal:
Follow(E) = Follow(S)
Finally we have
Follow(S) = {$} ∪ (First(E) \ {λ})
Fortunately First(E)
is easy because E
only has two productions, one of which is empty and the other starts with a terminal symbol:
First(E) = {λ, else}
Therefore
Follow(S) = {$, else}
and
Follow(E) = {$, else}
Upvotes: 1