Vous êtes sur la page 1sur 8

Review Question no.16 – no.

20

16. What is the referencing environment of a statement?

Answer :

The referencing environment of a statement is the collection of all variables that are visible in the
statement. The referencing environment of a statement in a static-scoped language is the variables
declared in its local scope plus the collection of all variables of its ancestor scopes that are visible.

17. What is a static ancestor of a subprogram? What is a dynamic ancestor of a subprogram?

Answer :

The static ancestors of a subprogram sub() are all the procedures in the program within which the
procedure sub() is defined, i.e., the definition of the procedure sub() is nested. The definition of a
procedure may be directly nested within only one procedure, called its static parent procedure.
However, this static parent procedure may itself be nested within another procedure, and so on up to
the main() program. All these procedures are considered to be static ancestors of the procedure sub().
Simply put, the static ancestors are those that strictly contain the subprogram in question.

The dynamic ancestors of a subprogram sub() are all the procedures called before sub() during the
execution of a program, that have not yet finished executing. These are the procedures that are waiting
for procedure sub() to finish executing before they can terminate. Simply put, dynamic ancestors are
those that are called to reach the subprogram in question.

18. What is a block?

Answer :

Such vari-ables are typically stack dynamic, so their storage is allocated when the section is entered and
deallocated when the section is exited

19. What is the purpose of the let constructs in functional languages?

Answer :

“let” introduces a new variable scope, and allows you to bind variables to values for that scope. It is
often read as “let x be [value] in …”

20. What is the difference between the names defined in an ML let construct from the variables declared
in a C block?

Problem Set no 7 – 12
7. Assume the following JavaScript program was interpreted using static-scoping rules. What value of x is
displayed in function sub1? Under dynamic-scoping rules, what value of x is displayed in function sub1 ?

Answer :

var x;

function sub1() {

document.write(“x = ” + x + “<br />”);

function sub2() {

var x;

x = 10;

sub1();

x = 5;

sub2();

Answer:

Static scope: x=5, Dynamic scoping: x=10.

8. Consider the following JavaScript program:

Answer :

var x, y, z;

function sub1() {

var a, y, z;

function sub2() {

var a, b, z;

...

...
}

function sub3() {

var a, x, w;

...

List all the variables, along with the program units where they are declared, that are visible in the bodies
of sub1, sub2, and sub3, assuming static scoping is used.

Answer:

Sub1: a(sub1), y(sub1), z(sub1), x(main)

Sub2: a(sub2), b(sub2), z(sub2), y(sub1), x(main)

Sub3: a(sub3), x(sub3), w(sub3), y(main), z(main)

9. Consider the following Python program:

Answer :

x = 1;

y = 3;

z = 5;

def sub1():

a = 7;

y = 9;

z = 11;

...

def sub2():

global x;

a = 13;

x = 15;

w = 17;
...

def sub3():

nonlocal a;

a = 19;

b = 21;

z = 23;

...

...

List all the variables, along with the program units where they are

declared, that are visible in the bodies of sub1, sub2, and sub3, assumingstatic scoping is used.

Answer:

point 1 : x = 1(main), y = 9 (sub1), z = 11(sub1) ,a = 7(sub1);

point 2 : x =15(sub2), w = 17(sub2), a = 13(sub2), y = 9(sub1);

point 3 : x = 15(sub2), b = 21(sub3), a = 19(sub1), z = 23(sub3), w = 17(sub 2);

point 4 : x = 15(sub2), b = 21(sub3), a = 19(sub1), z = 23(sub3), w = 17(sub 2);

10. Consider the following C program:

Answer :

void fun(void) {

int a, b, c; /* definition 1 */

...

while (. . .) {

int b, c, d; /*definition 2 */

...1

while (. . .) {

int c, d, e; /* definition 3 */
...2

...3

...4

For each of the four marked points in this function, list each visible variable,

along with the number of the definition statement that defines it.

Answer:

Point 1: a:1, b:2, c:2, d:2

Point 2: a:1, b:2, c:3, d:3, e:3

Point 3: a:1, b:2, c:2, d:2

Point 4: a:1, b:1, c:1

11. Consider the following skeletal C program:

Answer :

void fun1(void); /* prototype */

void fun2(void); /* prototype */

void fun3(void); /* prototype */

void main() {

int a, b, c;

...

void fun1(void) {

int b, c, d;

...
}

void fun2(void) {

int c, d, e;

...

void fun3(void) {

int d, e, f;

...

Given the following calling sequences and assuming that dynamic scoping

is used, what variables are visible during execution of the last function

called? Include with each visible variable the name of the function in

which it was defined.

a. main calls fun1; fun1 calls fun2; fun2 calls fun3.Answer:

var a = main ; var b = fun1 ; var c = fun2 ;var d,e,f = fun3

b. main calls fun1; fun1 calls fun3.Answer:

var a = main; var b,c = fun1; var d,e,f = fun3

c. main calls fun2; fun2 calls fun3; fun3 calls fun1.

Answer:

var a= main; var b,c,d = fun1 ;var e,f = fun3

d. main calls fun3; fun3 calls fun1.

Answer:

var a = main; var b,c,d = fun1; var e,f = fun3

e. main calls fun1; fun1 calls fun3; fun3 calls fun2.

Answer:
var a=main;var c,d,e=fun2; var b =fun1; var f= fun3

f. main calls fun3; fun3 calls fun2; fun2 calls fun1.

Answer:

var a=main; var b,c,d = fun1; var f= fun3;var e=fun2

12. Consider the following program, written in JavaScript-like syntax:

// main program

var x, y, z;

Answer :

function sub1() {

var a, y, z;

...

function sub2() {

var a, b, z;

...

function sub3() {

var a, x, w;

...

Given the following calling sequences and assuming that dynamic scoping

is used, what variables are visible during execution of the last subprogram

activated? Include with each visible variable the name of the unit

where it is declared.

a. main calls sub1; sub1 calls sub2; sub2 calls sub3.Answer:


a x w in sub3. b, z in sub2, y in sub1.

b. main calls sub1; sub1 calls sub3.Answer:

a x w in sub3, y z in sub1.

c. main calls sub2; sub2 calls sub3; sub3 calls sub1.Answer:

a y z in sub1, x w in sub3, b in sub2.

d. main calls sub3; sub3 calls sub1.Answer:

a y z in sub1; x w in sub3;

e. main calls sub1; sub1 calls sub3; sub3 calls sub2.Answer:

a b z in sub2, x w in sub3; y in sub1.

f. main calls sub3; sub3 calls sub2; sub2 calls sub1.Answer:

a y z in sub1; b in sub2; x w in sub3

Vous aimerez peut-être aussi