E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
------------------------------------------------- -------------------------------------------------
| int | + | * | ( | ) | $ | | int | + | * | ( | ) | $ |
------------------------------------------------- -------------------------------------------------
E | T E' | | | T E' | | | E | T E' | | | T E' | | |
E' | | + T E' | | | ε | ε | E' | | + T E' | | | | |
T | F T' | | | F T' | | | T | F T' | | | F T' | | |
T' | | ε | * F T'| | ε | ε | T' | | | * F T'| | | |
F | int | | | (E) | | | F | int | | | (E) | | |
------------------------------------------------- -------------------------------------------------
+ T E') = {+}F T') =* F T') = {*}int) = {int},(E)) = {(}E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
------------------------------------------------- -------------------------------------------------
| int | + | * | ( | ) | $ | | int | + | * | ( | ) | $ |
------------------------------------------------- -------------------------------------------------
E | T E' | | | T E' | | | E | T E' | | | T E' | | |
E' | | + T E' | | | ε | ε | E' | | + T E' | | | | |
T | F T' | | | F T' | | | T | F T' | | | F T' | | |
T' | | ε | * F T'| | ε | ε | T' | | | * F T'| | | |
F | int | | | (E) | | | F | int | | | (E) | | |
------------------------------------------------- -------------------------------------------------
+ T E') = {+}F T') = FIRST(F) = {int, (}* F T') = {*}int) = {int}(E)) = {(}E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
------------------------------------------------- -------------------------------------------------
| int | + | * | ( | ) | $ | | int | + | * | ( | ) | $ |
------------------------------------------------- -------------------------------------------------
E | T E' | | | T E' | | | E | T E' | | | T E' | | |
E' | | + T E' | | | ε | ε | E' | | + T E' | | | | |
T | F T' | | | F T' | | | T | F T' | | | F T' | | |
T' | | ε | * F T'| | ε | ε | T' | | | * F T'| | | |
F | int | | | (E) | | | F | int | | | (E) | | |
------------------------------------------------- -------------------------------------------------
| Stack | Remaining input | Action |
|---|---|---|
E $ |
( int + int ) * int $ |
δ[E, (] = T E' |
T E' $ |
( int + int ) * int $ |
δ[T, (] = F T' |
F T' E' $ |
( int + int ) * int $ |
δ[F, (] = ( E ) |
( E ) T' E' $ |
( int + int ) * int $ |
Match ( |
E ) T' E' $ |
int + int ) * int $ |
δ[E, int] = T E' |
T E' ) T' E' $ |
int + int ) * int $ |
δ[T, int] = F T' |
F T' E' ) T' E' $ |
int + int ) * int $ |
δ[F, int] = int |
int T' E' ) T' E' $ |
int + int ) * int $ |
Match int |
T' E' ) T' E' $ |
+ int ) * int $ |
δ[T', +] = ε |
E' ) T' E' $ |
+ int ) * int $ |
δ[E', +] = + T E' |
+ T E' ) T' E' $ |
+ int ) * int $ |
Match + |
T E' ) T' E' $ |
int ) * int $ |
δ[T, int] = F T' |
F T' E' ) T' E' $ |
int ) * int $ |
δ[F, int] = int |
int T' E' ) T' E' $ |
int ) * int $ |
Match int |
T' E' ) T' E' $ |
) * int $ |
δ[T', )] = ε |
E' ) T' E' $ |
) * int $ |
δ[E', )] = ε |
) T' E' $ |
) * int $ |
Match ) |
T' E' $ |
* int $ |
δ[T', *] = * F T' |
* F T' E' $ |
* int $ |
Match * |
F T' E' $ |
int $ |
δ[F, int] = int |
int T' E' $ |
int $ |
Match int |
T' E' $ |
$ |
δ[T', $] = ε |
E' $ |
$ |
δ[E', $] = ε |
$ |
$ |
Accept |
E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
------------------------------------------------- -------------------------------------------------
| int | + | * | ( | ) | $ | | int | + | * | ( | ) | $ |
------------------------------------------------- -------------------------------------------------
E | T E' | | | T E' | | | E | T E' | | | T E' | | |
E' | | + T E' | | | ε | ε | E' | | + T E' | | | | |
T | F T' | | | F T' | | | T | F T' | | | F T' | | |
T' | | ε | * F T'| | ε | ε | T' | | | * F T'| | | |
F | int | | | (E) | | | F | int | | | (E) | | |
------------------------------------------------- -------------------------------------------------
T'...=> +... possible?E'...=> )... possible?E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
------------------------------------------------- -------------------------------------------------
| int | + | * | ( | ) | $ | | int | + | * | ( | ) | $ |
------------------------------------------------- -------------------------------------------------
E | T E' | | | T E' | | | E | T E' | | | T E' | | |
E' | | + T E' | | | ε | ε | E' | | + T E' | | | | |
T | F T' | | | F T' | | | T | F T' | | | F T' | | |
T' | | ε | * F T'| | ε | ε | T' | | | * F T'| | | |
F | int | | | (E) | | | F | int | | | (E) | | |
------------------------------------------------- -------------------------------------------------
T'...=> +... possible?E'...=> )... possible?T'? What terminal can follow E'?E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
---------------------------------
| FIRST | FOLLOW
---------------------------------
E | {int, (} | {$
E' | {+, ε} |
T | {int, (} |
T' | {*, ε} |
F | {int, (} |
---------------------------------
E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
---------------------------------
FIRST | FOLLOW
---------------------------------
E | {int, (} | {$, )}
E' | {+, ε} | {$, )}
T | {int, (} | {+, $, )}
T' | {*, ε} | {+, $, )}
F | {int, (} | {*, +, $, )}
---------------------------------
E : T E'
E': + T E' | ε
T : F T'
T': * F T' | ε
F: int | (E)
---------------------------------
FIRST | FOLLOW
---------------------------------
E | {int, (} | {$, )}
E' | {+, ε} | {$, )}
T | {int, (} | {+, $, )}
T' | {*, ε} | {+, $, )}
F | {int, (} | {*, +, $, )}
---------------------------------
-------------------------------------------------
| int | + | * | ( | ) | $ |
-------------------------------------------------
E | T E' | | | T E' | | |
E' | | + T E' | | | ε | ε |
T | F T' | | | F T' | | |
T' | | ε | * F T'| | ε | ε |
F | int | | | (E) | | |
-------------------------------------------------
| Stack | Remaining input | Action |
|---|---|---|
E $ |
( int + int ) * int $ |
δ[E, (] = T E' |
T E' $ |
( int + int ) * int $ |
δ[T, (] = F T' |
F T' E' $ |
( int + int ) * int $ |
δ[F, (] = ( E ) |
( E ) T' E' $ |
( int + int ) * int $ |
Match ( |
E ) T' E' $ |
int + int ) * int $ |
δ[E, int] = T E' |
T E' ) T' E' $ |
int + int ) * int $ |
δ[T, int] = F T' |
F T' E' ) T' E' $ |
int + int ) * int $ |
δ[F, int] = int |
int T' E' ) T' E' $ |
int + int ) * int $ |
Match int |
T' E' ) T' E' $ |
+ int ) * int $ |
δ[T', +] = ε |
E' ) T' E' $ |
+ int ) * int $ |
δ[E', +] = + T E' |
+ T E' ) T' E' $ |
+ int ) * int $ |
Match + |
T E' ) T' E' $ |
int ) * int $ |
δ[T, int] = F T' |
F T' E' ) T' E' $ |
int ) * int $ |
δ[F, int] = int |
int T' E' ) T' E' $ |
int ) * int $ |
Match int |
T' E' ) T' E' $ |
) * int $ |
δ[T', )] = ε |
E' ) T' E' $ |
) * int $ |
δ[E', )] = ε |
) T' E' $ |
) * int $ |
Match ) |
T' E' $ |
* int $ |
δ[T', *] = * F T' |
* F T' E' $ |
* int $ |
Match * |
F T' E' $ |
int $ |
δ[F, int] = int |
int T' E' $ |
int $ |
Match int |
T' E' $ |
$ |
δ[T', $] = ε |
E' $ |
$ |
δ[E', $] = ε |
$ |
$ |
Accept |