Other Features of Procedures

Similar documents
PROCEDURES, METHODS AND FUNCTIONS

Introduction Primitive Data Types Character String Types User-Defined Ordinal Types Array Types. Record Types. Pointer and Reference Types

CS 330 Lecture 18. Symbol table. C scope rules. Declarations. Chapter 5 Louden Outline

G Programming Languages - Fall 2012

CPSC 3740 Programming Languages University of Lethbridge. Data Types

Programming Languages Third Edition. Chapter 7 Basic Semantics

Implementing Subprograms

Chapter 6. Structured Data Types. Topics. Structured Data Types. Vectors and Arrays. Vectors. Vectors: subscripts

SE352b: Roadmap. SE352b Software Engineering Design Tools. W3: Programming Paradigms

Types II. Hwansoo Han

Introduction to Programming Using Java (98-388)

Data Types. Outline. In Text: Chapter 6. What is a type? Primitives Strings Ordinals Arrays Records Sets Pointers 5-1. Chapter 6: Data Types 2

NOTE: Answer ANY FOUR of the following 6 sections:

Attributes, Bindings, and Semantic Functions Declarations, Blocks, Scope, and the Symbol Table Name Resolution and Overloading Allocation, Lifetimes,

Informatica 3 Syntax and Semantics

CSC 533: Organization of Programming Languages. Spring 2005

Data Types In Text: Ch C apter 6 1

G Programming Languages - Fall 2012

Chapter 5 Names, Binding, Type Checking and Scopes

Programming Languages: Lecture 11

Instantiation of Template class

TYPES, VALUES AND DECLARATIONS

CS 230 Programming Languages

Names, Scopes, and Bindings II. Hwansoo Han

Fundamentals of Programming Languages

Subprograms. Bilkent University. CS315 Programming Languages Pinar Duygulu

CSE 307: Principles of Programming Languages

G Programming Languages - Fall 2012

Intro to OOP Visibility/protection levels and constructors Friend, convert constructor, destructor Operator overloading a<=b a.

Chapter 8 :: Composite Types

CS1622. Semantic Analysis. The Compiler So Far. Lecture 15 Semantic Analysis. How to build symbol tables How to use them to find

Chapter 6 part 1. Data Types. (updated based on 11th edition) ISBN

Chapter 9. Def: The subprogram call and return operations of a language are together called its subprogram linkage

Object Oriented Programming. Solved MCQs - Part 2

Properties of an identifier (and the object it represents) may be set at

Subprograms. Copyright 2015 Pearson. All rights reserved. 1-1

A declaration may appear wherever a statement or expression is allowed. Limited scopes enhance readability.

Types and Type Inference

FORM 2 (Please put your name and form # on the scantron!!!!)

Linked List. April 2, 2007 Programming and Data Structure 1

Expressions and Assignment

CS201- Introduction to Programming Current Quizzes

Organization of Programming Languages CS3200 / 5200N. Lecture 06

Implementing Subprograms

CMSC 4023 Chapter 9. Fundamentals of Subprograms Introduction

1 Terminology. 2 Environments and Static Scoping. P. N. Hilfinger. Fall Static Analysis: Scope and Types

Data Abstraction. Hwansoo Han

1 Lexical Considerations

CSE 452: Programming Languages. Where are we? Types: Intuitive Perspective. Data Types. High-level Programming Languages.

Introduction. Primitive Data Types: Integer. Primitive Data Types. ICOM 4036 Programming Languages

Chapter 6. Data Types ISBN

Anatomy of a Compiler. Overview of Semantic Analysis. The Compiler So Far. Why a Separate Semantic Analysis?

CS 314 Principles of Programming Languages. Lecture 13

A506 / C201 Computer Programming II Placement Exam Sample Questions. For each of the following, choose the most appropriate answer (2pts each).

C++ (Non for C Programmer) (BT307) 40 Hours

Chapter 8. Fundamental Characteristics of Subprograms. 1. A subprogram has a single entry point

UNIT 3

Chapter 9 Subprograms

LECTURE 18. Control Flow

Chapter 6. Data Types

Attributes of Variable. Lecture 13: Run-Time Storage Management. Lifetime. Value & Location

The Compiler So Far. Lexical analysis Detects inputs with illegal tokens. Overview of Semantic Analysis

9. Subprograms. 9.2 Fundamentals of Subprograms

Chapter 9. Subprograms

10. Abstract Data Types

Principles of Programming Languages Topic: Scope and Memory Professor Louis Steinberg Fall 2004

22c:111 Programming Language Concepts. Fall Types I

C++ Important Questions with Answers

COSC 1P03. Ch 6 Generics. Introduction to Data Structures 7.1

Data Types (cont.) Subset. subtype in Ada. Powerset. set of in Pascal. implementations. CSE 3302 Programming Languages 10/1/2007

Topic IV. Parameters. Chapter 5 of Programming languages: Concepts & constructs by R. Sethi (2ND EDITION). Addison-Wesley, 1996.

Paytm Programming Sample paper: 1) A copy constructor is called. a. when an object is returned by value

