Download presentation
Presentation is loading. Please wait.
1
Compiler Construction
Sohail Aslam Lecture 27 compiler: Bottom-up Parsing
2
else if [A → a, a] Ii and A S' then Action[i,a] ← “reduce A → a”
for each item Ii CC if [A → aab, b] Ii and goto(Ii, a) == Ij then Action[i,a] ← “shift j” else if [A → a, a] Ii and A S' then Action[i,a] ← “reduce A → a” end of lec 26 compiler: Bottom-up Parsing
3
else if [S' → S, $] Ii then Action[i,a] ← “accept” end for
// the goto table for each non-terminal A G if goto(Ii, A) = Ij then Goto[i, A] j
4
LR Table Construction The initial state is the one that contains the item [S' → S, $] All remaining entries are marked “error”
5
LR Table Construction The initial state is the one that contains the item [S' → S, $] All remaining entries are marked “error”
6
Table Construction Example
1. S' → E 2. E → T – E 3. E → T 4. T → F T 5. T → F 6. F → id
7
Symbol FIRST S' { id } E { id } T { id } F { id } id { id } { } – { – }
8
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
9
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
10
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
11
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
12
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
13
I1 = {goto(I0, E)} {[S' → E, $] } I2 = {goto(I0, T)} {[E → T – E,$], [E →T,$]}
14
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
15
I1 = {goto(I0, E)} {[S' → E, $] } I2 = {goto(I0, T)} {[E → T – E,$], [E →T,$]}
16
I1 = {goto(I0, E)} {[S' → E, $] } I2 = {goto(I0, T)} {[E → T – E,$], [E →T,$]}
17
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
18
I1 = {goto(I0, E)} {[S' → E, $] } I2 = {goto(I0, T)} {[E → T – E,$], [E →T,$]}
19
I3 = {goto(I0, F)} { [T → F T, $], [T → F, $], [T → F T, –], [T → F, –] }
20
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
21
I3 = {goto(I0, F)} { [T → F T, $], [T → F, $], [T → F T, –], [T → F, –] }
22
I4 = {goto(I0, id)} { [F → id , $], [F → id , –], [F → id , ] }
23
I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
24
I4 = {goto(I0, id)} { [F → id , $], [F → id , –], [F → id , ] }
25
I5 = {goto(I2, –)} {[E →T– E, $], [E → T–E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
26
I5 = {goto(I2, –)} {[E →T– E, $], [E → T–E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
27
I5 = {goto(I2, –)} {[E →T– E, $], [E → T–E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
28
I5 = {goto(I2, –)} {[E →T– E, $], [E → T–E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
29
I6 = {goto(I3, )} {[T → F T, $], [T → F T, –], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
30
I6 = {goto(I3, )} {[T → F T, $], [T → F T, –], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
31
I6 = {goto(I3, )} {[T → F T, $], [T → F T, –], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }
32
I7 = {goto(I5, E)} {[E → T – E , $] } I2 = {goto(I5, T)} I3 = {goto(I5, F)} I4 = {goto(I5, id)}
33
I7 = {goto(I5, E)} {[E → T – E , $] } I2 = {goto(I5, T)} I3 = {goto(I5, F)} I4 = {goto(I5, id)}
34
I7 = {goto(I5, E)} {[E → T – E , $] } I2 = {goto(I5, T)} I3 = {goto(I5, F)} I4 = {goto(I5, id)}
35
I7 = {goto(I5, E)} {[E → T – E , $] } I2 = {goto(I5, T)} I3 = {goto(I5, F)} I4 = {goto(I5, id)}
36
I7 = {goto(I5, E)} {[E → T – E , $] } I2 = {goto(I5, T)} I3 = {goto(I5, F)} I4 = {goto(I5, id)}
37
I8 = {goto(I6, T)} { [T → FT , $], [T → FT , –] } I3 = {goto(I6, F)} I4 = {goto(I6, id)}
38
I8 = {goto(I6, T)} { [T → FT , $], [T → FT , –] } I3 = {goto(I6, F)} I4 = {goto(I6, id)}
39
I8 = {goto(I6, T)} { [T → FT , $], [T → FT , –] } I3 = {goto(I6, F)} I4 = {goto(I6, id)}
40
Filling the LR(1) Table Action Goto id – $ E T F 1 2 3 4 5 6 7 8
41
Apply 1. if [A → aab, b] Ii and goto(Ii, a) = Ij then set Action[i,a] “shift j”. Here, a is a terminal.
42
goto(I0, id) = I4 Action[0, id] shift 4
I0={[S' → E,$],[E →T– E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] } goto(I0, id) = I4 Action[0, id] shift 4
43
goto(I0, id) = I4 Action[0, id] shift 4
I0={[S' → E,$],[E →T– E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] } goto(I0, id) = I4 Action[0, id] shift 4
44
goto(I0, id) = I4 Action[0, id] shift 4
I0={[S' → E,$],[E →T– E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] } goto(I0, id) = I4 Action[0, id] shift 4
45
goto(I0, id) = I4 Action[0, id] shift 4
I0={[S' → E,$],[E →T– E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] } goto(I0, id) = I4 Action[0, id] shift 4
46
Action Goto id – $ E T F s4 1 2 3 4 5 6 7 8
47
goto(I2, –) = I5 Action[2, –] shift 5
I2= {[E → T – E, $], [E →T,$]} goto(I2, –) = I5 Action[2, –] shift 5
48
goto(I2, –) = I5 Action[2, –] shift 5
I2= {[E → T – E, $], [E →T,$]} goto(I2, –) = I5 Action[2, –] shift 5
49
goto(I2, –) = I5 Action[2, –] shift 5
I2= {[E → T – E, $], [E →T,$]} goto(I2, –) = I5 Action[2, –] shift 5
50
Action Goto id – $ E T F s4 1 2 s5 3 4 5 6 7 8
51
goto(I3, ) = I6 Action[3, ] shift 6
I3={ [T → F T, $], [T → F, $], [T → F T, –], [T → F, –]} goto(I3, ) = I6 Action[3, ] shift 6
52
goto(I3, ) = I6 Action[3, ] shift 6
I3={ [T → F T, $], [T → F, $], [T → F T, –], [T → F, –]} goto(I3, ) = I6 Action[3, ] shift 6
53
goto(I3, ) = I6 Action[3, ] shift 6
I3={ [T → F T, $], [T → F, $], [T → F T, –], [T → F, –]} goto(I3, ) = I6 Action[3, ] shift 6
54
Action Goto id – $ E T F s4 1 2 s5 3 s6 4 5 6 7 8
55
goto(I5, id) = I4 Action[5, id] shift 4 goto(I6, id) = I4 Action[6, id] shift 4
56
goto(I5, id) = I4 Action[5, id] shift 4 goto(I6, id) = I4 Action[6, id] shift 4
57
Action Goto id – $ E T F s4 1 2 s5 3 s6 4 5 6 7 8
58
Apply 2. if [A → a, a] Ii and A S' then set action[i,a] to “reduce A → a”
59
I2 = { [E → T – E, $], [E →T,$] }
Action[2, $] reduce 3
60
I2 = { [E → T – E, $], [E →T,$] }
Action[2, $] reduce 3
61
Action Goto id – $ E T F s4 1 2 s5 r3 3 s6 4 5 6 7 8
62
I3 = { [T → F T, $], [T → F, $], [T → F T, –], [T → F, –] } Action[3, $] reduce 5 Action[3, –] reduce 5
63
I3 = { [T → F T, $], [T → F, $], [T → F T, –], [T → F, –] } Action[3, $] reduce 5 Action[3, –] reduce 5
64
Action Goto id – $ E T F s4 1 2 s5 r3 3 r5 s6 4 5 6 7 8
65
I4 = { [F → id, $], [F → id, –], [F → id, ] } Action[4, $] reduce 6 Action[4, –] reduce 6 Action[4, ] reduce 6
66
I4 = { [F → id, $], [F → id, –], [F → id, ] } Action[4, $] reduce 6 Action[4, –] reduce 6 Action[4, ] reduce 6
67
Action Goto id – $ E T F s4 1 2 s5 r3 3 r5 s6 4 r6 5 6 7 8
68
I7 = {[E → T – E, $] } Action[7, $] reduce 2 I8 = { [T → FT, $], [T → FT, –] } Action[8, $] reduce 4 Action[8, –] reduce 4
69
I7 = {[E → T – E, $] } Action[7, $] reduce 2 I8 = { [T → FT, $], [T → FT, –] } Action[8, $] reduce 4 Action[8, –] reduce 4
70
I7 = {[E → T – E, $] } Action[7, $] reduce 2 I8 = { [T → FT, $], [T → FT, –] } Action[8, $] reduce 4 Action[8, –] reduce 4
71
Action Goto id – $ E T F s4 1 2 s5 r3 3 r5 s6 4 r6 5 6 7 r2 8 r4
72
Apply 3. if [S' → S, $] Ii then set action[i,$] to “accept”
73
I1 = {[S' → E, $] } Action[1, $] accept
74
Action Goto id – $ E T F s4 1 2 s5 r3 3 r5 s6 4 r6 5 6 7 r2 8 r4
s4 1 accept 2 s5 r3 3 r5 s6 4 r6 5 6 7 r2 8 r4
75
Apply for each non-terminal A G - if goto(Ii, A) = Ij then goto[i, A] j.
76
goto(I0, E) = I1 goto[0,E] 1 goto(I0, T) = I2 goto[0,T] 2 goto(I0, F) = I3 goto[0,F] 3 goto(I5, E) = I7 goto[5,E] 7 goto(I5, T) = I2 goto[5,T] 2 goto(I5, F) = I3 goto[5,F] 3 goto(I6, T) = I8 goto[6,T] 8 goto(I6, F) = I3 goto[6,F] 3
77
Action Goto id – $ E T F s4 1 2 3 acc s5 r3 r5 s6 4 r6 5 7 6 8 r2 r4
78
Example Parse Let us parse the expression x – y z using the LR(1) table The scanner will encode the input string as id – id id $ where $ is the EOF marker
79
Example Parse Let us parse the expression x – y z using the LR(1) table The scanner will encode the input string as id – id id $ where $ is the EOF marker end of lec 27 compiler: Bottom-up Parsing
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.