0% found this document useful (0 votes)
3 views

Ch7

The document discusses run-time environments in compiler construction, focusing on procedure activation, lifetime, and recursive calls. It explains concepts such as activation trees, control stacks, scope rules, and parameter passing modes. Additionally, it covers static and dynamic bindings, stack allocation, and accessing nonlocal data within nested procedures.

Uploaded by

meaad mohammed
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Ch7

The document discusses run-time environments in compiler construction, focusing on procedure activation, lifetime, and recursive calls. It explains concepts such as activation trees, control stacks, scope rules, and parameter passing modes. Additionally, it covers static and dynamic bindings, stack allocation, and accessing nonlocal data within nested procedures.

Uploaded by

meaad mohammed
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

1

Run-Time Environments

Chapter 7

COP5621 Compiler Construction


Copyright Robert van Engelen, Florida State University, 2007-2011

2

Procedure Activation and


Lifetime

• A procedure is activated when called

• The lifetime of an activation of a procedure
is the sequence of steps between the first
and last steps in the execution of the
procedure body

• A procedure is recursive if a new activation
can begin before an earlier activation of the
same procedure has ended

3

Procedure Activations: Example



program sort(input, output)
var a : array [0..10] of integer;
procedure readarray;
var i : integer;
begin Activations:
for i := 1 to 9 do read(a[i]) begin sort
end;
function partition(y, z : integer) : integer
enter readarray
var i, j, x, v : integer; leave readarray
begin … enter quicksort(1,9)
end enter partition(1,9)
procedure quicksort(m, n : integer); leave partition(1,9)
var i : integer; enter quicksort(1,3)
begin

if (n > m) then begin
i := partition(m, n);
leave quicksort(1,3)
quicksort(m, i - 1); enter quicksort(5,9)
quicksort(i + 1, n) …
end leave quicksort(5,9)
end; leave quicksort(1,9)
begin end sort.
a[0] := -9999; a[10] := 9999;
readarray;
quicksort(1, 9)
end.
4

Activation Trees: Example


r q(1,9)

p(1,9) q(1,3) q(5,9)

p(1,3) q(1,0) q(2,3) p(5,9) q(5,5) q(7,9)

p(2,3) q(2,1) q(3,3) p(7,9) q(7,7) q(9,9)

Activation tree for the sort program


Note: also referred to as the dynamic call graph

5

Control Stack

Activation tree:
Control Activations:
begin sort
s stack:
enter readarray
r s leave readarray
q(1,9) enter quicksort(1,9)
q(1,9) enter partition(1,9)
p(1,9) q(1,3) q(1,3) leave partition(1,9)
enter quicksort(1,3)
q(2,3) enter partition(1,3)
p(1,3) q(1,0) q(2,3) leave partition(1,3)
enter quicksort(1,0)
leave quicksort(1,0)
enter quicksort(2,3)

6

Scope Rules

• Environment determines name-to-object
bindings: which objects are in scope?

program prg;
var y : real;
function x(a : real) : real;
begin … end;
procedure p;
var x : integer;
Variable x locally declared in p
begin
x := 1;

end;
begin
y := x(0.0);
A function x

end.
7

Mapping Names to Values


environment
state

name
storage
value

var i;

i := 0;

i := i + 1;
8

Mapping Names to Values



At compile time
At run time

environment
state

name
storage
value

var i;

i := 0;

i := i + 1;
9

Static and Dynamic Notions of


Bindings

Static Notion
Dynamic Notion

Activations of the
Definition of a procedure

procedure

Declaration of a name
Bindings of the name

Scope of a declaration
Lifetime of a binding

10

Stack Allocation

• Activation records (subroutine frames) on the run-
time stack hold the state of a subroutine

• Calling sequences are code statements to create
activations records on the stack and enter data in
them

– Caller’s calling sequence enters actual arguments,
control link, access link, and saved machine state

– Callee’s calling sequence initializes local data

– Callee’s return sequence enters return value

– Caller’s return sequence removes activation record

11

Activation Records
(Subroutine Frames)

fp
(frame pointer)
Returned value

Actual parameters

Caller’s
Optional control link
responsibility
to initialize

Optional access link

Save machine status

Local data
Callee’s
responsibility
Temporaries
to initialize

12

Control Links

The control link is the old


value of the fp

Caller’s activation record



fp

Callee’s activation record

Control link

sp

Stack
growth

13

Scope with Nested Procedures


program sort(input, output)
var a : array [0..10] of integer;
x : integer;
procedure readarray;
var i : integer;
begin … end;
procedure exchange(i, j : integer);
begin x := a[i]; a[i] := a[j]; a[j] := x end;
procedure quicksort(m, n : integer);
var k, v : integer;
function partition(y, z : integer) : integer
var i, j : integer;
begin … exchange(i, j) … end
begin
if (n > m) then begin
i := partition(m, n);
quicksort(m, i - 1);
quicksort(i + 1, n)
end
end;
begin

quicksort(1, 9)
end.
14

Access Links (Static Links)



s s s s

a x
a x
a x
a x

q(1,9) q(1,9) q(1,9) q(1,9)
access access access access
k v k v k v k v
q(1,3) q(1,3) q(1,3)
access access access
k v k v k v
p(1,3) p(1,3)
The access link points to the access access
activation record of the static i j i j
parent procedure:
e(1,3)
s is parent of r, e, and q access
q is parent of p

15

Accessing Nonlocal Data



• To implement access to nonlocal data a in
procedure p, the compiler generates code to
traverse np - na access links to reach the
activation record where a resides

– np is the nesting depth of procedure p

– na is the nesting depth of the procedure
containing a

16

Parameter Passing Modes



• Call-by-value: evaluate actual parameters and
enter r-values in activation record

• Call-by-reference: enter pointer to the storage of
the actual parameter

• Copy-restore (aka value-result): evaluate actual
parameters and enter r-values, after the call copy
r-values of formal parameters into actuals

• Call-by-name: use a form of in-line code
expansion (thunk) to evaluate parameters

You might also like