Intermediate Code Generation. 2 Intermediate languages Runtime environments Declarations Expressions Statements.

Slides:



Advertisements
Similar presentations
Numbers Treasure Hunt Following each question, click on the answer. If correct, the next page will load with a graphic first – these can be used to check.
Advertisements

TK1924 Program Design & Problem Solving Session 2011/2012
AP STUDY SESSION 2.
1
Copyright © 2003 Pearson Education, Inc. Slide 1.
Chapter 7 Constructors and Other Tools. Copyright © 2006 Pearson Addison-Wesley. All rights reserved. 7-2 Learning Objectives Constructors Definitions.
Copyright © 2003 Pearson Education, Inc. Slide 1 Computer Systems Organization & Architecture Chapters 8-12 John D. Carpinelli.
Processes and Operating Systems
Copyright © 2011, Elsevier Inc. All rights reserved. Chapter 6 Author: Julia Richards and R. Scott Hawley.
Author: Julia Richards and R. Scott Hawley
Properties Use, share, or modify this drill on mathematic properties. There is too much material for a single class, so you’ll have to select for your.
1 Hyades Command Routing Message flow and data translation.
David Burdett May 11, 2004 Package Binding for WS CDL.
1 RA I Sub-Regional Training Seminar on CLIMAT&CLIMAT TEMP Reporting Casablanca, Morocco, 20 – 22 December 2005 Status of observing programmes in RA I.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt BlendsDigraphsShort.
1 Click here to End Presentation Software: Installation and Updates Internet Download CD release NACIS Updates.
Break Time Remaining 10:00.
Turing Machines.
Table 12.1: Cash Flows to a Cash and Carry Trading Strategy.
PP Test Review Sections 6-1 to 6-6
Chapter 1 Object Oriented Programming 1. OOP revolves around the concept of an objects. Objects are created using the class definition. Programming techniques.
1 The Blue Café by Chris Rea My world is miles of endless roads.
Bright Futures Guidelines Priorities and Screening Tables
Semantic Analysis and Symbol Tables
EIS Bridge Tool and Staging Tables September 1, 2009 Instructor: Way Poteat Slide: 1.
Bellwork Do the following problem on a ½ sheet of paper and turn in.
Exarte Bezoek aan de Mediacampus Bachelor in de grafische en digitale media April 2014.
Chapter 6 File Systems 6.1 Files 6.2 Directories
Copyright © 2012, Elsevier Inc. All rights Reserved. 1 Chapter 7 Modeling Structure with Blocks.
1 RA III - Regional Training Seminar on CLIMAT&CLIMAT TEMP Reporting Buenos Aires, Argentina, 25 – 27 October 2006 Status of observing programmes in RA.
Basel-ICU-Journal Challenge18/20/ Basel-ICU-Journal Challenge8/20/2014.
1..
Lilian Blot PART III: ITERATIONS Core Elements Autumn 2012 TPOP 1.
CONTROL VISION Set-up. Step 1 Step 2 Step 3 Step 5 Step 4.
Adding Up In Chunks.
Procedures. 2 Procedure Definition A procedure is a mechanism for abstracting a group of related operations into a single operation that can be used repeatedly.
1 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt 10 pt 15 pt 20 pt 25 pt 5 pt Synthetic.
1 hi at no doifpi me be go we of at be do go hi if me no of pi we Inorder Traversal Inorder traversal. n Visit the left subtree. n Visit the node. n Visit.
Analyzing Genes and Genomes
Types of selection structures
Speak Up for Safety Dr. Susan Strauss Harassment & Bullying Consultant November 9, 2012.
Essential Cell Biology
Clock will move after 1 minute
PSSA Preparation.
Essential Cell Biology
Immunobiology: The Immune System in Health & Disease Sixth Edition
Topic 16 Sorting Using ADTs to Implement Sorting Algorithms.
Physics for Scientists & Engineers, 3rd Edition
Energy Generation in Mitochondria and Chlorplasts
Techniques for proving programs with pointers A. Tikhomirov.
1 Decidability continued…. 2 Theorem: For a recursively enumerable language it is undecidable to determine whether is finite Proof: We will reduce the.
Compiler Construction
1 Programming Languages (CS 550) Mini Language Interpreter Jeremy R. Johnson.
Chapter 6 Intermediate Code Generation
Code Generation.
Intermediate Code Generation
Intermediate Code Generation. 2 Intermediate languages Declarations Expressions Statements.
8 Intermediate code generation
1 Compiler Construction Intermediate Code Generation.
1 Intermediate Code generation. 2 Intermediate Code Generation l Intermediate languages l Declarations l Expressions l Statements l Reference: »Chapter.
Presented by Dr Ioanna Dionysiou
Compiler Construction
1 Run-Time Environments. 2 Procedure Activation and Lifetime A procedure is activated when called The lifetime of an activation of a procedure is the.
1 Intermediate Code Generation Abstraction at the source level identifiers, operators, expressions, statements, conditionals, iteration, functions (user.
Run-Time Environments Chapter 7
Compiler Construction
Subject Name:COMPILER DESIGN Subject Code:10CS63
Chapter 6 Intermediate-Code Generation
Three-address code A more common representation is THREE-ADDRESS CODE . Three address code is close to assembly language, making machine code generation.
Presentation transcript:

Intermediate Code Generation

2 Intermediate languages Runtime environments Declarations Expressions Statements

3 Intermediate Languages Syntax tree Postfix notation a b c - * b c - * + := Three-address code a := b * - c + b * - c := a+ * * - c bb - c

4 Three-Address Code x := y op z Where x, y, z are names, constants, or temporaries x + y * z t1 := y * z t2 := x + t1 a := b * -c + b * -c t1 := -c t2 := b * t1 t3 := -c t4 := b * t3 t5 := t2 + t4 a := t5

5 Types of Three-Address Code Assignment statementx := y op z Assignment statementx := op y Copy statementx := y Unconditional jumpgoto L Conditional jumpif x relop y goto L Procedural callparam x call p, n return y

6 Types of Three-Address Code Indexed assignmentx := y[i] x[i] := y Address and pointer assignment x := &y x := *y *x := y

7 Implementation of Three- Address Code Quadruples oparg1arg2result (0) - c t1 (1) * b t1 t2 (2) - c t3 (3) * b t3 t4 (4) + t2 t4 t5 (5) := t5 a

8 Implementation of Three- Address Code Triples oparg1arg2 (0) - c (1) * b (0) (2) - c (3) * b (2) (4) + (1) (3) (5) := a (4)

9 Implementation of Three- Address Code Indirect Triples statementoparg1arg2 (0)(14)(14)- c (1)(15)(15)* b(14) (2)(16)(16)- c (3)(17)(17)* b(16) (4)(18)(18)+(15)(17) (5)(19)(19):= a(18)

10 Comparison Qualdruples –direct access of the location for temporaries –easier for optimization Triples –space efficiency Indirect Triples –easier for optimization –space efficiency

11 Runtime Environments A translation needs to relate the static source text of a program to the dynamic actions that must occur at runtime to implement the program Essentially, the relationship between names and data objects The runtime support system consists of routines that manage the allocation and deallocation of data objects

12 Activations A procedure definition associates an identifier (name) with a statement (body) Each execution of a procedure body is an activation of the procedure An activation tree depicts the way control enters and leaves activations

13 An Example program sort (input, output); var a: array [0..10] of integer; procedure readarray; var i: integer; begin for i := 1 to 9 do read(a[i]) end; procedure partition(y, z: integer): integer; var i, j, x, v: integer; begin … end; procedure quicksort(m, n: integer); var i: integer; begin if (n > m) then begin I := partition(m, n); quicksort(m, I-1); quicksort (I+1, n) end end; begin a[0] := -9999; a[10] := 9999; readarray; quicksort(1,9) end.

14 An Example s rq(1,9) p(1,9)q(1,3)q(5,9) q(1,0)q(5,5)q(7,9)q(2,3) q(2,1)q(9,9)q(7,7)q(3,3) p(1,3) p(2,3) p(5,9) p(7,9)

15 Scope A declaration associates information with a name Scope rules determine which declaration of a name applies The portion of the program to which a declaration applies is called the scope of that declaration

16 Bindings of Names The same name may denote different data objects (storage locations) at runtime An environment is a function that maps a name to a storage location A state is a function that maps a storage location to the value held there namestorage locationvalue environmentstate

17 Static and Dynamic Notions

18 Storage Organization Target code: static Static data objects: static Dynamic data objects: heap Automatic data objects: stack code static data stack heap

19 Activation Records returned value actual parameters optional control link optional access link machine status local data temporary data stack

20 Activation Records returned value and parameters links and machine status local and temporary data returned value and parameters links and machine status local and temporary data frame pointer stack pointer

21 Declarations P  {offset := 0} D D  D “;” D D  id “:” T {enter(id.name, T.type, offset); offset := offset + T.width} T  integer {T.type := integer; T.width := 4} T  float {T.type := float; T.width := 8} T  array “[” num “]” of T 1 {T.type := array(num.val, T 1.type); T.width := num.val  T 1.width} T  “*” T 1 {T.type := pointer(T 1.type); T.width := 4}

22 Nested Procedures P  D D  D “;” D | id “:” T | proc id “;” D “;” S nilheader a x readarray exchange quicksort i header k v partition header i j

23 Symbol Table Handling Operations –mktable(previous): creates a new table and returns a pointer to the table –enter(table, name, type, offset): creates a new entry for name in the table –addwidth(table, width): records the cumulative width of entries in the header –enterproc(table, name, newtable): creates a new entry for procedure name in the table Stacks –tblptr: pointers to symbol tables –offset : the next available relative address

24 Declarations P  M D {addwidth(top(tblptr), top(offset)); pop(tblptr); pop(offset)} M   {t := mktable(nil); push(t, tblptr); push(0, offset)} D  D “;” D D  proc id “;” N D “;” S {t := top(tblptr); addwidth(t, top(offset)); pop(tblptr); pop(offset); enterproc(top(tblptr), id.name, t)} D  id “:” T {enter(top(tblptr), id.name, T.type, top(offset)); top(offset) := top(offset) + T.width} N   {t := mktable(top(tblptr)); push(t, tblptr); push(0, offset)}

25 Records T  record D end T  record L D end {T.type := record(top(tblptr)); T.width := top(offset); pop(tblptr); pop(offset)} L   {t := mktable(nil); push(t, tblptr); push(0, offset)}

26 New Names and Labels Function newtemp returns a new name for each call Function newlabel returns a new label for each call

27 Assignments S  id “:=” E {p := lookup(id.name); if p <> nil then emit(p ‘:=’ E.place) else error} E  E 1 “+” E 2 {E.place := newtemp; emit(E.place ‘:=’ E 1.place ‘+’ E 2.place)} E  E 1 “*” E 2 {E.place := newtemp; emit(E.place ‘:=’ E 1.place ‘*’ E 2.place)} E  “-” E 1 {E.place := newtemp; emit(E.place ‘:=’ ‘-’ E 1.place)} E  “(” E 1 “)” {E.place := E 1.place} E  id {p := lookup(id.name); if p <> nil then E.place := p else error}

28 Array Accesses A[i]: base + (i - low)  w  (i  w) + (base - low  w) A[i 1, i 2 ]: base + ((i 1 - low 1 )  n 2 + i 2 - low 2 )  w  (((i 1  n 2 ) + i 2 )  w) + (base - ((low 1  n 2 ) + low 2 )  w) c(id.place), width(id.place), limit(id.place, i)

29 Array Accesses Use inherited attributes L  id “[” Elist “]” | id Elist  Elist “,” E | E Use synthesized attributes L  Elist “]” | id Elist  Elist “,” E | id “[” E

30 Array Accesses Elist  id “[” E {Elist.place := E.place; Elist.ndim := 1; Elist.array := id.place } 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 }

31 Array Accesses 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 }

