Presentation is loading. Please wait.

Presentation is loading. Please wait.

Compiler Construction

Similar presentations


Presentation on theme: "Compiler Construction"— Presentation transcript:

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 → aab, 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 → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

9 I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

10 I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

11 I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

12 I0 = {closure([S' → E, $])}
{ [S' → E, $], [E → T – E, $], [E → T, $], [T → FT, $], [T → F, $] [T → FT, –], [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 → FT, $], [T → F, $] [T → FT, –], [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 → FT, $], [T → F, $] [T → FT, –], [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 → FT, $], [T → F, $] [T → FT, –], [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 → FT, $], [T → F, $] [T → FT, –], [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 → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

26 I5 = {goto(I2, –)} {[E →T–  E, $], [E → T–E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

27 I5 = {goto(I2, –)} {[E →T–  E, $], [E → T–E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

28 I5 = {goto(I2, –)} {[E →T–  E, $], [E → T–E, $], [E → T, $], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

29 I6 = {goto(I3, )} {[T → F T, $], [T → F T, –], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

30 I6 = {goto(I3, )} {[T → F T, $], [T → F T, –], [T → FT, $], [T → FT, –], [T → F, $], [T → F, –], [F → id, $], [F → id, –], [F → id, ] }

31 I6 = {goto(I3, )} {[T → F T, $], [T → F T, –], [T → FT, $], [T → FT, –], [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 → FT , $], [T → FT , –] } I3 = {goto(I6, F)} I4 = {goto(I6, id)}

38 I8 = {goto(I6, T)} { [T → FT , $], [T → FT , –] } I3 = {goto(I6, F)} I4 = {goto(I6, id)}

39 I8 = {goto(I6, T)} { [T → FT , $], [T → FT , –] } 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 → aab, 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 → FT, $], [T → FT, –], [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 → FT, $], [T → FT, –], [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 → FT, $], [T → FT, –], [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 → FT, $], [T → FT, –], [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 → FT, $], [T → FT, –] }  Action[8, $]  reduce 4  Action[8, –]  reduce 4

69 I7 = {[E → T – E, $] } Action[7, $]  reduce 2 I8 = { [T → FT, $], [T → FT, –] }  Action[8, $]  reduce 4  Action[8, –]  reduce 4

70 I7 = {[E → T – E, $] } Action[7, $]  reduce 2 I8 = { [T → FT, $], [T → FT, –] }  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


Download ppt "Compiler Construction"

Similar presentations


Ads by Google