Special Topics: Programming Languages

Example. program sort; var a : array[0..10] of integer; procedure readarray; : function partition (y, z :integer) :integer; var i, j,x, v :integer; :

Structuring the Data. Structuring the Data

Organization of Programming Languages CS 3200/5200N. Lecture 09

Organization of Programming Languages CS320/520N. Lecture 06. Razvan C. Bunescu School of Electrical Engineering and Computer Science

Compiler Theory. (Semantic Analysis and Run-Time Environments)

Topic IV. Block-structured procedural languages Algol and Pascal. References:

CPS 506 Comparative Programming Languages. Programming Language

Absolute C++ Walter Savitch

CSE 504. Expression evaluation. Expression Evaluation, Runtime Environments. One possible semantics: Problem:

OBJECT ORIENTED PROGRAMMING USING C++ CSCI Object Oriented Analysis and Design By Manali Torpe

And Even More and More C++ Fundamentals of Computer Science

LECTURE 17. Expressions and Assignment

Object-Oriented Programming

CS 6456 OBJCET ORIENTED PROGRAMMING IV SEMESTER/EEE

Lecture Overview. [Scott, chapter 7] [Sebesta, chapter 6]

6. Names, Scopes, and Bindings

Chapter 11. Abstract Data Types and Encapsulation Concepts

STRUCTURING OF PROGRAM

Lecture 11: Subprograms & their implementation. Subprograms. Parameters

CS558 Programming Languages

VALLIAMMAI ENGINEERING COLLEGE

calling a function - function-name(argument list); y = square ( z ); include parentheses even if parameter list is empty!

Evolution of Programming Languages

Abstract Data Types and Encapsulation Concepts

Today's Topics. Last Time Modelling Scopes and Visibility The Run Stack, the Dynamic Pointer Stack, the Display (LL,ON) addressing

Chapter 5. Names, Bindings, and Scopes

Exceptions and Design

Transcription:

Other Features of Procedures overloading multiple procedures with same name must differ in signature result type part of signature? overriding same signature may still be able to access original method default parameters can omit actual parameters must be last parameters procedure inc (item: in out integer; by: in integer := 1; mul: in integer :=1) is item := item*mul+by; end inc; : inc(i); named parameters parameter association by name rather than position inc(by=>2,mul=>3,item=>i); inc(i,mul=>3); 5.1

Functions procedures which return a value differentiation, e.g. none in C, ALGOL 60 specifying result assignment to function name vs return statement result can be considered extra result parameter return type simple type ALGOL 60, Java, Pascal but also references structured type Ada, C, C++, FORTRAN 90, Algol 68 order of evaluation partial ordering efficient code generation side effects modifying parameters?!? For shame! side effects Ada, C++ const 5.2

Examples Fortran 90 FUNCTION TWICE(A) INTEGER TWICE INTEGER A TWICE = A + A END FUNCTION TWICE Algol 60 integer procedure twice(a); value a; integer a; twice := a + a C++ int twice(int a) const { return a + a; }// twice Java int twice(int a) { return a + a; }// twice Pascal function twice(a : Integer):Integer; twice := a + a end; {twice} Ada function twice(a : in Integer) return Integer is return a + a; end twice; 5.3

Operators operators use infix, functions use prefix functions define new operations declaring new operators really functions with different syntax function + (today : in Day; n : in Integer) return Day is return Day val((day pos(today) + n) rem 7); end; choice of operator existing operator symbols other symbols precedence rules 5.4

Storage Management storage for local variables static pre-allocation - load-time (declaration-reference) binding efficient access size of each item known at compile time no data item has multiple simultaneous occurrences no recursion FORTRAN interesting notes: since memory is pre-allocated, it's always being reserved, even when not in use if a function is revisited, the old values may still be there 5.5

stack-based block-structured languages binding at block entry/de-allocation at exit stack of activation records (AR); run-time stack storage only for locals of active methods addresses as offsets hardware support Ask me about return values 5.6