32 Array Accesses E  L {if L.offset = null then E.place := L.place else begin E.place := newtemp; emit(E.place ‘:=’ L.place ‘[’ L.offset ‘]’) end} S  L “:=” E {if L.offset = null then emit(L.place ‘:=’ E.place) else emit(L.place ‘[’ L.offset ‘]’ ‘:=’ E.place) }

33 An Example x := A[y, z] n 1 = 10, n 2 = 20, w = 4 c = base A - ((1  20) + 1)  4 = base A - 84 t1 := y * 20 t1 := t1 + z t2 := c t3 := t1 * 4 t4 := t2[t3] x := t4

34 Type Conversion E  E 1 + E 2 {E.place := newtemp; if E 1.type = integer and E 2.type = integer then begin emit(E.place ‘:=’ E 1.place ‘int+’ E 2.place); E.type := integer end else if E 1.type = real and E 2.type = real then begin emit(E.place ‘:=’ E 1.place ‘real+’ E 2.place); E.type := real end else if E 1.type = integer and E 2.type = real then begin u := newtemp; emit(u ‘:=’ ‘inttoreal’ E 1.place); emit(E.place ‘:=’ u ‘real+’ E 2.place); E.type := real end else if … }

35 Flow-of-Control Statements S  if E then S 1 | if E then S 1 else S 2 | while E do S 1 | switch E begin case V 1 : S 1 case V 2 : S 2 … case V n-1 : S n-1 default: S n end

