compiler construction - lecture : [1ex] summer semester ... · lecture 16: code generation ii (the...
TRANSCRIPT
![Page 1: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/1.jpg)
Compiler ConstructionLecture 16: Code Generation II (The Translation)
Summer Semester 2016
Thomas NollSoftware Modeling and Verification GroupRWTH Aachen University
https://moves.rwth-aachen.de/teaching/ss-16/cc/
![Page 2: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/2.jpg)
Recap: Intermediate Code
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
2 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 3: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/3.jpg)
Recap: Intermediate Code
Syntax of EPL
Definition (Syntax of EPL)
The syntax of EPL is defined as follows:
Z : z (* z is an integer *)Ide : I (* I is an identifier *)AExp : A ::= z | I | A1 + A2 | . . .BExp : B ::= A1 < A2 | not B | B1 and B2 | B1 or B2
Cmd : C ::= I := A | C1;C2 | if B then C1 else C2 | while B do C | I()Dcl : D ::= DC DV DP
DC ::= ε | const I1 := z1, . . . ,In := zn;DV ::= ε | var I1, . . . ,In;DP ::= ε | proc I1;K1; . . . ;proc In;Kn;
Blk : K ::= D CPgm : P ::= in/out I1, . . . ,In;K.
3 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 4: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/4.jpg)
Recap: Intermediate Code
The Abstract Machine AM
Definition (Abstract machine for EPL)
The abstract machine for EPL (AM) is defined by the state space
S := PC × DS × PS
with• the program counter PC := N,• the data stack DS := Z∗ (top of stack to the right), and• the procedure stack (or: runtime stack) PS := Z∗ (top of stack to the left).
Thus a state s = (pc, d , p) ∈ S is given by• a program counter pc ∈ PC,• a data stack d = d .r : . . . : d .1 ∈ DS, and• a procedure stack p = p.1 : . . . : p.t ∈ PS.
4 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 5: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/5.jpg)
Recap: Intermediate Code
AM Instructions
Definition (AM instructions)
The set of AM instructions is divided intoarithmetic instructions: ADD, MULT, ...Boolean instructions: NOT, AND, OR, LT, ...jumping instructions: JMP(ca), JFALSE(ca) (ca ∈ PC)procedure instructions: CALL(ca,dif,loc) (ca ∈ PC, dif , loc ∈ N), RETtransfer instructions: LOAD(dif,off), STORE(dif,off) (dif , off ∈ N), LIT(z) (z ∈ Z)
5 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 6: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/6.jpg)
Recap: Intermediate Code
Structure of Procedure Stack I
The semantics of procedure and transfer instructions requires a particular structureof the procedure stack p ∈ PS: it must be composed of frames (or: activationrecords) of the form
sl : dl : ra : v1 : . . . : vk
wherestatic link sl : points to frame of surrounding declaration environment
=⇒ used to access non-local variablesdynamic link dl : points to previous frame (i.e., of calling procedure)
=⇒ used to remove topmost frame after termination of procedure callreturn address ra: program counter after termination of procedure call
=⇒ used to continue program execution after termination of procedure calllocal variables vi : values of locally declared variables
6 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 7: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/7.jpg)
Recap: Intermediate Code
Structure of Procedure Stack II
Observation:• The usage of a variable in a procedure body refers to its innermost declaration.• If the level difference between the usage and the declaration is dif , then a chain of dif static
links has to be followed to access the corresponding frame.
Example (cf. Example 15.9)
in/out x;
const c = 10;
var y;
proc P;
var y, z;
proc Q;
var x, z;
[... P() ...][... x ... y ... Q() ...]
proc R;
[... P() ...][... P() ...].
Procedure stack after second call of P:
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
P uses x =⇒ dif = 2P uses y =⇒ dif = 0
7 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 8: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/8.jpg)
Recap: Intermediate Code
Structure of Procedure Stack II
Observation:• The usage of a variable in a procedure body refers to its innermost declaration.• If the level difference between the usage and the declaration is dif , then a chain of dif static
links has to be followed to access the corresponding frame.
Example (cf. Example 15.9)
in/out x;
const c = 10;
var y;
proc P;
var y, z;
proc Q;
var x, z;
[... P() ...][... x ... y ... Q() ...]
proc R;
[... P() ...][... P() ...].
Procedure stack after second call of P:
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
P uses x =⇒ dif = 2P uses y =⇒ dif = 0
7 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 9: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/9.jpg)
Recap: Intermediate Code
Structure of Procedure Stack II
Observation:• The usage of a variable in a procedure body refers to its innermost declaration.• If the level difference between the usage and the declaration is dif , then a chain of dif static
links has to be followed to access the corresponding frame.
Example (cf. Example 15.9)
in/out x;
const c = 10;
var y;
proc P;
var y, z;
proc Q;
var x, z;
[... P() ...][... x ... y ... Q() ...]
proc R;
[... P() ...][... P() ...].
Procedure stack after second call of P:
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
P uses x =⇒ dif = 2
P uses y =⇒ dif = 0
7 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 10: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/10.jpg)
Recap: Intermediate Code
Structure of Procedure Stack II
Observation:• The usage of a variable in a procedure body refers to its innermost declaration.• If the level difference between the usage and the declaration is dif , then a chain of dif static
links has to be followed to access the corresponding frame.
Example (cf. Example 15.9)
in/out x;
const c = 10;
var y;
proc P;
var y, z;
proc Q;
var x, z;
[... P() ...][... x ... y ... Q() ...]
proc R;
[... P() ...][... P() ...].
Procedure stack after second call of P:
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
P uses x =⇒ dif = 2P uses y =⇒ dif = 0
7 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 11: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/11.jpg)
Semantics of Procedure and Transfer Instructions
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
8 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 12: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/12.jpg)
Semantics of Procedure and Transfer Instructions
The base Function
Computes static link information upon procedure call, given procedure stack andlevel differenceDefinition (base function)
The function base : PS × N 99K N is given by
base(p, 0) := 1base(p, dif + 1) := base(p, dif ) + p.base(p, dif )
Example (cf. Example 16.4)
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
In the second call of P (from Q): dif = 2base(p, 0) = 1
=⇒ base(p, 1) = 1 + p.1 = 6=⇒ base(p, 2) = 6 + p.6 = 11=⇒ sl = base(p, 2) + 2︸︷︷︸
dl,ra
+ 2︸︷︷︸y,z
= 15
9 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 13: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/13.jpg)
Semantics of Procedure and Transfer Instructions
The base Function
Computes static link information upon procedure call, given procedure stack andlevel differenceDefinition (base function)
The function base : PS × N 99K N is given by
base(p, 0) := 1base(p, dif + 1) := base(p, dif ) + p.base(p, dif )
Example (cf. Example 16.4)
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
In the second call of P (from Q): dif = 2base(p, 0) = 1
=⇒ base(p, 1) = 1 + p.1 = 6=⇒ base(p, 2) = 6 + p.6 = 11=⇒ sl = base(p, 2) + 2︸︷︷︸
dl,ra
+ 2︸︷︷︸y,z
= 15
9 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 14: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/14.jpg)
Semantics of Procedure and Transfer Instructions
The base Function
Computes static link information upon procedure call, given procedure stack andlevel differenceDefinition (base function)
The function base : PS × N 99K N is given by
base(p, 0) := 1base(p, dif + 1) := base(p, dif ) + p.base(p, dif )
Example (cf. Example 16.4)
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
In the second call of P (from Q): dif = 2base(p, 0) = 1
=⇒ base(p, 1) = 1 + p.1 = 6
=⇒ base(p, 2) = 6 + p.6 = 11=⇒ sl = base(p, 2) + 2︸︷︷︸
dl,ra
+ 2︸︷︷︸y,z
= 15
9 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 15: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/15.jpg)
Semantics of Procedure and Transfer Instructions
The base Function
Computes static link information upon procedure call, given procedure stack andlevel differenceDefinition (base function)
The function base : PS × N 99K N is given by
base(p, 0) := 1base(p, dif + 1) := base(p, dif ) + p.base(p, dif )
Example (cf. Example 16.4)
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
In the second call of P (from Q): dif = 2base(p, 0) = 1
=⇒ base(p, 1) = 1 + p.1 = 6=⇒ base(p, 2) = 6 + p.6 = 11
=⇒ sl = base(p, 2) + 2︸︷︷︸dl,ra
+ 2︸︷︷︸y,z
= 15
9 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 16: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/16.jpg)
Semantics of Procedure and Transfer Instructions
The base Function
Computes static link information upon procedure call, given procedure stack andlevel differenceDefinition (base function)
The function base : PS × N 99K N is given by
base(p, 0) := 1base(p, dif + 1) := base(p, dif ) + p.base(p, dif )
Example (cf. Example 16.4)
15 4 5 4 5 4 4 3 0 0 0
sl dl ra y z sl dl ra x z sl dl ra y z sl dl ra y sl dl ra x
P() Q() P() MAIN I/O
In the second call of P (from Q): dif = 2base(p, 0) = 1
=⇒ base(p, 1) = 1 + p.1 = 6=⇒ base(p, 2) = 6 + p.6 = 11=⇒ sl = base(p, 2) + 2︸︷︷︸
dl,ra
+ 2︸︷︷︸y,z
= 15
9 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 17: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/17.jpg)
Semantics of Procedure and Transfer Instructions
Semantics of Procedure Instructions• CALL(ca,dif,loc) with
– code address ca ∈ PC– level difference dif ∈ N– number of local variables loc ∈ Ncreates new frame and jumps to given address (= starting address of procedure)• RET removes the topmost frame and returns to the calling site
Definition (Semantics of procedure instructions)
The semantics of a procedure instruction O, JOK : S 99K S, is defined as follows:JCALL(ca,dif,loc)K(pc, d , p):= (ca, d , (base(p, dif ) + loc + 2)︸ ︷︷ ︸
sl
: (loc + 2)︸ ︷︷ ︸dl
: (pc + 1)︸ ︷︷ ︸ra
: 0 : . . . : 0︸ ︷︷ ︸×loc
: p)
JRETK(pc, d , p.1 : . . . : p.t):= ( p.3︸︷︷︸
ra
, d , p.( p.2︸︷︷︸dl
+ 2) : . . . : p.t) if t ≥ p.2 + 2
10 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 18: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/18.jpg)
Semantics of Procedure and Transfer Instructions
Semantics of Procedure Instructions• CALL(ca,dif,loc) with
– code address ca ∈ PC– level difference dif ∈ N– number of local variables loc ∈ Ncreates new frame and jumps to given address (= starting address of procedure)• RET removes the topmost frame and returns to the calling site
Definition (Semantics of procedure instructions)
The semantics of a procedure instruction O, JOK : S 99K S, is defined as follows:JCALL(ca,dif,loc)K(pc, d , p):= (ca, d , (base(p, dif ) + loc + 2)︸ ︷︷ ︸
sl
: (loc + 2)︸ ︷︷ ︸dl
: (pc + 1)︸ ︷︷ ︸ra
: 0 : . . . : 0︸ ︷︷ ︸×loc
: p)
JRETK(pc, d , p.1 : . . . : p.t):= ( p.3︸︷︷︸
ra
, d , p.( p.2︸︷︷︸dl
+ 2) : . . . : p.t) if t ≥ p.2 + 2
10 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 19: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/19.jpg)
Semantics of Procedure and Transfer Instructions
Semantics of Transfer Instructions• LOAD(dif,off) and STORE(dif,off) with
– level difference dif ∈ N– variable offset off ∈ Nrespectively load and store variable values between data and procedure stack, following achain of dif static links• LIT(z) loads the literal constant z ∈ Z
Definition (Semantics of transfer instructions)
The semantics of a transfer instruction O, JOK : S 99K S, is defined as follows:
JLOAD(dif,off)K(pc, d , p) := (pc + 1, d : p.(base(p, dif ) + off + 2), p)JSTORE(dif,off)K(pc, d : z, p) := (pc + 1, d , p[base(p, dif ) + off + 2 7→ z])
JLIT(z)K(pc, d , p) := (pc + 1, d : z, p)
11 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 20: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/20.jpg)
Semantics of Procedure and Transfer Instructions
Semantics of Transfer Instructions• LOAD(dif,off) and STORE(dif,off) with
– level difference dif ∈ N– variable offset off ∈ Nrespectively load and store variable values between data and procedure stack, following achain of dif static links• LIT(z) loads the literal constant z ∈ Z
Definition (Semantics of transfer instructions)
The semantics of a transfer instruction O, JOK : S 99K S, is defined as follows:
JLOAD(dif,off)K(pc, d , p) := (pc + 1, d : p.(base(p, dif ) + off + 2), p)JSTORE(dif,off)K(pc, d : z, p) := (pc + 1, d , p[base(p, dif ) + off + 2 7→ z])
JLIT(z)K(pc, d , p) := (pc + 1, d : z, p)
11 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 21: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/21.jpg)
Semantics of Procedure and Transfer Instructions
AM Programs and Their Semantics
Definition (Semantics of AM programs)
An AM program is a sequence of k ≥ 1 labelled AM instructions:
P = 1 : O1; . . . ; k : Ok
The set of all AM programs is denoted by AM.
The semantics of AM programs is determined by
J.K : AM × S 99K S
with
JPK(pc, d , p) :=
{JPK(JOpcK(pc, d , p)) if pc ∈ [k ](pc, d , p) otherwise
12 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 22: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/22.jpg)
Semantics of Procedure and Transfer Instructions
AM Programs and Their Semantics
Definition (Semantics of AM programs)
An AM program is a sequence of k ≥ 1 labelled AM instructions:
P = 1 : O1; . . . ; k : Ok
The set of all AM programs is denoted by AM.
The semantics of AM programs is determined by
J.K : AM × S 99K S
with
JPK(pc, d , p) :=
{JPK(JOpcK(pc, d , p)) if pc ∈ [k ](pc, d , p) otherwise
12 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 23: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/23.jpg)
The Symbol Table
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
13 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 24: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/24.jpg)
The Symbol Table
Structure of Symbol Table
Goal: define translation mapping trans : Pgm 99K AM
The translation employs a symbol table:
Tab := {st | st : Ide 99K ({const} × Z)∪ ({var} × Lev × Off )∪ ({proc} × PC × Lev × Size)}
whose entries are created by declarations:• constant declarations: (const, z)
– value z ∈ Z• variable declarations: (var, lev , off )
– declaration level lev ∈ Lev := N (0∼= I/O, 1∼= MAIN, ...)– offset off ∈ Off := N– offset and difference between usage and declaration level determine procedure stack entry
• procedure declarations: (proc, ca, lev , loc)– code address ca ∈ PC– declaration level lev ∈ Lev– number of local variables loc ∈ Size := N
14 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 25: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/25.jpg)
The Symbol Table
Structure of Symbol Table
Goal: define translation mapping trans : Pgm 99K AMThe translation employs a symbol table:
Tab := {st | st : Ide 99K ({const} × Z)∪ ({var} × Lev × Off )∪ ({proc} × PC × Lev × Size)}
whose entries are created by declarations:• constant declarations: (const, z)
– value z ∈ Z• variable declarations: (var, lev , off )
– declaration level lev ∈ Lev := N (0∼= I/O, 1∼= MAIN, ...)– offset off ∈ Off := N– offset and difference between usage and declaration level determine procedure stack entry
• procedure declarations: (proc, ca, lev , loc)– code address ca ∈ PC– declaration level lev ∈ Lev– number of local variables loc ∈ Size := N
14 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 26: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/26.jpg)
The Symbol Table
Structure of Symbol Table
Goal: define translation mapping trans : Pgm 99K AMThe translation employs a symbol table:
Tab := {st | st : Ide 99K ({const} × Z)∪ ({var} × Lev × Off )∪ ({proc} × PC × Lev × Size)}
whose entries are created by declarations:• constant declarations: (const, z)
– value z ∈ Z• variable declarations: (var, lev , off )
– declaration level lev ∈ Lev := N (0∼= I/O, 1∼= MAIN, ...)– offset off ∈ Off := N– offset and difference between usage and declaration level determine procedure stack entry
• procedure declarations: (proc, ca, lev , loc)– code address ca ∈ PC– declaration level lev ∈ Lev– number of local variables loc ∈ Size := N
14 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 27: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/27.jpg)
The Symbol Table
Maintaining the Symbol TableFunction update(D, st, lev) specifies update of symbol table st according todeclaration D (with respect to current level lev ):
Definition (update function)
update : Dcl × Tab × Lev 99K Tab is defined byupdate(DC DV DP, st, lev):= update(DP, update(DV , update(DC, st, lev), lev), lev)
if all identifiers in DC DV DP differentupdate(ε, st, lev):= stupdate(const I1 := z1, . . . ,In := zn;, st, lev):= st[I1 7→ (const, z1), . . . , In 7→ (const, zn)]update(var I1, . . . ,In;, st, lev):= st[I1 7→ (var, lev , 1), . . . , In 7→ (var, lev , n)]update(proc I1;K1; . . . ;proc In;Kn;, st, lev):= st[I1 7→ (proc, a1, lev , size(K1)), . . . , In 7→ (proc, an, lev , size(Kn))]
with “fresh” addresses a1, . . . , an where size(DC var I1, . . . ,In; DPC) := n
15 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 28: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/28.jpg)
The Symbol Table
Maintaining the Symbol TableFunction update(D, st, lev) specifies update of symbol table st according todeclaration D (with respect to current level lev ):
Definition (update function)
update : Dcl × Tab × Lev 99K Tab is defined byupdate(DC DV DP, st, lev):= update(DP, update(DV , update(DC, st, lev), lev), lev)
if all identifiers in DC DV DP differentupdate(ε, st, lev):= stupdate(const I1 := z1, . . . ,In := zn;, st, lev):= st[I1 7→ (const, z1), . . . , In 7→ (const, zn)]update(var I1, . . . ,In;, st, lev):= st[I1 7→ (var, lev , 1), . . . , In 7→ (var, lev , n)]update(proc I1;K1; . . . ;proc In;Kn;, st, lev):= st[I1 7→ (proc, a1, lev , size(K1)), . . . , In 7→ (proc, an, lev , size(Kn))]
with “fresh” addresses a1, . . . , an where size(DC var I1, . . . ,In; DPC) := n
15 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 29: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/29.jpg)
The Symbol Table
The Initial Symbol Table
Reminder: an EPL program P = in/out I1, . . . ,In;K. ∈ Pgm has a semantics oftype Zn 99K Zn.
Given input values (z1, . . . , zn) ∈ Zn, we choose the initial state
s := (1, ε, 0 : 0 : 0 : z1 : . . . : zn︸ ︷︷ ︸I/O frame
) ∈ S = PC × DS × PS
Thus the corresponding initial symbol table has n entries:
stI/O(Ij) := (var, 0︸︷︷︸lev
, j︸︷︷︸off
) for every j ∈ [n]
16 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 30: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/30.jpg)
The Symbol Table
The Initial Symbol Table
Reminder: an EPL program P = in/out I1, . . . ,In;K. ∈ Pgm has a semantics oftype Zn 99K Zn.
Given input values (z1, . . . , zn) ∈ Zn, we choose the initial state
s := (1, ε, 0 : 0 : 0 : z1 : . . . : zn︸ ︷︷ ︸I/O frame
) ∈ S = PC × DS × PS
Thus the corresponding initial symbol table has n entries:
stI/O(Ij) := (var, 0︸︷︷︸lev
, j︸︷︷︸off
) for every j ∈ [n]
16 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 31: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/31.jpg)
The Symbol Table
The Initial Symbol Table
Reminder: an EPL program P = in/out I1, . . . ,In;K. ∈ Pgm has a semantics oftype Zn 99K Zn.
Given input values (z1, . . . , zn) ∈ Zn, we choose the initial state
s := (1, ε, 0 : 0 : 0 : z1 : . . . : zn︸ ︷︷ ︸I/O frame
) ∈ S = PC × DS × PS
Thus the corresponding initial symbol table has n entries:
stI/O(Ij) := (var, 0︸︷︷︸lev
, j︸︷︷︸off
) for every j ∈ [n]
16 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 32: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/32.jpg)
Translation of Programs
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
17 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 33: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/33.jpg)
Translation of Programs
Translation of Programs
Translation of in/out I1, . . . ,In;D C.:1. Create MAIN frame for executing C2. Stop program execution after return
Definition (Translation of programs)
The mappingtrans : Pgm 99K AM
is defined by
trans(in/out I1, . . . ,In;K.) := 1 : CALL(a,0,size(K ));2 : JMP(0);kt(K , stI/O, a, 1)
with “fresh” address a
18 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 34: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/34.jpg)
Translation of Programs
Translation of Programs
Translation of in/out I1, . . . ,In;D C.:1. Create MAIN frame for executing C2. Stop program execution after return
Definition (Translation of programs)
The mappingtrans : Pgm 99K AM
is defined by
trans(in/out I1, . . . ,In;K.) := 1 : CALL(a,0,size(K ));2 : JMP(0);kt(K , stI/O, a, 1)
with “fresh” address a
18 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 35: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/35.jpg)
Translation of Blocks
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
19 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 36: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/36.jpg)
Translation of Blocks
Translation of Blocks
Translation of D C:1. Update symbol table according to D2. Create code for procedures declared in D
(using the updated symbol table – recursion!)3. Create code for C (using the updated symbol table)
Definition (Translation of blocks)
The mappingkt : Blk × Tab × PC × Lev 99K AM
(“block translation”) is defined by
kt(D C, st, a, lev) := dt(D, update(D, st, lev), lev)ct(C, update(D, st, lev), a, lev)a′ : RET;
20 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 37: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/37.jpg)
Translation of Blocks
Translation of Blocks
Translation of D C:1. Update symbol table according to D2. Create code for procedures declared in D
(using the updated symbol table – recursion!)3. Create code for C (using the updated symbol table)
Definition (Translation of blocks)
The mappingkt : Blk × Tab × PC × Lev 99K AM
(“block translation”) is defined by
kt(D C, st, a, lev) := dt(D, update(D, st, lev), lev)ct(C, update(D, st, lev), a, lev)a′ : RET;
20 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 38: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/38.jpg)
Translation of Declarations
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
21 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 39: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/39.jpg)
Translation of Declarations
Translation of Declarations
Translation of D: generate code for the procedures declared in D
Definition (Translation of declarations)
The mappingdt : Dcl × Tab × Lev 99K AM
(“declaration translation”) is defined by
dt(DC DV DP, st, lev) := dt(DP, st, lev)dt(ε, st, lev) := ε
dt(proc I1;K1; . . . ;proc In;Kn;, st, lev) := kt(K1, st, a1, lev + 1)...
kt(Kn, st, an, lev + 1)where st(Ij) = (proc, aj, . . . , . . .)for every j ∈ [n]
22 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 40: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/40.jpg)
Translation of Declarations
Translation of Declarations
Translation of D: generate code for the procedures declared in D
Definition (Translation of declarations)
The mappingdt : Dcl × Tab × Lev 99K AM
(“declaration translation”) is defined by
dt(DC DV DP, st, lev) := dt(DP, st, lev)dt(ε, st, lev) := ε
dt(proc I1;K1; . . . ;proc In;Kn;, st, lev) := kt(K1, st, a1, lev + 1)...
kt(Kn, st, an, lev + 1)where st(Ij) = (proc, aj, . . . , . . .)for every j ∈ [n]
22 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 41: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/41.jpg)
Translation of Commands
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
23 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 42: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/42.jpg)
Translation of Commands
Translation of Commands
Definition (Translation of commands)
The mappingct : Cmd × Tab × PC × Lev 99K AM
(“command translation”) is defined by
ct(I := A, st, a, lev) := at(A, st, a, lev); a′ : STORE(lev − lev ′,off);if st(I) = (var, lev ′, off )
ct(I(), st, a, lev) := a : CALL(ca,lev − lev ′,loc);if st(I) = (proc, ca, lev ′, loc)
ct(C1;C2, st, a, lev) := ct(C1, st, a, lev); ct(C2, st, a′, lev)ct(if B then C1 else C2, st, a, lev) := bt(B, st, a, lev); a′ : JFALSE(a′′);
ct(C1, st, a′ + 1, lev); a′′ − 1 : JMP(a′′′);ct(C2, st, a′′, lev); a′′′ :
ct(while B do C, st, a, lev) := bt(B, st, a, lev); a′ : JFALSE(a′′ + 1);ct(C, st, a′ + 1, lev); a′′ : JMP(a);
24 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 43: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/43.jpg)
Translation of Expressions
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
25 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 44: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/44.jpg)
Translation of Expressions
Translation of Boolean Expressions
Definition (Translation of Boolean expressions)
The mappingbt : BExp × Tab × PC × Lev 99K AM
(“Boolean expression translation”) is defined by
bt(A1 < A2, st, a, lev) := at(A1, st, a, lev); at(A2, st, a′, lev); a′′ : LT;bt(not B, st, a, lev) := bt(B, st, a, lev); a′ : NOT;
bt(B1 and B2, st, a, lev) := bt(B1, st, a, lev); bt(B2, st, a′, lev); a′′ : AND;bt(B1 or B2, st, a, lev) := bt(B1, st, a, lev); bt(B2, st, a′, lev); a′′ : OR;
26 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 45: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/45.jpg)
Translation of Expressions
Translation of Arithmetic Expressions
Definition (Translation of arithmetic expressions)
The mappingat : AExp × Tab × PC × Lev 99K AM
(“arithmetic expression translation”) is defined by
at(z, st, a, lev) := a : LIT(z);
at(I, st, a, lev) :=
{a : LIT(z); if st(I) = (const, z)a : LOAD(lev − lev ′,off); if st(I) = (var, lev ′, off )
at(A1 + A2, st, a, lev) := at(A1, st, a, lev)at(A2, st, a′, lev)a′′ : ADD;
27 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 46: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/46.jpg)
A Translation Example
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
28 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 47: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/47.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
Intermediate code:
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 48: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/48.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
trans(in/out I1, . . . ,In;K.) :=1 : CALL(a,0,size(K ));2 : JMP(0);kt(K , stI/O, a, 1)
stI/O = [x 7→ (var, 0, 1)]
Intermediate code:trans(in/out x;K.)
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 49: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/49.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
kt(D C, st, a, lev) := dt(D, update(D, st, lev), lev)ct(C, update(D, st, lev), a, lev)a′ : RET;
stI/O = [x 7→ (var, 0, 1)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
kt(K , stI/O, a0, 1)
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 50: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/50.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
update(var I1, . . . ,In;, st, lev) :=st[I1 7→ (var, l, 1), . . . , In 7→ (var, l, n)]
update(proc I1;K1; . . . ;proc In;Kn;, st, lev) :=st[I1 7→ (proc, a1, l, size(K1)), . . . , In 7→ (proc, an, l, size(Kn))]
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
dt(D, update(D, stI/O, 1), 1)ct(C, update(D, stI/O, 1), a0, 1)
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 51: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/51.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
dt(proc I1;K1; . . . ;proc In;Kn;, st, lev) :=kt(K1, st, a1, lev + 1)
...kt(Kn, st, an, lev + 1)
where st(Ij) = (proc, aj , . . . , . . .) for every j ∈ [n]st′ = [x 7→ (var, 0, 1),
y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
dt(D, st′, 1)ct(C, st′, a0, 1)
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 52: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/52.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
kt(D C, st, a, lev) := dt(D, update(D, st, lev), lev)ct(C, update(D, st, lev), a, lev)a′ : RET;
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
kt(KF, st′, a1, 2)
ct(C, st′, a0, 1)a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 53: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/53.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
ct(if B then C1 else C2, st, a, lev) :=bt(B, st, a, lev)a′ : JFALSE(a′′);ct(C1, st, a′ + 1, lev)a′′ − 1 : JMP(a′′′);ct(C2, st, a′′, lev)a′′′ :
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
ct(CF, st′, a1, 2)
a3 : RET;ct(C, st′, a0, 1)
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 54: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/54.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
bt(A1 > A2, st, a, lev) := at(A1, st, a, lev)at(A2, st, a′, lev)a′′ : GT;
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
bt(x > 1, st′, a1, 2)a4 : JFALSE(a3);
ct(C1, st′, a4 + 1, 2)
a3 : RET;ct(C, st′, a0, 1)
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 55: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/55.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
at(I, st, a, lev) :={a : LIT(z); if st(I) = (const, z)a : LOAD(lev − lev ′,off); if st(I) = (var, lev ′, off )
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
at(x, st′, a1, 2)at(1, st′, a′, 2)GT;
a4 : JFALSE(a3);ct(C1, st
′, a4 + 1, 2)a3 : RET;
ct(C, st′, a0, 1)a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 56: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/56.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
at(z, st, a, lev) := a : LIT(z);
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
a1 : LOAD(2,1);at(1, st′, a′, 2)GT;
a4 : JFALSE(a3);ct(C1, st
′, a4 + 1, 2)a3 : RET;
ct(C, st′, a0, 1)a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 57: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/57.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
ct(I := A, st, a, lev) := at(A, st, a, lev)a′ : STORE(lev − lev ′,off);
if st(I) = (var, lev ′, off )st′ = [x 7→ (var, 0, 1),
y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
a1 : LOAD(2,1);LIT(1);GT;
a4 : JFALSE(a3);ct(C1, st
′, a4 + 1, 2)a3 : RET;
ct(C, st′, a0, 1)a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 58: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/58.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
at(A1 + A2, st, a, lev) := at(A1, st, a, lev)at(A2, st, a′, lev)a′′ : ADD;
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
a1 : LOAD(2,1);LIT(1);GT;
a4 : JFALSE(a3);at(y * x, st′, a4 + 1, 2)STORE(1,1);at(x - 1, st′, a′, 2)STORE(2,1);ct(F(), st′, a′′, 2)a3 : RET;ct(C, st′, a0, 1)
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 59: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/59.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
ct(I(), st, a, lev) := a : CALL(ca,lev − lev ′,loc);if st(I) = (proc, ca, lev ′, loc)
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
a1 : LOAD(2,1);LIT(1);GT;
a4 : JFALSE(a3);LOAD(1,1);LOAD(2,1);MULT;STORE(1,1);LOAD(2,1);LIT(1);SUB;STORE(2,1);ct(F(), st′, a′′, 2)
a3 : RET;ct(C, st′, a0, 1)
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 60: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/60.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
a1 : LOAD(2,1);LIT(1);GT;
a4 : JFALSE(a3);LOAD(1,1);LOAD(2,1);MULT;STORE(1,1);LOAD(2,1);LIT(1);SUB;STORE(2,1);CALL(a1,1,0);
a3 : RET;ct(C, st′, a0, 1)
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 61: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/61.jpg)
A Translation Example
Example: Factorial Function I
Example (Factorial function; cf. Example 15.3)
Source code:in/out x;var y;proc F;if x > 1 theny := y * x;x := x - 1;F()
y := 1;F();x := y.
st′ = [x 7→ (var, 0, 1),y 7→ (var, 1, 1),F 7→ (proc, a1, 1, 0)]
Intermediate code:1 : CALL(a0,0,1);2 : JMP(0);
a1 : LOAD(2,1);LIT(1);GT;
a4 : JFALSE(a3);LOAD(1,1);LOAD(2,1);MULT;STORE(1,1);LOAD(2,1);LIT(1);SUB;STORE(2,1);CALL(a1,1,0);
a3 : RET;a0 : LIT(1);
STORE(0,1);CALL(a1,0,0);LOAD(0,1);STORE(1,1);
a2 : RET;
29 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 62: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/62.jpg)
A Translation Example
Example: Factorial Function II
Example (Factorial function; continued)
Code with symbolic addresses:1 : CALL(a0,0,1);2 : JMP(0);
a1 : LOAD(2,1);LIT(1);GT;
a4 : JFALSE(a3);LOAD(1,1);LOAD(2,1);MULT;STORE(1,1);LOAD(2,1);LIT(1);SUB;STORE(2,1);CALL(a1,1,0);
a3 : RET;a0 : LIT(1);
STORE(0,1);CALL(a1,0,0);LOAD(0,1);STORE(1,1);
a2 : RET;
Linearised (a0 = 17, a1 = 3, a2 = 22, a3 = 16, a4 = 6):1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
30 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 63: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/63.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 64: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/64.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 2
18 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 65: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/65.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 2
19 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 23 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 66: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/66.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 67: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/67.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
4 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 68: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/68.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
5 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 69: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/69.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
6 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 70: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/70.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
7 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 71: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/71.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
8 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 72: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/72.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
9 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 210 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 73: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/73.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 74: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/74.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
11 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 75: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/75.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
12 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 76: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/76.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
13 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 77: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/77.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
14 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 78: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/78.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
15 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 13 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 79: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/79.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 80: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/80.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
4 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 81: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/81.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
5 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 82: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/82.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
6 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 83: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/83.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 84: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/84.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 85: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/85.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
20 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 86: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/86.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
21 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 87: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/87.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
22 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 22 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 88: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/88.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 89: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/89.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 2
0 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 90: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/90.jpg)
A Translation Example
Example: Factorial Function III
Example (Factorial function; continued)Computation for x = 2:1 : CALL(17,0,1);2 : JMP(0);3 : LOAD(2,1);4 : LIT(1);5 : GT;6 : JFALSE(16);7 : LOAD(1,1);8 : LOAD(2,1);9 : MULT;
10 : STORE(1,1);11 : LOAD(2,1);12 : LIT(1);13 : SUB;14 : STORE(2,1);15 : CALL(3,1,0);16 : RET;17 : LIT(1);18 : STORE(0,1);19 : CALL(3,0,0);20 : LOAD(0,1);21 : STORE(1,1);22 : RET;
PC DS PS1 ε 0 : 0 : 0 : 2
17 ε 4 : 3 : 2 : 0 : 0 : 0 : 0 : 218 1 4 : 3 : 2 : 0 : 0 : 0 : 0 : 219 ε 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
3 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 24 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 25 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 26 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 27 ε 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 28 1 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 29 1 : 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 2
10 2 3 : 2 : 20 : 4 : 3 : 2 : 1 : 0 : 0 : 0 : 211 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 212 2 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 213 2 : 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 214 1 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 215 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
3 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 14 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 15 1 : 1 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 16 0 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 1
16 ε 6 : 2 : 16 : 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 116 ε 3 : 2 : 20 : 4 : 3 : 2 : 2 : 0 : 0 : 0 : 120 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 121 2 4 : 3 : 2 : 2 : 0 : 0 : 0 : 122 ε 4 : 3 : 2 : 2 : 0 : 0 : 0 : 2
2 ε 0 : 0 : 0 : 20 ε 0 : 0 : 0 : 2
31 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 91: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/91.jpg)
Correctness of the Translation
Outline of Lecture 16
Recap: Intermediate Code
Semantics of Procedure and Transfer Instructions
The Symbol Table
Translation of Programs
Translation of Blocks
Translation of Declarations
Translation of Commands
Translation of Expressions
A Translation Example
Correctness of the Translation
32 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 92: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/92.jpg)
Correctness of the Translation
Correctness of the Translation
Theorem (Correctness of translation)
For every P ∈ Pgm, n ∈ N, and (z1, . . . , zn), (z ′1, . . . , z ′n) ∈ Zn:
JPK(z1, . . . , zn) = (z ′1, . . . , z ′n)⇐⇒ Jtrans(P)K(1, ε, 0 : 0 : 0 : z1 : . . . : zn) = (0, ε, 0 : 0 : 0 : z ′1 : . . . : z ′n)
Proof.
see M. Mohnen: A Compiler Correctness Proof for the Static Link Technique bymeans of Evolving Algebras, Fundamenta Informaticae 29(3), 1997, pp. 257–303
33 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)
![Page 93: Compiler Construction - Lecture : [1ex] Summer Semester ... · Lecture 16: Code Generation II (The Translation) Summer Semester 2016 Thomas Noll Software Modeling and Verification](https://reader033.vdocument.in/reader033/viewer/2022043004/5f870e7437b0904d1815a7f8/html5/thumbnails/93.jpg)
Correctness of the Translation
Correctness of the Translation
Theorem (Correctness of translation)
For every P ∈ Pgm, n ∈ N, and (z1, . . . , zn), (z ′1, . . . , z ′n) ∈ Zn:
JPK(z1, . . . , zn) = (z ′1, . . . , z ′n)⇐⇒ Jtrans(P)K(1, ε, 0 : 0 : 0 : z1 : . . . : zn) = (0, ε, 0 : 0 : 0 : z ′1 : . . . : z ′n)
Proof.
see M. Mohnen: A Compiler Correctness Proof for the Static Link Technique bymeans of Evolving Algebras, Fundamenta Informaticae 29(3), 1997, pp. 257–303
33 of 33 Compiler Construction
Summer Semester 2016Lecture 16: Code Generation II (The Translation)