program Main(output); var b, d : Integer; procedure z; var e, f : Integer; end {z}; procedure y; var g, h : Integer; z; end {y}; y; z; end. 5.7

data area for z data area for y data area for y data area for y data area for Main data area for Main data area for Main data area for Main Start program Enter y Enter z from y Exit z data area for Main Exit y data area for z data area for Main Enter z from Main data area for Main Exit z 5.8

Activation Records local variables & parameters system information return address restore stack? dynamic chain access non-locals (inherited) not at fixed place different calls give different stack structure static chain access is distance up chain plus offset 5.9

program Main(output); var b, d : Integer; procedure z; var e, f : Integer; end {z}; procedure y; var g, h : Integer; procedure x; var j, k : Integer; end {x}; z; x; end {y}; z; y; end. 5.10

Run-Time stack space for e and f space for j and k static chain pointer dynamic chain pointer data area for z static chain pointer dynamic chain pointer data area for x return address return address space for g and h space for g and h static chain pointer dynamic chain pointer data area for y static chain pointer dynamic chain pointer data area for y return address space for b and d system information data area for Main return address space for b and d system information data area for Main when z has been called from y when x has been called from y 5.11

Activation Records recursion stack-based supports recursion each invocation has its own storage multiple ARs for different invocations of same procedure int factorial(int n) { if (n > 1) return n * factorial(n 1); else return 1; }// factorial 5.12

Activation Records factorial(3) 3 * factorial(2) 3 * 2 * factorial(1) 3 * 2 * 1 data area for the call factorial(1) data area for the call factorial(2) data area for the call factorial(3) data area for the main program 5.13

Forward References Pascal one-pass compiler defined before use scope sometimes extends from declaration to the end of the block; not starting at ning of block mutually-recursive procedures? forward reference signature without body 5.14

procedure operand(var ca : Character); forward; procedure exp( var cb : Character); operand(cb); while cb = + do operand(cb) end {exp}; procedure operand(var ca : Character); read(ca); if ca = ( then exp(ca); if ca <> ) then writeln( missing brackets ) end else if ca <> a then writeln( missing operand ); read(ca) end {operand}; 5.15

Forward References function prototypes in C & C++ void operand(char *); function specification vs function body in Ada function a(b : Integer) return Real; function a(b : Integer) return Real is end a; ALGOL 60, Algol 68 & Java don t require defined before use compiler must do multiple passes 5.16

Subprogram as Parameters functions and procedures passed as parameters basic principle in functional languages less widely used in imperative languages specification of function parameters types of their parameters? function slope(f(y : Real) : Real; x1, x2 : Real) : Real; if x1 = x2 then slope := 0 else slope := (f(x2) f(x1)) / (x2 x1) end {slope}; 5.17

function straight(x : Real) : Real; straight := 2 * x + 1 end {straight}; function tan(x : Real) : Real; tan := sin(x) / cos(x) end {tan}; slope(straight, 3.8, 3.83); slope(tan, 3.8, 3.85); 5.18

Subprogram as Parameters procedure types and procedure variables e.g. Modula-2 TYPE realfunc = PROCEDURE(REAL) : REAL; var fx : realfunc; fx := straight; PROCEDURE slope(f : realfunc; x1, x2 : REAL) : REAL; BEGIN IF x1 = x2 THEN RETURN 0 ELSE RETURN (f(x2) f(x1)) / (x2 x1) END END slope; 5.19

generics in Ada compile-time parameters generic instantiation creates distinct functions generic with function f(y: Real) return Real; function slope(x1, x2 : Real) return Real; function slope(x1, x2 : Real) return Real is if x1 = x2 then return 0; else return (f(x2) f(x1)) / (x2 x1); end slope; function straight_slope is new slope(f => straight); function tan_slope is new slope(f => tan); 5.20

Structured Data data structures components arrays features records (structures) features dynamic data structures linked structures pointers and dynamic storage allocation 5.21

Arrays attributes element type dimensionality bounds subscript type Pascal type Matrix = array [1.. 10, 0.. 15] of Real; var a : Matrix; computable index bounds error Pascal run-time error Ada & Java exception thrown C & C++ access to some location outside the array notation () vs [] 5.22

multi-dimensional array vs array of arrays type Row = array [0.. 15] of Real; type Matrix = array [1.. 10] of Row; var b : Matrix; a[2,3] vs b[2][3] Java 0 lower bound arrays are objects multi-dimensional uses array-of-array model 5.23