36 Conditional Statements S  if E then S 1 {E.true := newlabel; E.false := S.next; S 1.next := S.next; S.code := E.code || gen(E.true ‘:’) || S 1.code } E.code S 1.code E.true: E.false: E.true E.false

37 Conditional Statements S  if E then S 1 else S 2 {E.true := newlabel; E.false := newlabel; S 1.next := S.next; S 2.next := S.next; S.code := E.code || gen(E.true ‘:’) || S 1.code || gen(‘goto’ S.next) || gen(E.false ‘:’) || S 2.code } E.code S 1.code E.true: E.false: E.true E.false goto S.next S 2.code S.next:

38 Loop Statements S  while E do S 1 {S.begin := newlabel; E.true := newlabel; E.false := S.next; S 1.next := S.begin; S.code := gen(S.begin ‘:’) || E.code || gen(E.true ‘:’) || S 1.code || gen(‘goto’ S.begin) } E.code S 1.code E.true: E.false: E.true E.false goto S.next S.begin:

39 Boolean Expressions E  E 1 or E 2 {E 1.true := E.true; E 1.false := newlabel; E 2.true := E.true; E 2.false := E.false; E.code := E 1.code || gen(E 1.false ‘:’) || E 2.code} E  E 1 and E 2 {E 1.true := newlabel; E 1.false := E.false; E 2.true := E.true; E 2.false := E.false; E.code := E 1.code || gen(E 1.true ‘:’) || E 2.code} E  not E 1 {E 1.true := E.false; E 1.false := E.true; E.code := E 1.code} E  “(” E 1 “)” {E 1.true := E.true; E 1.false := E.false; E.code := E 1.code} E  id 1 relop id 2 {E.code := gen(‘if’ id 1.place relop.op id 2.place ‘goto’ E.true) || gen(‘goto’ E.false)} E  true {E.code := gen(‘goto’ E.true)} E  false {E.code := gen(‘goto’ E.false)}

