# FirstAndFollowSets

Here's the sample grammar for this problem:

```E → T E'
E' → + T E'
E' → ε
T → F T'
T' → * F T'
T' → ε
F → (E)
F → id
```

## Rules for First Sets

1. If X is a terminal, then FIRST(X) = {X}.
2. If there is a Production X → ε then add ε to first(X)
3. If there is a Production X → Y1Y2..Yk then add first(Y1Y2..Yk) to first(X)
4. First(Y1Y2..Yk) is either
5. First(Y1) (if First(Y1) doesn't contain ε)

OR (if First(Y1) does contain ε) then First (Y1Y2..Yk) is everything in First(Y1) <except for ε > as well as everything in First(Y2..Yk)

1. If First(Y1) First(Y2)..First(Yk) all contain ε then add ε to First(Y1Y2..Yk) as well.

## Rule for Follow Sets

1. First put \$ in FOLLOW(S). S is the start symbol, and \$ is the input right endmarker.
2. If there is a production of the form A → aBb, and we want to compute FOLLOW(B), then this is everything in FIRST(b) except for ε.
3. Now what if FIRST(b) above did contain ε or the production is of the form A → aB? Then everything in FOLLOW(A) is added to FOLLOW(B).