Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 February 28, 2016 1 February 28, 2016February 28, 2016February 28, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University.

Similar presentations


Presentation on theme: "1 February 28, 2016 1 February 28, 2016February 28, 2016February 28, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University."— Presentation transcript:

1 1 February 28, 2016 1 February 28, 2016February 28, 2016February 28, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS400 Compiler Construction

2 2 Advanced Intermediate Code Generation Techniques Reusing temporary names Addressing array elements Translating logical and relational expressions Translating short-circuit Boolean expressions and flow-of-control statements with backpatching lists Translating procedure calls February 28, 2016 2 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

3 3 February 28, 2016 3 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Keep in mind following questions Addressing –R–Reusing temporary names –A–Addressing array elements –T–Translating L & R exp Backpathcing –S–Short-circuit evaluation –S–Short-circuit backpatching –F–Flow of control backpatching Translating procedural call –F–Formal / local parameters –P–Passing via call-by-value –P–Passing via call-by-reference

4 4 Reusing Temporary Names Evaluate E 1 into t1 Evaluate E 2 into t2 t3 := t1 + t2 E1 + E2E1 + E2 Modify newtemp() to use a “stack”: Keep a counter c, initialized to 0 newtemp() increments c and returns temporary $ c Decrement counter on each use of a $ i in a three-address statement If t1 no longer used, can reuse t1 instead of using new temp t3 generate February 28, 2016 4 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

5 5 Reusing Temporary Names (cont’d) x := a * b + c * d - e * f $0 := a * b $1 := c * d $0 := $0 + $1 $1 := e * f $0 := $0 - $1 x := $0 01212100121210 cStatement February 28, 2016 5 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

6 6 Addressing Array Elements: One- Dimensional Arrays February 28, 2016 6 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

7 7 Addressing Array Elements: Multi- Dimensional Arrays A : array [1..2,1..3] of integer; low 1 = 1, low 2 = 1, n 1 = 2, n 2 = 3, w = 4 February 28, 2016 7 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

8 8 Addressing Array Elements: Multi- Dimensional Arrays February 28, 2016 8 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