40 An Example a < b or c < d and e < f if a < b goto Ltrue goto L1 L1: if c < d goto L2 goto Lfalse L2: if e < f goto Ltrue goto Lfalse

41 An Example Lbegin: if a < b goto L1 goto Lnext L1: if c < d goto L2 goto L3 L2: t1 := y + z x := t1 goto Lbegin L3: t2 := y - z x := t2 goto Lbegin Lnext: while a < b do if c < d then x := y + z else x := y - z

42 Case Statements Conditional goto’s –less than 10 cases Jump table –more than 10 cases –dense value range Hash table –more than 10 cases –sparse value range

43 Conditional Goto’s code to evaluate E into t goto test L1: code for S1 goto next … Ln-1: code for Sn-1 goto next Ln: code for Sn goto next test: if t = V1 goto L1 … if t = Vn-1 goto Ln-1 goto Ln next:

44 Jump Table code to evaluate E into t if t < Vmin goto Ldefault if t > Vmax goto Ldefault i := t - Vmin L := jumpTable[i] goto L

45 Hash Table code to evaluate E into t i := hash(t) L := hashTable[i] goto L

46 Procedure Calls S  call id “(” Elist “)” {for each item p on queue do emit(‘param’ p); emit(‘call’ id.place)} Elist  Elist “,” E {append E.place to the end of queue} Elist  E {initialize queue to contain only E.place}

47 共勉 顏淵問仁。 子曰︰「克己復禮為仁。一日克己復禮,天下歸仁焉。 為仁由己,而由人乎哉?」 顏淵曰︰「請問其目?」 子曰︰「非禮勿視,非禮勿聽,非禮勿言,非禮勿動。」 顏淵曰︰「回雖不敏,請事斯語矣﹗」