Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 355 – PROGRAMMING LANGUAGES Dr. X. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Topics Scope Scope and Lifetime Referencing Environments.

Similar presentations


Presentation on theme: "CS 355 – PROGRAMMING LANGUAGES Dr. X. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Topics Scope Scope and Lifetime Referencing Environments."— Presentation transcript:

1 CS 355 – PROGRAMMING LANGUAGES Dr. X

2 Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Topics Scope Scope and Lifetime Referencing Environments Named Constants

3 Variable Attributes: Scope The scope of a variable is the range of statements over which it is visible The local variables of a program unit are those that are declared in that unit The nonlocal variables of a program unit are those that are visible in the unit but not declared there Global variables are a special category of nonlocal variables The scope rules of a language determine how references to names are associated with variables

4 Static Scope Based on program text To connect a name reference to a variable, you (or the compiler) must find the declaration Search process: search declarations, first locally, then in increasingly larger enclosing scopes, until one is found for the given name Enclosing static scopes (to a specific scope) are called its static ancestors; the nearest static ancestor is called a static parent Some languages allow nested subprogram definitions, which create nested static scopes (e.g., Ada, JavaScript, Common LISP, Scheme, Fortran 2003+, F#, and Python)

5 Scope (continued) Variables can be hidden from a unit by having a "closer" variable with the same name Ada allows access to these "hidden" variables E.g., unit.name

6 Blocks A method of creating static scopes inside program units--from ALGOL 60 Example in C: void sub() { int count; while (...) { int count; count++;... } … } - Note: legal in C and C++, but not in Java and C# - too error-prone

7 Global Scope C, C++, PHP, and Python support a program structure that consists of a sequence of function definitions in a file These languages allow variable declarations to appear outside function definitions C and C++have both declarations (just attributes) and definitions (attributes and storage) A declaration outside a function definition specifies that it is defined in another file

8 C example global variable #include // Global variables int A; int B; int Add() { return A + B; } int main() { int answer; // Local variable A = 5; B = 7; answer = Add(); printf("%d\n",answer); return 0; }

9 Global Scope (continued) Python A global variable can be referenced in functions, but can be assigned in a function only if it has been declared to be global in the function

10 Python global variable example globvar = 0 def set_globvar_to_one(): global globvar # Needed to modify global copy of globvar globvar = 1 def print_globvar(): print globvar # No need for global declaration to read value of globvar set_globvar_to_one() print_globvar() # Prints 1

11 Evaluation of Static Scoping Works well in many situations Problems: In most cases, too much access is possible As a program evolves, the initial structure is destroyed and local variables often become global; subprograms also gravitate toward become global, rather than nested

12 Dynamic Scope Based on calling sequences of program units, not their textual layout (temporal versus spatial) References to variables are connected to declarations by searching back through the chain of subprogram calls that forced execution to this point

13 Scope Example function big() { function sub1() var x = 7; function sub2() { var y = x; } var x = 3; } Static scoping Reference to x in sub2 is to big's x Dynamic scoping Reference to x in sub2 is to sub1's x big calls sub1 sub1 calls sub2 sub2 uses x

14 Scope Example Evaluation of Dynamic Scoping: Advantage: convenience Disadvantages: 1. While a subprogram is executing, its variables are visible to all subprograms it calls 2. Impossible to statically type check 3. Poor readability- it is not possible to statically determine the type of a variable

15 Scope and Lifetime Scope and lifetime are sometimes closely related, but are different concepts Consider a static variable in a C or C++ function

16 Scope in Java/C# public class Test{ public void pupAge(){ int age = 0; age = age + 7; System.out.println("Puppy age is : " + age); } public static void main(String args[]){ Test test = new Test(); test.pupAge(); }

17 Scope in Java/C# import java.io.*; public class Employee{ // this instance variable is visible for any child class. public String name; // salary variable is visible in Employee class only. private double salary; // The name variable is assigned in the constructor. public Employee (String empName){ name = empName; } // The salary variable is assigned a value. public void setSalary(double empSal){ salary = empSal; } // This method prints the employee details. public void printEmp(){ System.out.println("name : " + name ); System.out.println("salary :" + salary); } public static void main(String args[]){ Employee empOne = new Employee("Ransika"); empOne.setSalary(1000); empOne.printEmp(); }

18 Scope in Python LEGB Rule L. Local. (Names assigned in any way within a function (def or lambda)), and not declared global in that function. E. Enclosing function locals. (Name in the local scope of any and all enclosing functions (def or lambda), form inner to outer. G. Global (module). Names assigned at the top-level of a module file, or declared global in a def within the file. B. Built-in (Python). Names preassigned in the built-in names module : open,range,SyntaxError

19 Scope in Python def foo(): x=4 def bar(): print x # Accesses x from foo's scope bar() # Prints 4 x=5 bar() # Prints 5

20 Scope in C int x = 4; /* variable x defined with file scope */ long myfunc(int x, long y); /* variable x has function */ /* prototype scope */ int main(void) { /*... */ }

21 Questions?……


Download ppt "CS 355 – PROGRAMMING LANGUAGES Dr. X. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Topics Scope Scope and Lifetime Referencing Environments."

Similar presentations


Ads by Google