Access to Elements efficient implementation mapping function contiguous allocation row-major vs column major contiguous allocation: a[i,j] base_address + component_size * (row_length * (i first_lower_bound) + j second_lower_bound) access via pointers (C, C++) array name as pointer constant pointer increment dangling pointer parameter passing array name is reference to array 5.24

double arow[16]; double total = 0.0; for (int i = 0; i < 16; i++) total += arow[i]; double total = 0.0; double *b; b = arow; for (int i = 0; i < 16; i++) total += *b++; 5.25

Name-Size Binding static arrays bounds constant at compile time efficient implementation arrays of max size waste space semi-dynamic arrays bounds evaluated at block entry implement as pointer to storage allocated on top of stack slightly less efficient (extra dereference) type Matrix is array(integer range <>, Integer range <>) of Real; a, b : Matrix(1.. m, 1.. n); 5.26

dynamic arrays bounds evaluated at statement execution variable may reference arrays of different size (different arrays) double[] arow = new double[16]; arow = new double[20]; extensible arrays bounds of same array may change at execution (extension) expensive implementation 5.27

Arrays as Parameters bounds as part of type specification Pascal different bounds? type List = array[1.. 20] of Real; function sum(a : List) : Real; var i : Integer; total : Real; total := 0.0; for i := 1 to 20 do total := total + a[i]; sum := total; end {sum}; 5.28

conformant array parameters bounds as implicit parameters var parameters value parameters space allocation function sum(a : array[low.. high : Integer] of Real) : Real; var i : Integer; total : Real; total := 0.0; for i := low to high do total := total + a[i]; sum := total; end {sum}; 5.29

unconstrained arrays Ada array attributes type List is array(integer range <>) of Real; function sum(a : List) return Real is total : Real := 0.0; for i in a range loop total := total + a(i); end loop; return total; end sum; arrays as objects Java length attribute 5.30

array parameters as pointers (C, C++) pass attributes as extra parameters double sum ( const double a[], int length ); or double sum ( const double* a, int length ); parameter conformance structural equivalence vs name equivalence type First = array[1..10] of Integer; Second = array[1..10] of Integer; var a : First; b : Second; c : array [1..10] of Integer; d, e : array[1..10] of Integer; f : First; Pascal & Ada (name) vs C++ & Java (structural) 5.31

Arrays Misc. aggregates array literals or constructors type Vector is array (1.. 6) of Integer; a : Vector; a := (7, 0, 7, 0, 0, 0); Ada int a[] = {7, 0, 7, 0, 0, 0}; int a[6] = {7, 0, 7}; int[] a = {7, 0, 7, 0, 0, 0}; C++ Java slices subsections of an array array-of-array row slices general slices a(1.. 3) := b(4.. 6); array operators PL/I and APL 5.32

arrays as function results also operator overloading function add(left, right : Vector) return Vector is total : Vector; for i in left range loop total[i] := left[i] + right[i]; end loop; return total; end add; c := add(a, b); c := a + b; 5.33

associative arrays any value as index key data mapping (Map in Java) implementation as hashtables Hashtable<String,PeopleInfo> persons = new Hashtable <String,PeopleInfo>(); PeopleInfo p1, p2, p3; code to give a value to p1, p2 and p3 persons.put( J Smith, p1); persons.put( F Bloggs, p2); persons.put( A Brown, p3); PeopleInfo inf = persons.get( F Bloggs ); 5.34

Records & Classes record non-homogeneous collection components (fields) accessed by name originally for file processing (COBOL) later for data organization Pascal, C, C++ C++ both data and function members associate operations with data classes derived from records C++ class is same as struct classes without methods - records classes without instance variables - method libraries 5.35

Stack Example (Pascal) record type for CharStack methods taking CharStack parameter dot notation for field access no grouping or encapsulation type CharStack = record val : array [1.. 20] of Char; head : 0.. 20; end; var a, b : CharStack; ch : Char; 5.36

procedure initialise(var stack : CharStack); stack.head := 0; end; {initialise} function isempty(stack : CharStack) : Boolean; isempty := stack.head = 0; end; {isempty} procedure push(var stack : CharStack; x : Char); if stack.head = 20 then writeln( Error: stack full ); else stack.head := stack.head + 1; stack.val[stack.head] := x; end; end; {push} 5.37

procedure pop(var stack : CharStack; var x : Char); if isempty(stack) then writeln( Error: stack empty ); else x := stack.val[stack.head]; stack.head := stack.head 1; end; end; {pop} initialise(a); initialise(b); push(a, f ); push(b, g ); pop(a, ch); 5.38

Stack Example (Ada) group record type and methods in a package pop cannot be function (only in parameters) control visibility private types := and = limited private types no operations can change representation 5.39

