UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 330 Programming Language Structures Chapter 4: Names Fall 2009 Marco Valtorta.

Slides:



Advertisements
Similar presentations
CSC 4181 Compiler Construction Scope and Symbol Table.
Advertisements

Copyright © 1998 by Addison Wesley Longman, Inc. 1 Chapter 4 Names - Design issues: - Maximum length? - Are connector characters allowed? - Are names case.
Programming Languages and Paradigms
Names and Bindings.
Chapter 5 Names, Bindings, and Scopes
Abstract Data Types Data abstraction, or abstract data types, is a programming methodology where one defines not only the data structure to be used, but.
Basic Semantics.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 330 Programming Language Structures Ch.2: Syntax and Semantics Fall 2005.
Chapter 5 Basic Semantics
CS 330 Programming Languages 10 / 16 / 2008 Instructor: Michael Eckmann.
Names, Bindings, Type Checking, and Scopes
1 Names, Scopes and Bindings. 2 Names Kinds of names Kinds of names Variables, functions, classes, types, labels, blocks, operators, tasks, etc. Variables,
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 4 Names The first step toward wisdom is calling.
Run time vs. Compile time
Chapter 9: Subprogram Control
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 330 Programming Language Structures Chapter 6: Type Systems Fall 2009.
CSC321: Programming Languages Names Chapter 4: Names 4.1 Syntactic Issues 4.2 Variables 4.3 Scope 4.4 Symbol Table 4.5 Resolving References 4.6 Dynamic.
1 Run time vs. Compile time The compiler must generate code to handle issues that arise at run time Representation of various data types Procedure linkage.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 4 Names The first step toward wisdom is calling.
Copyright © 2006 The McGraw-Hill Companies, Inc. Programming Languages 2nd edition Tucker and Noonan Chapter 9 Functions It is better to have 100 functions.
Names, Bindings, and Scopes
1 Chapter 5: Names, Bindings and Scopes Lionel Williams Jr. and Victoria Yan CSci 210, Advanced Software Paradigms September 26, 2010.
Names and Binding In procedural programming, you write instructions the manipulate the “state” of the process where the “state” is the collection of variables.
5-1 Chapter 5: Names, Bindings, Type Checking, and Scopes Variables The Concept of Binding Type Checking Strong Typing Type Compatibility Scope and Lifetime.
CS 2104 Prog. Lang. Concepts Subprograms
CSI 3125, Names etc., page 1 Names, binding, scope, type checking Names, variables Binding Scope Constants. Variable initialization Type checking Plan.
March 12, ICE 1341 – Programming Languages (Lecture #6) In-Young Ko Programming Languages (ICE 1341) Lecture #6 Programming Languages (ICE 1341)
Names and Scope. Scope Suppose that a name is used many times for different entities in text of the program, or in the course of execution. When the name.
Compiler Construction
1 Names, Scopes and Bindings Aaron Bloomfield CS 415 Fall
Names. 2 Variables  binding is an association between an entity (such as a variable) and a property (such as its value). A binding is static if the association.
Chapter 5 Names, Bindings, and Scopes. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 5 Topics Introduction Names Variables The Concept.
ISBN Chapter 5 Names, Bindings, and Scopes.
1 Scope Rules (Section 3.3) CSCI 431 Programming Languages Fall 2003 A compilation of material developed by Felix Hernandez-Campos and Michael Scott.
Introduction A variable can be characterized by a collection of properties, or attributes, the most important of which is type, a fundamental concept in.
1 Compiler Construction (CS-636) Muhammad Bilal Bashir UIIT, Rawalpindi.
Basic Semantics Associating meaning with language entities.
1 Scope Scope describes the region where an identifier is known, and semantic rules for this.
ISBN Chapter 5 Names, Bindings, and Scopes.
Programming Languages and Paradigms Imperative Programming.
Implementing Subprograms What actions must take place when subprograms are called and when they terminate? –calling a subprogram has several associated.
Run-Time Storage Organization Compiler Design Lecture (03/23/98) Computer Science Rensselaer Polytechnic.
RUN-Time Organization Compiler phase— Before writing a code generator, we must decide how to marshal the resources of the target machine (instructions,
Copyright © 2006 The McGraw-Hill Companies, Inc. Basic Terminology Value-returning functions: –known as “non-void functions/methods” in C/C++/Java –called.
Concepts of programming languages Chapter 5 Names, Bindings, and Scopes Lec. 12 Lecturer: Dr. Emad Nabil 1-1.
Variables reference, coding, visibility. Rules for making names  permitted character set  maximum length, significant length  case sensitivity  special.
Names and Binding In Text: Chapter 4.
1 Structure of Compilers Lexical Analyzer (scanner) Modified Source Program Parser Tokens Semantic Analysis Syntactic Structure Optimizer Code Generator.
Names, Scope, and Bindings Programming Languages and Paradigms.
UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 330 Programming Language Structures Operational Semantics (Slides mainly.
1 Compiler Construction Run-time Environments,. 2 Run-Time Environments (Chapter 7) Continued: Access to No-local Names.
CHAPTER 4 VARIABLES & BINDING SUNG-DONG KIM DEPT. OF COMPUTER ENGINEERING, HANSUNG UNIVERSITY.
Dr. Philip Cannata 1 Names, Types, and Functions standard hue names.
Advanced Programming in C
Data Types In Text: Chapter 6.
CS 326 Programming Languages, Concepts and Implementation
Chapter 4 Variables & Binding
Type Checking, and Scopes
Names, Bindings, and Scopes
Names.
Chapter 5 Names, Bindings, Type Checking, and Scopes.
Introduction to the C Language
Scope, Visibility, and Lifetime
UNIT V Run Time Environments.
Names and Binding In Text: Chapter 5.
Names, Types, and Functions
CSE 3302 Programming Languages
Lecture 6: Names (Revised based on the Tucker’s slides) 5/27/2019
Types and Related Issues
Presentation transcript:

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering CSCE 330 Programming Language Structures Chapter 4: Names Fall 2009 Marco Valtorta The first step toward wisdom is calling things by their right names. Anon. Chinese Proverb

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering 4.1 Syntactic Issues 4.2 Variables 4.3 Scope 4.4 Symbol Table 4.5 Resolving References 4.6 Dynamic Scoping 4.7 Visibility 4.8 Overloading 4.9 Lifetime Contents

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Recall that the term binding is an association between an entity (such as a variable) and a property (such as its value). A binding is static if the association occurs before run-time. A binding is dynamic if the association occurs at run-time. Name bindings play a fundamental role. The lifetime of a variable name refers to the time interval during which memory is allocated. The Notion of Binding

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Syntactic Issues Lexical rules for name –E.g., underscore, hyphen Collection of reserved words or keywords Case sensitivity C-like: yes Early languages: no PHP: partly yes, partly no

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Reserved Words Cannot be used as Identifiers Usually identify major constructs: if while switch –Pascal reserved words (all 35 of them) and, array, begin, case, const, div, do, downto, else, end, file, for, function, goto, if, in, label, mod, nil, not, of, packed, procedure, program, record, repeat, set, then, to, type, until, var, while, with –In C, type identifiers such as int, float are reserved Predefined identifiers: e.g., library routines –The programmer can redefine them –Example: Pascal type identifiers and values such as integer, real, Boolean, true

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Variables Basic bindings Name Address Type Value Lifetime Scope

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering L-value - use of a variable name to denote its address Ex: x = … R-value - use of a variable name to denote its value (sometimes just called value) Ex: … = … x … Some languages (e.g., ML) support/require explicit dereferencing Ex: x := !y + 1 L-value and R-value

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering // Pointer example: int x,y; int *p; x = *p; //assign to the l-value of x the r-value of the r-value of p *p = y; //assign to the variable whose address is p the r-value of y //the r-value of x has not been changed Explicit Dereferencing for Pointer Variables

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Scope The scope of a name is the collection of statements which can access the name binding In static scoping, a name is bound to a collection of statements according to its position in the source program Most modern languages use static (or lexical) scoping Two different scopes are either nested or disjoint In disjoint scopes, same name can be bound to different entities without interference What constitutes a scope?

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Some Scope-Making Constructs AlgolCJavaAda Packagen/a n/ayesyes Classn/a n/anestedyes Functionnestedyesyesnested Blocknestednested nested nested For Loopnonoyesautomatic

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering The scope in which a name is defined or declared is called its defining scope. A reference to a name is nonlocal if it occurs in a nested scope of the defining scope; otherwise, it is local. Example: Local and Nonlocal Scope for (int i = 0; i < 10; i++) { System.out.println(i);... }... i... // invalid reference to i

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering In C (unlike Java and C++), for does not create a new scope 1 void sort (float a[ ], int size) { 2 int i, j; 3 for (i = 0; i < size; i++) // i, size local 4 for (j = i + 1; j < size; j++) 5 if (a[j] < a[i]) { // a, i, j local 6 float t; 7 t = a[i];// t local; a, i nonlocal 8 a[i] = a[j]; 9 a[j] = t; 10 } 11 } Local and Nonlocal Scope: Example

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Symbol Table A symbol table is a data structure kept by a translator that allows it to keep track of each declared name and its binding Assume for now that each name is unique within its local scope The data structure can be any implementation of a dictionary, where the name is the key

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering 1.Each time a scope is entered, push a new dictionary onto the stack 2.Each time a scope is exited, pop a dictionary off the top of the stack 3.For each name declared, generate an appropriate binding and enter the name-binding pair into the dictionary on the top of the stack 4.Given a name reference, search the dictionary on top of the stack: a)If found, return the binding b)Otherwise, repeat the process on the next dictionary down in the stack c)If the name is not found in any dictionary, report an error Stack of Scopes for Nonlocal References

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering C program in Fig. 4.1 [T], stack of dictionaries at line 7: At line 4 and 11: 1 void sort (float a[ ], int size) { 2 int i, j; 3 for (i = 0; i < size; i++) // i, size local 4 for (j = i + 1; j < size; j++) 5 if (a[j] < a[i]) { // a, i, j local 6 float t; 7 t = a[i];// t local; a, i nonlocal 8 a[i] = a[j]; 9 a[j] = t; 10 } 11 } Stack of Scope Dictionaries Example Note error in text: The for statement does not create a new scope in C!

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Resolving References For static scoping, the referencing environment for a name is its defining scope and all nested subscopes. The referencing environment defines the set of statements which can validly reference a name.

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering 1 int h, i; 2 void B(int w) { 3 int j, k; 4 i = 2*w; 5 w = w+1; } 8 void A (int x, int y) { 9 float i, j; 10 B(h); 11 i = 3; } 14 void main() { 15 int a, b; 16 h = 5; a = 3; b = 2; 17 A(a, b); 18 B(h); } 1.Outer scope: 2.Function B: 3.Function A: 4.Function main: Resolving References: Static Scoping

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Symbol Table Stack for Function B: Symbol Table Stack for Function A: Symbol Table Stack for Function main:

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering LineReferenceDeclaration 4i1 10h1 11i9 16h1 18h1

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Dynamic Scoping In dynamic scoping, a name is bound to its most recent declaration based on the program’s call history. Used be early Lisp, APL, Snobol, Perl. Symbol table for each scope built at compile time, but managed at run time. Scope pushed/popped on stack when entered/exited.

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering 1 int h, i; 2 void B(int w) { 3 int j, k; 4 i = 2*w; 5 w = w+1; } 8 void A (int x, int y) { 9 float i, j; 10 B(h); 11 i = 3; } 14 void main() { 15 int a, b; 16 h = 5; a = 3; b = 2; 17 A(a, b); 18 B(h); } Figure 4.2 [T]

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Using Figure 4.2 as an example: call history main (17)  A (10)  B FunctionDictionary B A main Reference to i (4) resolves to in A.

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering 1 int h, i; 2 void B(int w) { 3 int j, k; 4 i = 2*w; 5 w = w+1; } 8 void A (int x, int y) { 9 float i, j; 10 B(h); 11 i = 3; } 14 void main() { 15 int a, b; 16 h = 5; a = 3; b = 2; 17 A(a, b); 18 B(h); }

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Using Figure 4.2 as an example: call history main (18)  B FunctionDictionary B main Reference to i (4) resolves to in global scope.

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Visibility A name is visible if its referencing environment includes the reference and the name is not redeclared in an inner scope. A name redeclared in an inner scope effectively hides the outer declaration. Some languages provide a mechanism for referencing a hidden name; e.g.: this.x in C++/Java.

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering 1 public class Student { 2 private String name; 3 public Student (String name,...) { 4 this.name = name; } 7 } name is the parameter of the Student method this.name is the member variable of the Student class Visibility: this in Java

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering procedure Main is x : Integer; procedure p1 is x : Float; procedure p2 is begin... x... end p2; begin... x... end p1; procedure p3 is begin... x... end p3; begin... x... end Main; -- Ada x in p2? x in p1? Main.x? x in p3? p1.x? x in Main? Visibility: block naming in Ada

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Overloading Overloading uses the number or type of parameters to distinguish among identical function names or operators. Examples: +, -, *, / can be float or int + can be float or int addition or string concatenation in Java System.out.print(x) in Java

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Modula: library functions cannot be overloaded, so: Read( ) for characters ReadReal( ) for floating point ReadInt( ) for integers ReadString( ) for strings

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering In Java, class methods can be overloaded, so: public class PrintStream extends FilterOutputStream {... public void print(boolean b); public void print(char c); public void print(int i); public void print(long l); public void print(float f); public void print(double d); public void print(char[ ] s); public void print(String s); public void print(Object obj); }

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering Lifetime The lifetime of a variable is the time interval during which the variable has been allocated a block of memory Earliest languages used static allocation Algol introduced the notion that memory should be allocated/deallocated at scope entry/exit Remainder of section considers mechanisms which break scope equals lifetime rule

UNIVERSITY OF SOUTH CAROLINA Department of Computer Science and Engineering C: Global compilation scope: static Explicitly declaring a variable static Remark: Java also allows a variable to be declared static