9 9 Addressing Array Elements: Grammar S  L := E E  E + E | ( E ) | L L  Elist ] | id Elist  Elist, E | id [ E Synthesized attributes: E.placename of temp holding value of E Elist.arrayarray name Elist.placename of temp holding index value Elist.ndimnumber of array dimensions L.placelvalue (=name of temp) L.offsetindex into array (=name of temp) null indicates non-array simple id February 28, 2016 9 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

10 10 Addressing Array Elements S  L := E{ if L.offset = null then emit(L.place ‘:=’ E.place) else emit(L.place[L.offset] ‘:=’ E.place) } E  E 1 + E 2 { E.place := newtemp(); emit(E.place ‘:=’ E 1.place ‘+’ E 2.place) } E  ( E 1 ){ E.place := E 1.place } E  L{ if L.offset = null then E.place := L.place else E.place := newtemp(); emit(E.place ‘:=’ L.place[L.offset] } February 28, 2016 10 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

11 11 Addressing Array Elements L  Elist ]{ L.place := newtemp(); L.offset := newtemp(); emit(L.place ‘:=’ c(Elist.array); emit(L.offset ‘:=’ Elist.place ‘*’ width(Elist.array)) } L  id { L.place := id.place; L.offset := null } Elist  Elist 1, E { t := newtemp(); m := Elist 1.ndim + 1; emit(t ‘:=’ Elist 1.place ‘*’ limit(Elist 1.array, m)); emit(t ‘:=’ t ‘+’ E.place); Elist.array := Elist 1.array; Elist.place := t; Elist.ndim := m } Elist  id [ E{ Elist.array := id.place; Elist.place := E.place; Elist.ndim := 1 } February 28, 2016 11 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

12 12 Translating Logical and Relational Expressions a or b and not c t1 := not c t2 := b and t1 t3 := a or t2 if a < b goto L1 t1 := 0 goto L2 L1: t1 := 1 L2: a < b February 28, 2016 12 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

13 13 Translating Short-Circuit Expressions Using Backpatching E  E or M E | E and M E | not E | ( E ) | id relop id | true | false M   Synthesized attributes: E.codethree-address code E.truelistbackpatch list for jumps on true E.falselistbackpatch list for jumps on false M.quadlocation of current three-address quad February 28, 2016 13 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

14 14 Backpatch Operations with Lists makelist(i) creates a new list containing three- address location i, returns a pointer to the list merge(p 1, p 2 ) concatenates lists pointed to by p 1 and p 2, returns a pointer to the concatenates list backpatch(p, i) inserts i as the target label for each of the statements in the list pointed to by p February 28, 2016 14 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

15 15 Backpatching with Lists: Example a < b or c < d and e < f 100: if a < b goto _ 101: goto _ 102: if c < d goto _ 103: goto _ 104: if e < f goto _ 105: goto _ backpatch February 28, 2016 15 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Short-circuit evaluation

16 16 Backpatching with Lists: Translation Scheme M   { M.quad := nextquad() } E  E 1 or M E 2 { backpatch(E 1.falselist, M.quad); E.truelist := merge(E 1.truelist, E 2.truelist); E.falselist := E 2.falselist } E  E 1 and M E 2 { backpatch(E 1.truelist, M.quad); E.truelist := E 2.truelist; E.falselist := merge(E 1.falselist, E 2.falselist); } E  not E 1 { E.truelist := E 1.falselist; E.falselist := E 1.truelist } E  ( E 1 ){ E.truelist := E 1.truelist; E.falselist := E 1.falselist } February 28, 2016 16 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

17 17 Backpatching with Lists: Translation Scheme (cont’d) E  id 1 relop id 2 { E.truelist := makelist(nextquad()); E.falselist := makelist(nextquad() + 1); emit(‘ if ’ id 1.place relop.op id 2.place ‘ goto _ ’); emit(‘ goto _ ’) } E  true{ E.truelist := makelist(nextquad()); E.falselist := nil; emit(‘ goto _ ’) } E  false{ E.falselist := makelist(nextquad()); E.truelist := nil; emit(‘ goto _ ’) } February 28, 2016 17 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

18 18 Flow-of-Control Statements and Backpatching: Grammar February 28, 2016 18 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

19 19 Flow-of-Control Statements and Backpatching S  A{ S.nextlist := nil } S  begin L end { S.nextlist := L.nextlist } S  if E then M S 1 { backpatch(E.truelist, M.quad); S.nextlist := merge(E.falselist, S 1.nextlist) } L  L 1 ; M S{ backpatch(L 1.nextlist, M.quad); L.nextlist := S.nextlist; } L  S{ L.nextlist := S.nextlist; } M   { M.quad := nextquad() } February 28, 2016 19 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

20 20 Flow-of-Control Statements and Backpatching (cont’d) S  if E then M 1 S 1 N else M 2 S 2 { backpatch(E.truelist, M 1.quad); backpatch(E.falselist, M 2.quad); S.nextlist := merge(S 1.nextlist, merge(N.nextlist, S 2.nextlist)) } S  while M 1 E do M 2 S 1 { backpatch(S 1,nextlist, M 1.quad); backpatch(E.truelist, M 2.quad); S.nextlist := E.falselist; emit(‘ goto _ ’) } N   { N.nextlist := makelist(nextquad()); emit(‘ goto _ ’) } February 28, 2016 20 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

21 21 Translating Procedure Calls S  call id ( Elist ) Elist  Elist, E | E foo(a+1, b, 7) t1 := a + 1 t2 := b t3 := 7 param t1 param t2 param t3 call foo 3 February 28, 2016 21 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Call by value Passing parameters via call-by-value Formal/local parameters

22 22 Translating Procedure Calls S  call id ( Elist ) Elist  Elist, E | E Swap (a, b) t1 := &a t2 := &b *param t1 *param t2 call swap 2 February 28, 2016 22 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Call by referenc e Passing parameters via call-by-reference Formal/local parameters

23 23 Translating Procedure Calls S  call id ( Elist ){ for each item p on queue do emit(‘ param ’ p); emit(‘ call ’ id.place |queue|) } Elist  Elist, E{ append E.place to the end of queue } Elist  E{ initialize queue to contain only E.place } February 28, 2016 23 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction

24 24 February 28, 2016 24 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction Got it with following questions Addressing –R–Reusing temporary names –A–Addressing array elements –T–Translating L & R exp Backpathcing –S–Short-circuit evaluation –S–Short-circuit backpatching –F–Flow of control backpatching Translating procedural call –F–Formal / local parameters –P–Passing via call-by-value –P–Passing via call-by-reference

25 25 Thank you very much! Questions? February 28, 2016 25 Azusa Pacific University, Azusa, CA 91702, Tel: (800) 825-5278 Department of Computer Science, http://www.apu.edu/clas/computerscience/http://www.apu.edu/clas/computerscience/ CS@APU: CS400 Compiler Construction


Download ppt "1 February 28, 2016 1 February 28, 2016February 28, 2016February 28, 2016 Azusa, CA Sheldon X. Liang Ph. D. Computer Science at Azusa Pacific University."

Similar presentations


Ads by Google