Solution to I
I. S => a S a
S => a
A. Not LR(1), shift reduce conflict.
state (4) has shift reduce on LA(a)
state (4)
S => a *S a LA(a)
S => a* LA(a)
S => *a S a LA(a)
S => *a LA(a)
on S goto (6)
if LA(a) reduce (S => a)
if LA(a) shift (4)
B. See below
C. LL form:
LL => a [LL2]
LL2 => a a [LL2]
or
LL => a LL2
LL2 => a a LL2 | (empty)
state (4) has shift reduce on LA(a)
TABLE $ a S
0 s2 g1
1 r0
2 r1 s4
3 s5
4 r2/s4 g6
5 r1
6 s7
7 r1
r0: S' => S (accept)
r1: S => a S a
r2: S => a
state (0)
S' => *S LA($)
S => *a S a LA($)
S => *a LA($)
on S goto (1)
if LA(a) shift (2)
state (1)
S' => S* LA($)
if LA($) accept
state (2)
S => a *S a LA($)
S => a* LA($)
S => *a S a LA(a)
S => *a LA(a)
on S goto (3)
if LA($) reduce (S => a)
if LA(a) shift (4)
state (3)
S => a S* a LA($)
if LA(a) shift (5)
state (4)
S => a *S a LA(a)
S => a* LA(a)
S => *a S a LA(a)
S => *a LA(a)
on S goto (6)
if LA(a) reduce (S => a)
if LA(a) shift (4)
state (5)
S => a S a* LA($)
if LA($) reduce (S => a S a)
state (6)
S => a S* a LA(a)
if LA(a) shift (7)
state (7)
S => a S a* LA(a)
if LA(a) reduce (S => a S a)
top
Solution to IV
IV. S => a R b | c T b | a T d | c R d
R => x
T => x
A. LR(1), NOT LALR
reduce/reduce conflict
R => x [b,d]
T => x [b.d]
B. See below
C. LL Form
LL => AXBD | CXBD
AXBD => a x BD
CXBD => c x BD
BD => b | d
LR(1) $ a b c d x S R T
0 s2 s3 g1
1 r0
2 6 g4 g5
3 s9 g7 g8
4 s10
5 s11
6 r5 r6
7 s/12
8 s13
9 r6 r5
10 r1
11 r2
12 r3
13 r4
r0: S'=> S
r1: S => a R b
r2: S => c T b
r3: S => a T d
r4: S => c R d
r5: R => x
r6: T => x
state (0)
S'=> *S LA($)
S => *a R b LA($)
S => *c T b LA($)
S => *a T d LA($)
S => *c R d LA($)
on S goto 1
LA(a) shift 2
LA(c) shift 3
state (1)
S'=> S* LA($)
LA($) accept
state (2)
S => a *R b LA($)
S => a *T d LA($)
R => *x LA(b)
T => *x LA(d)
on R goto 4
on T goto 5
LA(x) shift 6
state (3)
S => c *T b LA($)
S => c *R d LA($)
T => *x LA(b)
R => *x LA(d)
on T goto 7
on R goto 8
LA(x) shift 9
state (4)
S => a R *b LA($)
LA(b) shift 10
state (5)
S => a T *d LA($)
LA(d) shift 11
state (6)
R => x* LA(b)
T => x* LA(d)
LA(b) reduce R => x
LA(d) reduce T => x
state (7)
S => c T *b LA($)
LA(b) shift 12
state (8)
S => c R *d LA($)
LA(d) shift 13
state (9)
T => x* LA(b)
R => x* LA(d)
LA(b) reduce T => x
LA(d) reduce R => x
state (10)
S => a R b* LA($)
LA($) reduce S => a R b
state (11)
S => a T d* LA($)
LA($) reduce S => a T d
state (12)
S => c T b* LA($)
LA($) reduce S => c T b
state (13)
S => c R d* LA($)
LA($) reduce S => c R d
top
Solution to Friday I
I.Find First and Follow sets
A => B C D | C D
B => a | B | epsilon
C => c | D C B | epsilon
D => d
===========================
WORKING DETAILS
===========================
FIRST(A) = FIRST(B)+FIRST(C)+FIRST(D)
FIRST(B) = {a,b}
FIRST(C) = {c}+FIRST(D)
FIRST(D) = {d}
FOLLOW(A) = {$}
FOLLOW(B) = FIRST(C) + FOLLOW(C)
FOLLOW(C) = FIRST(D)+FIRST(B)
FOLLOW(D) = FOLLOW(A)+FIRST(C)+FIRST(B)+FOLLOW(C)
===========================
Solution
===========================
FIRST FOLLOW
A {a b c d} {$}
B {a b} {c d}
C {c d} {a b d}
D {d} {$ a b c d}
top
Solution to Friday III
III. Find all conflicts, classify and build parsing table if possible
E => E + F
E => F
F => ( E )
F => a
F => a = E
===========================
Solution
===========================
LR(0)/SLR shift/reduce conflicts in state(4)
F => a *= E
F => a*
unresolvable LALR shift reduce conflict in state(10)
LA($,+) F => a = E*
LA($,+) E => E *+ F
on($,+) reduce r5: F => a = E
on(+) shift 5
LALR $ + ( ) a = S E F
0 s3 s4 g1 g2
1 r0 s5
2 r2 r2
3 s3 s4 g6 g7
4 r4 r4 s8
5 s3 s4 g9
6 s5 s10
7 r2 r2
8 s3 s4 g10 g2
9 r1 r1
10 r5 s5(r5)
shift/reduce conflict in state 10 resolved in favor of shift
r0: S => E
r1: E => E + F
r2: E => F
r3: F => ( E )
r4: F => a
r5: F => a = E
state(0)
LA($) S => *E
LA($) E => *E + F
LA(+) E => *E + F
LA($) E => *F
LA(+) E => *F
LA($) F => *( E )
LA(+) F => *( E )
LA($) F => *a = E
LA(+) F => *a = E
LA($) F => *a
LA(+) F => *a
on (E) goto 1
on (F) goto 2
on (() shift 3
on (a) shift 4
state(1)
LA($) S => E*
LA($,+) E => E *+ F
on ($) reduce r0: S => E (accept)
on (+) shift 5
state(2)
LA($,+) E => F*
on ($,+) reduce r2: E => F
state(3)
LA($,+) F => ( *E )
LA()) E => *E + F
LA(+) E => *E + F
LA()) E => *F
LA(+) E => *F
LA()) F => *( E )
LA(+) F => *( E )
LA(+) F => *a = E
LA()) F => *a = E
LA(+) F => *a
LA()) F => *a
on (E) goto 6
on (F) goto 7
on (() shift 3
on (a) shift 4
state(4)
LA($,+) F => a *= E
LA($,+) F => a*
on($,+) reduce r4: F => a
on(=) shift 8
state(5)
LA($,+) E => E + *F
LA($,+) F => *( E )
LA($,+) F => *a = E
LA($,+) F => *a
on(F) goto 9
on(() shift 3
on(a) shift 4
state(6)
LA($,+) F => ( E* )
LA(),+) E => E *+ F
on()) shift 10
on(+) shift 5
state(7)
LA(),+) E => F*
on(),+) reduce r2: E => F
state(8)
LA($,+) F => a =* E
LA($,+) E => *E + F
LA($,+) E => *F
LA($,+) F => *( E )
LA($,+) F => *a = E
LA($,+) F => *a
on(E) goto 10
on(F) goto 2
on(() shift 3
on(a) shift 4
state(9)
LA($,+) E => E + F*
on($,+) reduce r1: E => E + F
state(10)
LA($,+) F => a = E*
LA($,+) E => E *+ F
on($,+) reduce r5: F => a = E
on(+) shift 5
top