package Stacks is type CharStack is limited private; procedure push(st : in out CharStack; x : in Character); procedure pop(st : in out CharStack; x : out Character); function isempty(st : CharStack) return Boolean; private type Values is array(1.. 20) of Character; type CharStack is record val : Values; head : Integer range 0.. 20 := 0; end record; end Stacks; 5.40

Stack Example (C++) data members for representation member functions for operations method bodies separate arbitrarily sized stack constructor destructor 5.41

class CharStack { char *val; int head; int maxsize; public: CharStack(int size); ~CharStack() {delete val;} void push(char x); char pop(); int isempty() const; }; CharStack :: CharStack(int size) { val = new char[size]; head = -1; maxsize = size; } // constructor CharStack a(50), b(100); 5.42

Stack Example (Java) similar to C++ garbage collection - no need for destructor public class CharStack { private char[] val; private int head; public CharStack ( int size ) { elts = new char[size]; head = -1; }; // constructor public void push ( char x ) { }; // push public char pop ( ) { }; // pop public boolean isempty ( ) { }; // empty } // CharStack 5.43

Variant Records static typing is inflexible e.g. class list with undergrad and grad students cannot use array since must be homogeneous Pascal & Ada - variant records fixed part variant part discriminant (tag field) single type access to variants modification of discriminant object-oriented languages replaced by inheritance and polymorphism 5.44

type Status = (undergraduate, postgraduate); Student = record {fixed part} name : String; case kind : Status of {variant part} undergraduate : (advisor : String); postgraduate : (course : String; supervisor : String) end; var studentlist : array[1..3000] of Student; write(studentlist[i].name); if studentlist[i].kind = undergraduate then writeln(studentlist[i].advisor); else writeln(studentlist[i].course, studentlist[i].supervisor); 5.45

Dynamic Data Structures nodes linked together by pointers nodes - records/classes dynamic allocation Pascal record structure pointer type procedures 5.46

type Ptr = ^Node; Node = record data : Char; next : Ptr; end; procedure add(c : Char; var head : Ptr); var p : Ptr; new(p); p^.data := c; p^.next := head; head := p; end; {add} 5.47

Ada C package for association and visibility initialization at creation self-referential type struct Node { } Java char data; struct Node *next; similar to Pascal no pointers but object variables are references package visibility (class not public) makes Node visible to List but not outside package 5.48

class Node { char data; Node next; public Node(char c, Node p) { data = c; next = p; }// constructor }// Node class List { private Node head; public List() { head = null; }// constructor public void add(char c) { head = new Node(c, head); }// add }// List 5.49

C++ similar to Java requires pointers friend class class Node { friend class List; } List can access private members 5.50

Parametric Types e.g. stack - code same regardless of component type type as a parameter to another type e.g. array of int, stack of char Ada generic package type (and other things) as parameter to package generic instantiation compile-time defines a new package C++ class templates similar to Ada generics automatic generic instantiation 5.51

generic type Item is private; size : Integer; package Stacks is type Stacks is limited private; procedure push(st : in out Stack; x : in Item); procedure pop(st : in out Stack; x : out Item); function isempty(st : Stack) return Boolean; private type Values is array(1.. size) of Item; end Stacks; package StkChar is new Stack(Item => Character, size => 20); package StkInt is new Stack(Item => Integer, size => 20); 5.52

Java generics added in 1.5 doesn t do generic instantiation, all variants are the same class public class Stack <E> { private E[] val; private int head; public Stack ( int size ) { val = (E[])new Object[size]; head = -1; }; // constructor public void push ( E item ) { }; // push public E pop ( ) { }; // pop public boolean isempty ( ) { }; // empty } // Stack Stack<Character> s; Character c; s = new Stack<Character>(100); s.push(c); 5.53

Pascal, Ada as arrays of char Strings fixed length representation only operations that don t change length C, C++ arrays of character fixed length representation may vary up to defined length string terminator character 5.54

Java String as library type immutable StringBuffer more efficient processing if length to change essentially extensible varying length string pattern matching SNOBOL Perl - regular expressions implementation contiguous sequence of char array varying length? move when must extend use linked structure combination 5.55

Sets Pascal set of discrete type set operations inclusion (presence), add, remove representation is bitset bit strings bit-level operations C, C++, Java - int values Ada - Boolean arrays 5.56

files on secondary storage external to program Files Pascal file type sequence of values of some type sequential access EOF can have file of record type local vs external files usually files are considered external and supported by I/O facility 5.57