Ahmad Yoosofan
Compiler course
University of Kashan
a | b | $ | |
---|---|---|---|
A | A → a B | ||
B | B → a | B → b A |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | a | b A |
a | b | $ | |
---|---|---|---|
A | 1 | ||
B | 3 | 2 |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | a | b A |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | a | b A |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | a | b A |
Stack | input | action |
---|---|---|
$ A | a b a a $ | A → a B |
$ B a | a b a a $ | Remove a |
$ B | b a a $ | B → b A |
$ A b | b a a $ | Remove b |
$ A | a a $ | A → a B |
$ B a | a a $ | Remove a |
$ B | a $ | B → a |
$ a | a $ | Remove a |
$ | $ | accept |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | a | b A |
Stack | input | action |
---|---|---|
A $ | b $ | Reject |
Stack | input | action |
---|---|---|
A $ | a b a b $ | A → a B |
a B $ | a b a b $ | Remove a |
B $ | b a b $ | B → b A |
b A$ | b a b $ | Remove b |
A$ | a b $ | A → a B |
a B$ | a b $ | Remove a |
B$ | b $ | B → b A |
bA$ | b $ | Remove b |
A$ | $ | Reject |
Stack | input | action |
---|---|---|
A $ | a b b b $ | A → a B |
a B $ | a b b b $ | Remove a |
B $ | b b b $ | B → b A |
b A$ | b b b $ | Remove b |
A$ | b b $ | Reject |
first
a | b | $ | |
---|---|---|---|
A | a B | ||
B | b A |
Stack | input | action |
---|---|---|
A $ | a b a $ | A → a B |
a B $ | a b a $ | Remove a |
B $ | b a $ | B → b A |
b A $ | b a $ | Remove b |
A $ | a $ | A → a B |
a B $ | a $ | Remove a |
B $ | $ | B → λ |
$ | $ | accept |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | b A | λ |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | λ | b A | λ |
Stack | input | action |
---|---|---|
A $ | a a $ | A → a B |
a B $ | a a $ | Remove a |
B $ | a $ | B → λ |
$ | a $ | Reject |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | b A | λ |
Stack | input | action |
---|---|---|
A $ | a a $ | A → a B |
a B $ | a a $ | Remove a |
B $ | a $ | Reject |
a | b | $ | |
---|---|---|---|
A | a B | ||
B | b A | λ |
Stack | input | action |
---|---|---|
A $ | a a $ | A → a B |
a B $ | a a $ | Remove a |
B $ | a $ | Reject |
Some text books use id instead of a
Remove Left Factor
a | + | * | ( | ) | $ | |
---|---|---|---|---|---|---|
E | T E' | T E' | ||||
E' | + E | |||||
T | F T' | F T' | ||||
T' | * T | |||||
F | a | ( E ) |
Remove Left Factor
a | + | * | ( | ) | $ | |
---|---|---|---|---|---|---|
E | T E' | T E' | ||||
E' | λ | + E | λ | λ | λ | λ |
T | F T' | F T' | ||||
T' | λ | λ | * T | λ | λ | λ |
F | a | ( E ) |
a | + | * | ( | ) | $ | |
---|---|---|---|---|---|---|
E | T E' | T E' | ||||
E' | + E | λ | λ | |||
T | F T' | F T' | ||||
T' | λ | * T | λ | λ | ||
F | a | ( E ) |
Stack | input | action |
---|---|---|
E $ | a + a * a $ | E → T E' |
T E' $ | a + a * a $ | T → F T' |
F T' E' $ | a + a * a $ | F → a |
a T' E' $ | a + a * a $ | Remove a |
T' E' $ | + a * a $ | T' → λ |
E' $ | + a * a $ | E' → + E |
+ E $ | + a * a $ | Remove + |
E $ | a * a $ | E → T E' |
T E' $ | a * a $ | T → F T' |
F T' E' $ | a * a $ | F → a |
a T' E' $ | a * a $ | Remove a |
T' E' $ | * a $ | T' → * T |
* T E' $ | * a $ | Remove * |
T E' $ | a $ | T → F T' |
F T' E' $ | a $ | F → a |
a T' E' $ | a $ | Remove a |
T' E' $ | $ | T' → λ |
E' $ | $ | E' → λ |
$ | $ | accept |
Remove Left Factor
Production Rules
Follow sets
a | + | * | ( | ) | $ | |
---|---|---|---|---|---|---|
E | T E' | T E' | ||||
E' | + E | |||||
T | F T' | F T' | ||||
T' | * T | |||||
F | a | ( E ) |
a | + | * | ( | ) | $ | |
---|---|---|---|---|---|---|
E | T E' | T E' | ||||
E' | + E | λ | λ | |||
T | F T' | F T' | ||||
T' | λ | * T | λ | λ | ||
F | a | ( E ) |
Stack | input | action |
---|---|---|
E $ | a + a $ | E → F T' |
F T' $ | a + a $ | F → a |
a T' $ | b a a $ | B → b A |
b A $ | b a a $ | Remove b |
A $ | a a $ | A → a B |
a B $ | a a $ | Remove a |
B $ | a $ | B → a |
a $ | a $ | Remove a |
$ | $ | accept |
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | E + T | E - T | T | E + T | E - T | T | ||||||
T | T * F | T / F | F | T * F | T / F | F | ||||||
F | a | ( E ) |
Convert to
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | T E' | T E' | ||||||
E' | + T E' | - T E' | ||||||
T | F T' | F T' | ||||||
T' | * F T' | / F T' | ||||||
F | a | ( E ) |
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | T E' | T E' | ||||||
E' | + T E' | - T E' | ||||||
T | F T' | F T' | ||||||
T' | * F T' | / F T' | ||||||
F | a | ( E ) |
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | T E' | T E' | ||||||
E' | + T E' | - T E' | ||||||
T | F T' | F T' | ||||||
T' | * F T' | / F T' | λ | |||||
F | a | ( E ) |
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | T E' | T E' | ||||||
E' | + T E' | - T E' | λ | |||||
T | F T' | F T' | ||||||
T' | * F T' | / F T' | λ | |||||
F | a | ( E ) |
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | T E' | T E' | ||||||
E' | + T E' | - T E' | ||||||
T | F T' | F T' | ||||||
T' | * F T' | / F T' | ||||||
F | a | ( E ) |
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | T E' | T E' | ||||||
E' | + T E' | - T E' | λ | λ | ||||
T | F T' | F T' | ||||||
T' | λ | λ | * F T' | / F T' | λ | λ | ||
F | a | ( E ) |
Stack | input | action |
---|---|---|
E $ | .a - a / a $ | E → T E' |
T E' $ | .a - a / a $ | T → F T' |
F T' E' $ | .a - a / a $ | F → a |
a T' E' $ | .a - a / a $ | Remove a |
T' E' $ | . - a / a $ | T' → λ |
E' $ | . - a / a $ | E' → - T E' |
- T E' $ | . - a / a $ | Remove - |
T E' $ | . a / a $ | T → F T' |
F T' E' $ | . a / a $ | F → a |
a T' E' $ | . a / a $ | Remove a |
T' E' $ | . / a $ | T' → / F T' |
/ F T' E' $ | . / a $ | Remove / |
F T' E' $ | . a $ | F → a |
a T' E' $ | . a $ | Remove a |
T' E' $ | . $ | T' → λ |
E' $ | . $ | E' → λ |
$ | . $ | accept |
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | TE' | TE' | ||||||
E' | + TE' | - TE' | λ | λ | ||||
T | FT' | FT' | ||||||
T' | λ | λ | * FT' | / FT' | λ | λ | ||
F | a | (`E)` |
Stack | input | action |
---|---|---|
E $ | .( a + a ) a$ | E → T E' |
T E' $ | .( a + a ) a$ | T → F T' |
F T' E' $ | .( a + a ) a$ | F → ( E ) |
( E ) T' E' $ | .( a + a ) a$ | Remove ( |
E ) T' E' $ | . a + a ) a$ | E → T E' |
T E' ) T' E' $ | . a + a ) a$ | T → F T' |
F T' E' ) T' E'$ | . a + a ) a$ | F → a |
a T' E' ) T' E'$ | . a + a ) a$ | Remove a |
T' E' ) T' E' $ | . + a ) a $ | T' → λ |
E' ) T' E' $ | . + a ) a $ | E' → + T E' |
+ T E' ) T' E'$ | . + a ) a $ | Remove + |
T E' ) T' E' $ | . a ) a $ | T → F T' |
F T' E' ) T' E'$ | . a ) a $ | F → a |
a T' E' ) T' E'$ | . a ) a $ | Remove a |
T' E' ) T' E' $ | . ) a $ | T' → λ |
E' ) T' E' $ | . ) a $ | E' → λ |
) T' E' $ | . ) a $ | Remove ) |
T' E' $ | . a $ | T' → λ |
E' $ | . a $ | E' → λ |
$ | . a $ | Reject |
∪ follow(E') = {+, -, ), $}
{ *, /, +, -, $}
= {*, /} ∪ { *, /, +, -, $} = { *, /, +, -, $}
.
a | + | - | * | / | ( | ) | $ | |
---|---|---|---|---|---|---|---|---|
E | TE' | TE' | ||||||
E' | +TE' | -TE' | λ | λ | ||||
T | FT' | FT' | ||||||
T' | λ | λ | *FT' | /FT' | λ | λ | ||
F | a | (E) |
i | r | e | o | ( | ) | $ | |
---|---|---|---|---|---|---|---|
S | i(r)SA | o | |||||
A | eS/λ | λ |
End