Intermediate Code Generation Intermediate Code Generation Intermediate languages
![Intermediate Code Generation Intermediate Code Generation](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-1.jpg)
![Intermediate Code Generation • • • Intermediate languages Runtime environments Declarations Expressions Statements 2 Intermediate Code Generation • • • Intermediate languages Runtime environments Declarations Expressions Statements 2](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-2.jpg)
![Intermediate Languages a : = b * - c + b * - c Intermediate Languages a : = b * - c + b * - c](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-3.jpg)
![Three-Address Code x : = y op z Where x, y, z are names, Three-Address Code x : = y op z Where x, y, z are names,](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-4.jpg)
![Types of Three-Address Code • • • Assignment statement Copy statement Unconditional jump Conditional Types of Three-Address Code • • • Assignment statement Copy statement Unconditional jump Conditional](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-5.jpg)
![Types of Three-Address Code • Indexed assignment x : = y[i] x[i] : = Types of Three-Address Code • Indexed assignment x : = y[i] x[i] : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-6.jpg)
![Implementation of Three. Address Code • Quadruples op (0) (1) * (2) (3) * Implementation of Three. Address Code • Quadruples op (0) (1) * (2) (3) *](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-7.jpg)
![Implementation of Three. Address Code • Triples (0) (1) (2) (3) (4) (5) op Implementation of Three. Address Code • Triples (0) (1) (2) (3) (4) (5) op](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-8.jpg)
![Implementation of Three. Address Code • Indirect Triples statement (0) (14) (15) (2) (16) Implementation of Three. Address Code • Indirect Triples statement (0) (14) (15) (2) (16)](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-9.jpg)
![Comparison • Qualdruples – direct access of the location for temporaries – easier for Comparison • Qualdruples – direct access of the location for temporaries – easier for](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-10.jpg)
![Runtime Environments • A translation needs to relate the static source text of a Runtime Environments • A translation needs to relate the static source text of a](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-11.jpg)
![Activations • A procedure definition associates an identifier (name) with a statement (body) • Activations • A procedure definition associates an identifier (name) with a statement (body) •](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-12.jpg)
![An Example program sort (input, output); var a: array [0. . 10] of integer; An Example program sort (input, output); var a: array [0. . 10] of integer;](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-13.jpg)
![An Example s r q(1, 9) p(1, 9) q(1, 3) p(1, 3) q(1, 0) An Example s r q(1, 9) p(1, 9) q(1, 3) p(1, 3) q(1, 0)](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-14.jpg)
![Scope • A declaration associates information with a name • Scope rules determine which Scope • A declaration associates information with a name • Scope rules determine which](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-15.jpg)
![Bindings of Names • The same name may denote different data objects (storage locations) Bindings of Names • The same name may denote different data objects (storage locations)](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-16.jpg)
![Static and Dynamic Notions 17 Static and Dynamic Notions 17](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-17.jpg)
![Storage Organization • • Target code: static Static data objects: static Dynamic data objects: Storage Organization • • Target code: static Static data objects: static Dynamic data objects:](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-18.jpg)
![Activation Records stack returned value actual parameters optional control link optional access link machine Activation Records stack returned value actual parameters optional control link optional access link machine](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-19.jpg)
![Activation Records returned value and parameters links and machine status local and temporary data Activation Records returned value and parameters links and machine status local and temporary data](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-20.jpg)
![Declarations P {offset : = 0} D D D “; ” D D id Declarations P {offset : = 0} D D D “; ” D D id](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-21.jpg)
![Nested Procedures P D D D “; ” D | id “: ” T Nested Procedures P D D D “; ” D | id “: ” T](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-22.jpg)
![Symbol Table Handling • Operations – mktable(previous): creates a new table and returns a Symbol Table Handling • Operations – mktable(previous): creates a new table and returns a](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-23.jpg)
![Declarations P M D {addwidth(top(tblptr), top(offset)); pop(tblptr); pop(offset)} M {t : = mktable(nil); push(t, Declarations P M D {addwidth(top(tblptr), top(offset)); pop(tblptr); pop(offset)} M {t : = mktable(nil); push(t,](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-24.jpg)
![Records T record D end T record L D end {T. type : = Records T record D end T record L D end {T. type : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-25.jpg)
![New Names and Labels • Function newtemp returns a new name for each call New Names and Labels • Function newtemp returns a new name for each call](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-26.jpg)
![Assignments S id “: =” E {p : = lookup(id. name); if p <> Assignments S id “: =” E {p : = lookup(id. name); if p <>](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-27.jpg)
![Array Accesses A[i]: base + (i - low) w (i w) + (base - Array Accesses A[i]: base + (i - low) w (i w) + (base -](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-28.jpg)
![Array Accesses • Use inherited attributes L id “[” Elist “]” | id Elist Array Accesses • Use inherited attributes L id “[” Elist “]” | id Elist](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-29.jpg)
![Array Accesses Elist id “[” E {Elist. place : = E. place; Elist. ndim Array Accesses Elist id “[” E {Elist. place : = E. place; Elist. ndim](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-30.jpg)
![Array Accesses L Elist “]” {L. place : = newtemp; L. offset : = Array Accesses L Elist “]” {L. place : = newtemp; L. offset : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-31.jpg)
![Array Accesses E L {if L. offset = null then E. place : = Array Accesses E L {if L. offset = null then E. place : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-32.jpg)
![An Example x : = A[y, z] n 1 = 10, n 2 = An Example x : = A[y, z] n 1 = 10, n 2 =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-33.jpg)
![Type Conversion E E 1 + E 2 {E. place : = newtemp; if Type Conversion E E 1 + E 2 {E. place : = newtemp; if](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-34.jpg)
![Flow-of-Control Statements S | | | if E then S 1 else S 2 Flow-of-Control Statements S | | | if E then S 1 else S 2](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-35.jpg)
![Conditional Statements S if E then S 1 {E. true : = newlabel; E. Conditional Statements S if E then S 1 {E. true : = newlabel; E.](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-36.jpg)
![Conditional Statements S if E then S 1 else S 2 {E. true : Conditional Statements S if E then S 1 else S 2 {E. true :](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-37.jpg)
![Loop Statements S while E do S 1 {S. begin : = newlabel; S. Loop Statements S while E do S 1 {S. begin : = newlabel; S.](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-38.jpg)
![Boolean Expressions E E 1 or E 2 {E 1. true : = E. Boolean Expressions E E 1 or E 2 {E 1. true : = E.](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-39.jpg)
![An Example a < b or c < d and e < f if An Example a < b or c < d and e < f if](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-40.jpg)
![An Example while a < b do if c < d then x : An Example while a < b do if c < d then x :](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-41.jpg)
![Case Statements • Conditional goto’s – less than 10 cases • Jump table – Case Statements • Conditional goto’s – less than 10 cases • Jump table –](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-42.jpg)
![Conditional Goto’s L 1: Ln-1: Ln: test: next: code to evaluate E into t Conditional Goto’s L 1: Ln-1: Ln: test: next: code to evaluate E into t](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-43.jpg)
![Jump Table code to evaluate E into t if t < Vmin goto Ldefault Jump Table code to evaluate E into t if t < Vmin goto Ldefault](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-44.jpg)
![Hash Table code to evaluate E into t i : = hash(t) L : Hash Table code to evaluate E into t i : = hash(t) L :](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-45.jpg)
![Procedure Calls S call id “(” Elist “)” {for each item p on queue Procedure Calls S call id “(” Elist “)” {for each item p on queue](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-46.jpg)
![](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-47.jpg)
- Slides: 47
![Intermediate Code Generation Intermediate Code Generation](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-1.jpg)
Intermediate Code Generation
![Intermediate Code Generation Intermediate languages Runtime environments Declarations Expressions Statements 2 Intermediate Code Generation • • • Intermediate languages Runtime environments Declarations Expressions Statements 2](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-2.jpg)
Intermediate Code Generation • • • Intermediate languages Runtime environments Declarations Expressions Statements 2
![Intermediate Languages a b c b c Intermediate Languages a : = b * - c + b * - c](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-3.jpg)
Intermediate Languages a : = b * - c + b * - c • Syntax tree : = a + * b * - b c c • Postfix notation a b c - * + : = • Three-address code 3
![ThreeAddress Code x y op z Where x y z are names Three-Address Code x : = y op z Where x, y, z are names,](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-4.jpg)
Three-Address Code x : = y op z Where x, y, z are names, constants, or temporaries x+y*z a : = b * -c + b * -c t 1 : = y * z t 2 : = x + t 1 : = -c t 2 : = b * t 1 t 3 : = -c t 4 : = b * t 3 t 5 : = t 2 + t 4 a : = t 5 4
![Types of ThreeAddress Code Assignment statement Copy statement Unconditional jump Conditional Types of Three-Address Code • • • Assignment statement Copy statement Unconditional jump Conditional](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-5.jpg)
Types of Three-Address Code • • • Assignment statement Copy statement Unconditional jump Conditional jump Procedural call x : = y op z x : = op y x : = y goto L if x relop y goto L param x call p, n return y 5
![Types of ThreeAddress Code Indexed assignment x yi xi Types of Three-Address Code • Indexed assignment x : = y[i] x[i] : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-6.jpg)
Types of Three-Address Code • Indexed assignment x : = y[i] x[i] : = y • Address and pointer assignment x : = &y x : = *y *x : = y 6
![Implementation of Three Address Code Quadruples op 0 1 2 3 Implementation of Three. Address Code • Quadruples op (0) (1) * (2) (3) *](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-7.jpg)
Implementation of Three. Address Code • Quadruples op (0) (1) * (2) (3) * (4) + (5) : = arg 1 c b t 2 t 5 arg 2 t 1 t 3 t 4 result t 1 t 2 t 3 t 4 t 5 a 7
![Implementation of Three Address Code Triples 0 1 2 3 4 5 op Implementation of Three. Address Code • Triples (0) (1) (2) (3) (4) (5) op](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-8.jpg)
Implementation of Three. Address Code • Triples (0) (1) (2) (3) (4) (5) op * * + : = arg 1 c b (1) a arg 2 (0) (2) (3) (4) 8
![Implementation of Three Address Code Indirect Triples statement 0 14 15 2 16 Implementation of Three. Address Code • Indirect Triples statement (0) (14) (15) (2) (16)](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-9.jpg)
Implementation of Three. Address Code • Indirect Triples statement (0) (14) (15) (2) (16) (3) (17) (4) (18) (5) (19) op * * + : = arg 1 c b (15) a arg 2 (14) (16) (17) (18) 9
![Comparison Qualdruples direct access of the location for temporaries easier for Comparison • Qualdruples – direct access of the location for temporaries – easier for](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-10.jpg)
Comparison • Qualdruples – direct access of the location for temporaries – easier for optimization • Triples – space efficiency • Indirect Triples – easier for optimization – space efficiency 10
![Runtime Environments A translation needs to relate the static source text of a Runtime Environments • A translation needs to relate the static source text of a](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-11.jpg)
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 11
![Activations A procedure definition associates an identifier name with a statement body Activations • A procedure definition associates an identifier (name) with a statement (body) •](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-12.jpg)
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 12
![An Example program sort input output var a array 0 10 of integer An Example program sort (input, output); var a: array [0. . 10] of integer;](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-13.jpg)
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; begin a[0] : = -9999; a[10] : = 9999; readarray; quicksort(1, 9) 13 end.
![An Example s r q1 9 p1 9 q1 3 p1 3 q1 0 An Example s r q(1, 9) p(1, 9) q(1, 3) p(1, 3) q(1, 0)](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-14.jpg)
An Example s r q(1, 9) p(1, 9) q(1, 3) p(1, 3) q(1, 0) q(2, 3) q(5, 9) p(5, 9) q(5, 5) q(7, 9) p(2, 3) q(2, 1) q(3, 3) p(7, 9) q(7, 7) q(9, 9) 14
![Scope A declaration associates information with a name Scope rules determine which Scope • A declaration associates information with a name • Scope rules determine which](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-15.jpg)
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 15
![Bindings of Names The same name may denote different data objects storage locations Bindings of Names • The same name may denote different data objects (storage locations)](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-16.jpg)
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 environment name state storage location value 16
![Static and Dynamic Notions 17 Static and Dynamic Notions 17](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-17.jpg)
Static and Dynamic Notions 17
![Storage Organization Target code static Static data objects static Dynamic data objects Storage Organization • • Target code: static Static data objects: static Dynamic data objects:](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-18.jpg)
Storage Organization • • Target code: static Static data objects: static Dynamic data objects: heap Automatic data objects: stack code static data stack heap 18
![Activation Records stack returned value actual parameters optional control link optional access link machine Activation Records stack returned value actual parameters optional control link optional access link machine](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-19.jpg)
Activation Records stack returned value actual parameters optional control link optional access link machine status local data temporary data 19
![Activation Records returned value and parameters links and machine status local and temporary data Activation Records returned value and parameters links and machine status local and temporary data](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-20.jpg)
Activation Records returned value and parameters links and machine status local and temporary data frame pointer stack pointer returned value and parameters links and machine status local and temporary data 20
![Declarations P offset 0 D D D D D id Declarations P {offset : = 0} D D D “; ” D D id](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-21.jpg)
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} 21
![Nested Procedures P D D D D id T Nested Procedures P D D D “; ” D | id “: ” T](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-22.jpg)
Nested Procedures P D D D “; ” D | id “: ” T | proc id “; ” D “; ” S nil header a x readarray exchange quicksort header i header k v partition header i j 22
![Symbol Table Handling Operations mktableprevious creates a new table and returns a Symbol Table Handling • Operations – mktable(previous): creates a new table and returns a](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-23.jpg)
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 23
![Declarations P M D addwidthtoptblptr topoffset poptblptr popoffset M t mktablenil pusht Declarations P M D {addwidth(top(tblptr), top(offset)); pop(tblptr); pop(offset)} M {t : = mktable(nil); push(t,](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-24.jpg)
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)} 24
![Records T record D end T record L D end T type Records T record D end T record L D end {T. type : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-25.jpg)
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)} 25
![New Names and Labels Function newtemp returns a new name for each call New Names and Labels • Function newtemp returns a new name for each call](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-26.jpg)
New Names and Labels • Function newtemp returns a new name for each call • Function newlabel returns a new label for each call 26
![Assignments S id E p lookupid name if p Assignments S id “: =” E {p : = lookup(id. name); if p <>](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-27.jpg)
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} 27
![Array Accesses Ai base i low w i w base Array Accesses A[i]: base + (i - low) w (i w) + (base -](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-28.jpg)
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) 28
![Array Accesses Use inherited attributes L id Elist id Elist Array Accesses • Use inherited attributes L id “[” Elist “]” | id Elist](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-29.jpg)
Array Accesses • Use inherited attributes L id “[” Elist “]” | id Elist “, ” E | E • Use synthesized attributes L Elist “]” | id Elist “, ” E | id “[” E 29
![Array Accesses Elist id E Elist place E place Elist ndim Array Accesses Elist id “[” E {Elist. place : = E. place; Elist. ndim](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-30.jpg)
Array Accesses Elist id “[” E {Elist. place : = E. place; Elist. ndim : = 1; Elist. array : = id. place } 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 30 }
![Array Accesses L Elist L place newtemp L offset Array Accesses L Elist “]” {L. place : = newtemp; L. offset : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-31.jpg)
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 } 31
![Array Accesses E L if L offset null then E place Array Accesses E L {if L. offset = null then E. place : =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-32.jpg)
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) } 32
![An Example x Ay z n 1 10 n 2 An Example x : = A[y, z] n 1 = 10, n 2 =](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-33.jpg)
An Example x : = A[y, z] n 1 = 10, n 2 = 20, w = 4 c = base. A - ((1 20) + 1) 4 = base. A - 84 t 1 t 2 t 3 t 4 x : = : = : = y * 20 t 1 + z c t 1 * 4 t 2[t 3] t 4 33
![Type Conversion E E 1 E 2 E place newtemp if Type Conversion E E 1 + E 2 {E. place : = newtemp; if](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-34.jpg)
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 … } 34
![FlowofControl Statements S if E then S 1 else S 2 Flow-of-Control Statements S | | | if E then S 1 else S 2](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-35.jpg)
Flow-of-Control Statements S | | | 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 Vn-1: Sn-1 default: Sn end 35
![Conditional Statements S if E then S 1 E true newlabel E Conditional Statements S if E then S 1 {E. true : = newlabel; E.](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-36.jpg)
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 E. true: E. true E. false S 1. code E. false: 36
![Conditional Statements S if E then S 1 else S 2 E true Conditional Statements S if E then S 1 else S 2 {E. true :](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-37.jpg)
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 E. true: E. true E. false S 1. code goto S. next E. false: S 2. code S. next: 37
![Loop Statements S while E do S 1 S begin newlabel S Loop Statements S while E do S 1 {S. begin : = newlabel; S.](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-38.jpg)
Loop Statements S while E do S 1 {S. begin : = newlabel; S. begin: E. true : = newlabel; E. code E. false : = S. next; S 1. next : = S. begin; E. true: S. code : = S 1. code gen(S. begin ‘: ’) || E. code goto S. next || gen(E. true ‘: ’) E. false: || S 1. code || gen(‘goto’ S. begin) } E. true E. false 38
![Boolean Expressions E E 1 or E 2 E 1 true E Boolean Expressions E E 1 or E 2 {E 1. true : = E.](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-39.jpg)
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)} 39 E false {E. code : = gen(‘goto’ E. false)}
![An Example a b or c d and e f if An Example a < b or c < d and e < f if](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-40.jpg)
An Example a < b or c < d and e < f if a < b goto Ltrue goto L 1: if c < d goto L 2 goto Lfalse L 2: if e < f goto Ltrue goto Lfalse 40
![An Example while a b do if c d then x An Example while a < b do if c < d then x :](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-41.jpg)
An Example while a < b do if c < d then x : = y + z else x : = y - z Lbegin: if a < b goto L 1 goto Lnext L 1: if c < d goto L 2 goto L 3 L 2: t 1 : = y + z x : = t 1 goto Lbegin L 3: t 2 : = y - z x : = t 2 goto Lbegin Lnext: 41
![Case Statements Conditional gotos less than 10 cases Jump table Case Statements • Conditional goto’s – less than 10 cases • Jump table –](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-42.jpg)
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 42
![Conditional Gotos L 1 Ln1 Ln test next code to evaluate E into t Conditional Goto’s L 1: Ln-1: Ln: test: next: code to evaluate E into t](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-43.jpg)
Conditional Goto’s L 1: Ln-1: Ln: test: next: code to evaluate E into t goto test code for S 1 goto next … code for Sn-1 goto next code for Sn goto next if t = V 1 goto L 1 … if t = Vn-1 goto Ln 43
![Jump Table code to evaluate E into t if t Vmin goto Ldefault Jump Table code to evaluate E into t if t < Vmin goto Ldefault](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-44.jpg)
Jump Table code to evaluate E into t if t < Vmin goto Ldefault if t > Vmax goto Ldefault i : = t - Vmin L : = jump. Table[i] goto L 44
![Hash Table code to evaluate E into t i hasht L Hash Table code to evaluate E into t i : = hash(t) L :](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-45.jpg)
Hash Table code to evaluate E into t i : = hash(t) L : = hash. Table[i] goto L 45
![Procedure Calls S call id Elist for each item p on queue Procedure Calls S call id “(” Elist “)” {for each item p on queue](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-46.jpg)
Procedure Calls S call id “(” Elist “)” {for each item p on queue do emit(‘param’ p); emit(‘call’ id. place)} Elist “, ” E {append E. place to the end of queue} Elist E {initialize queue to contain only E. place} 46
![](https://slidetodoc.com/presentation_image_h/2e8651851b1e31fe8e47d98566385f04/image-47.jpg)
Intermediate code
Types and declarations in intermediate code generation
Backpatching in intermediate code generation
First generation antipsychotics vs second
Oh lord you are good and your mercy endureth forever
Code commit code build code deploy
Lllloop
Dynamic class loading
Input dan output pada tahap code generator
Object code generation
Java runtime code generation
Papyrus code generation
Compiler code generation
Contoh semantics
Intermediate code example
Analisis semantik memanfaatkan
Why do individual languages vary among places
Assembly code example
Jumlah level dalam gambar ini adalah . . . .
Turing unrecognizable languages
Love language test
Love language test
Love language test
5 love languages list
11 official languages of south africa
How many languages are there
What is ruby
Roman achievements that are still used today
Relational query languages in dbms
Real-time systems and programming languages
Language
Cs 421 uiuc
Thread dalam java
Pumping lemma non regular languages examples
Akwa ibom state
New zealand official languages english
Derya balaban
Languages for life and work
Carol can speak three foreign languages
Importance of media and information languages
Love language list
Low level languages
Asian languages written
Five love languages.com
Programming languages levels
Introduction to programming languages
Polysynthetic language
Decidable languages