E -> TQ Q -> +TQ | -TQ | e T -> FR R -> *FR | /FR | e F -> (E) | i
First(E) = First(T) = First(F) = { (, i}
First(R) = {*, /, e}
First(Q) = { +, - ,e}
First(+TQ) = {+}
First(-TQ) = {-}
First(*RF) = {*}
First(/RF) = {/}
Follow(E) = {$, )}
Follow(Q) = Follow(E)
Follow(T) = {+,-,),$}
Follow(R) = Follow(T)
Follow(F) = {+,-,*,/,),$}
| i | + | - | * | / | ( | ) | $ | |
| E | TQ | TQ | ||||||
| Q | +TQ | -TQ | e | e | ||||
| T | FR | FR | ||||||
| R | e | e | *FR | /FR | e | e | ||
| F | i | (E) |
A-> aQ Q-> bE | cF
S -> if E then S | if E then S else S | a | b E -> x | y
S -> if E then S Q | a | b E -> x | y Q -> else S | e
First(S) = {if,a,b}
First(Q) = {else, e }
Follow(S) = {$,else}
Follow(Q) = Follow(S)
| if | x | y | then | a | b | else | $ | |
| S | if E then S Q | a | b | |||||
| E | ||||||||
| Q | else S | e | e |
E => E + E => E + E * E => E + E * i => E + i * i => i + i * i
i + i * i see first i use E-> i to reduce i to E E + i * i ignore + for now reduce i to E E + E * i ignore * reduce i to E E + E * E reduce E*E E + E reduce E + E E
line Stack Input Production 1 i + i * i 2 i + i * i 3 E + i * i E-> i 4 E + i * i 5 E + i * i 6 E + E * i E ->i why not reduce E-> E+E here? 7 E + E * i 8 E + E * i 9 E + E * E E->i 10 E + E E -> E*E 11 E E -> E+ E
E-> E + E | E * E | (E) | i
| Stack | Input | Production | |
| 1 | $ | < i + i * i $ | |
| 2 | $<i | > + i * i$ | E -> i |
| 3 | $E | < + i * i$ | See through E and compare + and $ |
| 4 | $< E + | > i * i$ | |
| 5 | $<E + <i | > * i$ | |
| 6 | $<E + E | > * i$ | E -> i |
| 7 | $<E + <E * | > i$ | |
| 8 | $<E + <E * <i | > $ | E->i |
| 9 | $<E + <E * <E | > $ | E->E * E |
| 10 | $<E + E | > $ | E -> E + E |
| 11 | $E | $ |