LR(1) for Bill McKeeman Dartmouth April 18, 2008 E ← T ┤ T ← F F ← i F ← ( T ) Bill McKeeman Dartmouth April 18, 2008
a simple expression cfg E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) a simple expression cfg end-of-file symbol
E ← ▫ T ┤ E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) LR start state
marked rules closure for T lookahead kernel in red closure in green E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F ┤ E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) marked rules closure for T lookahead kernel in red closure in green
closure for F E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤
another closure for T E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i
another closure for F E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i
merge lookaheads closure complete E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) merge lookaheads closure complete
shift T new kernel E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← T ▫ ┤ T ← T ▫ * F ┤* shift T new kernel
shift F another new kernel E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i ┤* E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← T ▫ ┤ T ← T ▫ * F ┤* T ← F ▫ ┤* shift F another new kernel
shift i another new kernel E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i ┤* E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← T ▫ ┤ T ← T ▫ * F ┤* T ← F ▫ ┤* shift i F ← i ▫ ┤* another new kernel
1 finish state 1 shift ( another new kernel E ← ▫ T ┤ T ← ▫ F ┤* E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) 1 E ← T ▫ ┤ T ← T ▫ * F ┤* finish state 1 T ← F ▫ ┤* shift ( F ← i ▫ ┤* another new kernel F ← ( ▫ T ) ┤*
1 closure E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* E ← T ┤ ) *
shift ┤ (final LR state) E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* E ← T ┤ ▫ E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) 1 E ← T ▫ ┤ T ← T ▫ * F ┤* shift ┤ (final LR state) T ← F ▫ ┤* F ← i ▫ ┤* F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) *
1 2 shift * 3 finish states 2,3,4 4 E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F ┤* E ← T ┤ ▫ E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) T ← T * ▫ F ┤* 1 E ← T ▫ ┤ T ← T ▫ * F ┤* 2 shift * 3 T ← F ▫ ┤* finish states 2,3,4 4 F ← i ▫ ┤* F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) *
1 2 closure 3 4 E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) *
1 2 3 4 shift T E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * E ← T ▫ ┤ T ← T ▫ * F ┤* 2 3 T ← F ▫ ┤* 4 F ← i ▫ ┤* shift T F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) *
1 2 3 4 shift F E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * E ← T ▫ ┤ T ← T ▫ * F ┤* 2 T ← F ▫ ) * 3 T ← F ▫ ┤* 4 F ← i ▫ ┤* shift F F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) *
1 2 3 4 shift i E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * E ← T ▫ ┤ T ← T ▫ * F ┤* 2 T ← F ▫ ) * 3 T ← F ▫ ┤* F ← i ▫ ) * 4 F ← i ▫ ┤* shift i F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) *
1 2 3 4 shift ( 5 finish state 5 E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i ┤* E ← T ┤ ▫ E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 1 F ← ( T ▫ ) T ← T ▫ * F ┤* ) * E ← T ▫ ┤ T ← T ▫ * F ┤* 2 T ← F ▫ ) * 3 T ← F ▫ ┤* F ← i ▫ ) * 4 F ← i ▫ ┤* shift ( F ← ( ▫ T ) ) * F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 5 finish state 5
1 2 3 4 closure 5 E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * E ← T ▫ ┤ T ← T ▫ * F ┤* 2 T ← F ▫ ) * 3 T ← F ▫ ┤* F ← i ▫ ) * 4 F ← i ▫ ┤* closure F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 5
6 7 4 1 5 2 finish state 6 shift on F and I and ( finish state 7 E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* 6 E ← T ┤ ▫ T ← T * F ▫ ┤* 7 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 4 F ← i ▫ ┤* 1 5 F ← ( ▫ T ) ┤* F ← ( T ▫ ) T ← T ▫ * F ┤* ) * E ← T ▫ ┤ T ← T ▫ * F ┤* 2 finish state 6 shift on F and I and ( finish state 7 repeat state 4 and 5 T ← F ▫ ) * 3 T ← F ▫ ┤* F ← i ▫ ) * 4 F ← i ▫ ┤* F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 5
6 7 4 1 5 8 2 9 3 10 4 shift on ) and * finish states 8,9,10 5 E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* 6 E ← T ┤ ▫ T ← T * F ▫ ┤* 7 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 4 F ← i ▫ ┤* 1 5 F ← ( ▫ T ) ┤* F ← ( T ▫ ) T ← T ▫ * F ┤* ) * F ← ( T ) ▫ ┤* E ← T ▫ ┤ T ← T ▫ * F ┤* 8 2 T ← T * ▫ F ) * 9 T ← F ▫ ) * 3 T ← F ▫ ┤* 10 F ← i ▫ ) * 4 F ← i ▫ ┤* shift on ) and * finish states 8,9,10 F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 5
6 7 4 1 5 8 2 9 3 10 4 closure 5 E ← T ┤ T ← F T ← T * F F ← i ┤* 6 E ← T ┤ ▫ T ← T * F ▫ ┤* 7 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 4 F ← i ▫ ┤* 1 5 F ← ( ▫ T ) ┤* F ← ( T ▫ ) T ← T ▫ * F ┤* ) * F ← ( T ) ▫ ┤* E ← T ▫ ┤ T ← T ▫ * F ┤* 8 2 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ) * 9 T ← F ▫ ) * 3 T ← F ▫ ┤* 10 F ← i ▫ ) * 4 F ← i ▫ ┤* F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * closure 5
shift on T and F and i and ( E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* 6 E ← T ┤ ▫ 12 T ← T * F ▫ ┤* 7 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 4 F ← i ▫ ┤* 1 5 F ← ( ▫ T ) ┤* F ← ( T ▫ ) T ← T ▫ * F ┤* ) * 13 F ← ( T ) ▫ ┤* E ← T ▫ ┤ T ← T ▫ * F ┤* 8 2 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ) * 9 T ← F ▫ ) * 3 T ← F ▫ ┤* 10 F ← i ▫ ) * 4 F ← i ▫ ┤* 11 F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( T ▫ ) T ← T ▫ * F ) * F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 9 T ← F ▫ ) * 5 10 F ← i ▫ ) * 11 F ← ( ▫ T ) ) * shift on T and F and i and ( finish state 11, repeat states 9,10,11, finish states 12,13
finish state 14, repeat states 10,11 E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* 6 E ← T ┤ ▫ 12 T ← T * F ▫ ┤* 7 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 4 F ← i ▫ ┤* 1 5 F ← ( ▫ T ) ┤* F ← ( T ▫ ) T ← T ▫ * F ┤* ) * 13 F ← ( T ) ▫ ┤* E ← T ▫ ┤ T ← T ▫ * F ┤* 8 2 T ← T * F ▫ ) * 14 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ) * 9 T ← F ▫ ) * 11 F ← i ▫ ) * 3 T ← F ▫ ┤* 10 F ← i ▫ ) * 10 F ← ( ▫ T ) ) * 4 F ← i ▫ ┤* 11 F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( T ▫ ) T ← T ▫ * F ) * F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 9 T ← F ▫ ) * 5 10 F ← i ▫ ) * 11 F ← ( ▫ T ) ) * shift on F and i and ( finish state 14, repeat states 10,11
shift ) and *, finish state 15, repeat state 14 E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* 6 E ← T ┤ ▫ 12 T ← T * F ▫ ┤* 7 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 4 F ← i ▫ ┤* 1 5 F ← ( ▫ T ) ┤* F ← ( T ▫ ) T ← T ▫ * F ┤* ) * 13 F ← ( T ) ▫ ┤* E ← T ▫ ┤ T ← T ▫ * F ┤* 8 2 T ← T * F ▫ ) * 14 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ) * 9 T ← F ▫ ) * 11 F ← i ▫ ) * 3 T ← F ▫ ┤* 10 F ← i ▫ ) * 10 F ← ( ▫ T ) ) * 4 F ← i ▫ ┤* 11 F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( T ▫ ) T ← T ▫ * F ) * F ← ( T ) ▫ ) * 15 F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 14 T ← T * ▫ F ) * 9 T ← F ▫ ) * 5 10 F ← i ▫ ) * 11 F ← ( ▫ T ) ) * shift ) and *, finish state 15, repeat state 14
E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) E ← ▫ T ┤ T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* 6 E ← T ┤ ▫ 12 T ← T * F ▫ ┤* 7 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ┤* 4 F ← i ▫ ┤* 1 5 F ← ( ▫ T ) ┤* F ← ( T ▫ ) T ← T ▫ * F ┤* ) * 13 F ← ( T ) ▫ ┤* E ← T ▫ ┤ T ← T ▫ * F ┤* 8 2 16 T ← T * F ▫ ) * 14 T ← T * ▫ F F ← ▫ i F ← ▫ ( T ) ) * 9 T ← F ▫ ) * 11 F ← i ▫ ) * 3 T ← F ▫ ┤* 10 F ← i ▫ ) * 10 F ← ( ▫ T ) ) * 4 F ← i ▫ ┤* 11 F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ) * F ← ( T ▫ ) T ← T ▫ * F ) * 17 F ← ( T ) ▫ ) * 15 F ← ( ▫ T ) T ← ▫ F T ← ▫ T * F F ← ▫ i F ← ▫ ( T ) ┤* ) * 14 T ← T * ▫ F ) * 9 T ← F ▫ ) * 5 10 F ← i ▫ ) * 11 F ← ( ▫ T ) ) * finish states 16,17
The LR Matrix symbols stack input states i * i ┤ 1 1i4 * i ┤ 1F * i ┤ ( ) 1 2 3 4 5 6 7 -2 -4 8 9 10 11 -1 12 14 13 15 -3 -5 16 17 -1: -2: -3: -4: -5: E ← T ┤ T ← F T ← T * F F ← i F ← ( T ) i * i ┤ 1 1i4 * i ┤ 1F * i ┤ 1F3 * i ┤ 1T * i ┤ 1T2 * i ┤ 1T2*7 i ┤ states 1T2*7i4 ┤ 1T2*7F ┤ 1T2*7F12 ┤ 1T ┤ 1T2 ┤ 1T2 ┤6 E