Slide 1 WEEK 8 Imperative Programming Original by Vitaly Shmatikov.

Slides:



Advertisements
Similar presentations
Intermediate Code Generation
Advertisements

The University of Adelaide, School of Computer Science
Programming Languages and Paradigms
Adapted from Scott, Chapter 6:: Control Flow Programming Language Pragmatics Michael L. Scott.
CSCI 330: Programming Language Concepts Instructor: Pranava K. Jha Control Flow-II: Execution Order.
Programming Languages and Paradigms The C Programming Language.
CSI 3120, Implementing subprograms, page 1 Implementing subprograms The environment in block-structured languages The structure of the activation stack.
1 Compiler Construction Intermediate Code Generation.
CPS3340 COMPUTER ARCHITECTURE Fall Semester, /17/2013 Lecture 12: Procedures Instructor: Ashraf Yaseen DEPARTMENT OF MATH & COMPUTER SCIENCE CENTRAL.
Names and Bindings.
Programming Languages Marjan Sirjani 2 2. Language Design Issues Design to Run efficiently : early languages Easy to write correctly : new languages.
Prof. Necula CS 164 Lecture 141 Run-time Environments Lecture 8.
Chapter 5 Names, Bindings, and Scopes
Chapter 5: Elementary Data Types Properties of types and objects –Data objects, variables and constants –Data types –Declarations –Type checking –Assignment.
Programming Languages Third Edition
ISBN Chapter 11 Abstract Data Types and Encapsulation Concepts.
CS 536 Spring Run-time organization Lecture 19.
Denotational Semantics Syntax-directed approach, generalization of attribute grammars: –Define context-free abstract syntax –Specify syntactic categories.
Dr. Muhammed Al-Mulhem ICS Chapter 7 Scope, Functions, and Storage Management.
3/17/2008Prof. Hilfinger CS 164 Lecture 231 Run-time organization Lecture 23.
G. Levine Chapter 6 Chapter 6 Encapsulation –Why do we want encapsulation? Programmer friendliness- programmer need not know about these details –Easier.
1 Pertemuan 20 Run-Time Environment Matakuliah: T0174 / Teknik Kompilasi Tahun: 2005 Versi: 1/6.
Run time vs. Compile time
The environment of the computation Declarations introduce names that denote entities. At execution-time, entities are bound to values or to locations:
Chapter 9: Subprogram Control
16/27/ :53 PM6/27/ :53 PM6/27/ :53 PMLogic Control Structures Arithmetic Expressions Used to do arithmetic. Operations consist of +,
Run-time Environment and Program Organization
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.
1 Contents. 2 Run-Time Storage Organization 3 Static Allocation In many early languages, notably assembly and FORTRAN, all storage allocation is static.
1 Chapter 5: Names, Bindings and Scopes Lionel Williams Jr. and Victoria Yan CSci 210, Advanced Software Paradigms September 26, 2010.
Chapter TwelveModern Programming Languages1 Memory Locations For Variables.
Chapter 7: Runtime Environment –Run time memory organization. We need to use memory to store: –code –static data (global variables) –dynamic data objects.
Topic #10: Optimization EE 456 – Compiling Techniques Prof. Carl Sable Fall 2003.
Imperative Programming
CSC3315 (Spring 2009)1 CSC 3315 Programming Languages Hamid Harroud School of Science and Engineering, Akhawayn University
LANGUAGE TRANSLATORS: WEEK 24 TRANSLATION TO ‘INTERMEDIATE’ CODE (overview) Labs this week: Tutorial Exercises on Code Generation.
Lecture 4 C Program Control Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc.
Compiler Construction
Copyright © 2005 Elsevier Chapter 8 :: Subroutines and Control Abstraction Programming Language Pragmatics Michael L. Scott.
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Slide 1 Vitaly Shmatikov CS 345 Imperative Programming.
Introduction A variable can be characterized by a collection of properties, or attributes, the most important of which is type, a fundamental concept in.
Basic Semantics Associating meaning with language entities.
CPS120: Introduction to Computer Science Decision Making in Programs.
ISBN Chapter 8 Statement-Level Control Structures.
Programming Languages and Paradigms Imperative Programming.
These notes were originally developed for CpSc 210 (C version) by Dr. Mike Westall in the Department of Computer Science at Clemson.
RUN-Time Organization Compiler phase— Before writing a code generator, we must decide how to marshal the resources of the target machine (instructions,
SE424 Languages with Context A Block Structured Language.
Concepts of programming languages Chapter 5 Names, Bindings, and Scopes Lec. 12 Lecturer: Dr. Emad Nabil 1-1.
 In the java programming language, a keyword is one of 50 reserved words which have a predefined meaning in the language; because of this,
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.
Chapter 8 Statement-Level Control Structures. Copyright © 2012 Addison-Wesley. All rights reserved.1-2 Chapter 8 Topics Introduction Selection Statements.
Scope, Function Calls and Storage Management John Mitchell CS Reading: Chapter 7, Concepts in Programming Languages.
C Program Control September 15, OBJECTIVES The essentials of counter-controlled repetition. To use the for and do...while repetition statements.
Run-Time Environments Presented By: Seema Gupta 09MCA102.
Chapter 4 – C Program Control
The Machine Model Memory
Def: A control structure is a control statement and
Type Checking Generalizes the concept of operands and operators to include subprograms and assignments Type checking is the activity of ensuring that the.
Type Checking, and Scopes
Compilers Principles, Techniques, & Tools Taught by Jing Zhang
Run-time organization
Chapter 8: Control Structures
Chapter 9 :: Subroutines and Control Abstraction
UNIT V Run Time Environments.
Languages and Compilers (SProg og Oversættere)
Scope, Function Calls and Storage Management
SPL – PS2 C++ Memory Handling.
Presentation transcript:

slide 1 WEEK 8 Imperative Programming Original by Vitaly Shmatikov

2 Outline Introduction : imperative programming Elements of Imperative Programs Data type definitions Variable declarations Assignment statements Expressions Structured Control flow Blocks and Scopes Subprogram

3 Introduction Imperative programming is characterized by programming with a program state commands which modify the state. Imperative: a command or order Commands are similar to the native machine instructions of traditional computer hardware – the von Neumann model. von Neumann model: the basic concepts of stored program computers.

slide 4 Imperative Programming Oldest and most popular paradigm Fortran, Algol, C, Java … Mirrors computer architecture In a von Neumann machine, memory holds instructions and data Key operation: assignment Side effect: updating state (i.e., memory) of the machine Control-flow statements Conditional and unconditional (GO TO) branches, loops

5 Introduction A programming language is said to be Turing complete if it contains Integer variables, values and operations Assignment statements Statement sequencing Conditionals (if) Branching statements (goto)

6 Introduction An imperative programming language is one which is Turing complete and also (optionally) supports Data types for real numbers, characters, strings, booleans and their operators For and while loops, case (switch) statements Arrays Records Input and output commands Pointers Procedures and functions

slide 7 Elements of Imperative Programs Data type definitions Variable declarations (usually typed) Expressions and assignment statements Control flow statements (usually structured) Lexical scopes and blocks Goal: provide locality of reference Declarations and definitions of procedures and functions (i.e., parameterized blocks)

Procedural Programming Procedure: the act, method or manner of proceeding in some process or course of action a particular course of action or way of doing something. When imperative programming is combined with subprograms, it is called procedural programming.

Flowchart Used to model imperative programs Based on the three control statements that are essential to have Turing machine capability Precursor of UML and other modern techniques Originated to describe process flow in general

slide 10 Data type definitions Data types + operations Primitive data types Integer, Real, Decimal Character, String Boolean User-defined data types (using type constructor) Array, Associative array Record, Variant record Enumeration, Subrange Pointer, Reference type

slide 11 Variable Declarations Typed variable declarations restrict the values that a variable may assume during program execution Built-in types (int, char …) or user-defined Initialization: Java integers to 0. What about C? Variable size How much space needed to hold values of this variable? C on a 32-bit machine: sizeof(char) = 1 byte, sizeof(short) = 2 bytes, sizeof(int) = 4 bytes, sizeof(char*) = 4 bytes (why?) What about this user-defined datatype:

slide 12 Variables: Locations and Values When a variable is declared, it is bound to some memory location and becomes its identifier Location could be in global, heap, or stack storage l-value: memory location (address) r-value: value stored at the memory location identified by l-value Assignment: A (target) = B (expression) Destructive update: overwrites the memory location identified by A with a value of expression B What if a variable appears on both sides of assignment?

slide 13 Copy vs. Reference Semantics Copy semantics: expression is evaluated to a value, which is copied to the target Used by imperative languages Reference semantics: expression is evaluated to an object, whose pointer is copied to the target Used by object-oriented languages

slide 14 Variables and Assignment On the RHS of an assignment, use the variable’s r-value; on the LHS, use its l-value Example: x = x+1 Meaning: “get r-value of x, add 1, store the result into the l-value of x” An expression that does not have an l-value cannot appear on the LHS of an assignment What expressions don’t have l-values? Examples: 1=x+1, ++x++ What about a[1] = x+1, where a is an array?

slide 15 l-Values and r-Values (1) Any expression or assignment statement in an imperative language can be understood in terms of l-values and r-values of variables involved In C, also helps with complex pointer dereferencing and pointer arithmetic Literal constants Have r-values, but not l-values Variables Have both r-values and l-values Example: x=x*y means “compute rval(x)*rval(y) and store it in lval(x)”

slide 16 l-Values and r-Values (2) Pointer variables Their r-values are l-values of another variable Intuition: the value of a pointer is an address Overriding r-value and l-value computation in C &x always returns l-value of x *p always return r-value of p If p is a pointer, this is an l-value of another variable What are the values of p and x at this point?

slide 17 l-Values and r-Values (3) Declared functions and procedures Have l-values, but no r-values

18 Expressions Order of evaluation: Operator & Operand Order of operand Precedence rules Associativity rules Order of operand Functional side effect Short-circuit evaluation Side effect in expression

slide 19 Structured Control Flow Control flow in imperative languages is most often designed to be sequential Instructions executed in order they are written Some also support concurrent execution (Java) Program is structured if control flow is evident from syntactic (static) structure of program text Big idea: programmers can reason about dynamic execution of a program by just analyzing program text Eliminate complexity by creating language constructs for common control-flow “patterns” Iteration, selection, procedures/functions

Structured Programming A disciplined approach to imperative program design. Uses procedural abstraction and top-down design to identify program components Does not use goto statements

slide 21 Fortran Control Structure 10 IF (X.GT ) GO TO X = -X IF (X.LT ) GO TO IF (X*Y.LT ) GO TO 30 X = X-Y-Y 30 X = X+Y CONTINUE X = A Y = B-A GO TO 11 … Similar structure may occur in assembly code

slide 22 Historical Debate Dijkstra, “GO TO Statement Considered Harmful” Letter to Editor, Comm. ACM, March 1968 Linked from the course website Knuth, “Structured Prog. with Go To Statements” You can use goto, but do so in structured way … Continued discussion Welch, “GOTO (Considered Harmful) n, n is Odd” General questions Do syntactic rules force good programming style? Can they help?

slide 23 Modern Style Standard constructs that structure jumps if … then … else … end while … do … end for … { … } case … Group code in logical blocks Avoid explicit jumps (except function return) Cannot jump into the middle of a block or function body

slide 24 Selection Two-way selector if Nested if static semantic Multiple-way selector switch, case

slide 25 Iteration Definite Indefinite Termination depends on a dynamically computed value How do we know statically (i.e., before we run the program) that the loop will terminate, i.e., that n will eventually become less than or equal to 0?

slide 26 Iteration Constructs in C while (condition) stmt; while (condition) { stmt; stmt; …; } do stmt while (condition); do { stmt; stmt; …; } while (condition); for ( ; ; ) stmt; Restricted form of “while” loop – same as ; while ( ) { stmt; } for ( ; ; ) { stmt; stmt; …; }

slide 27 “Breaking Out” Of A Loop in C

slide 28 Forced Loop Re-Entry in C

slide 29 Block-Structured Languages Nested blocks with local variables { int x = 2; { int y = 3; x = y+2; } Storage management Enter block: allocate space for variables Exit block: some or all space may be deallocated new variables declared in nested blocks inner block outer block local variable global variable

slide 30 Blocks in Common Languages Examples C, JavaScript { … } Algol begin … end ML let … in … end Two forms of blocks Inline blocks Blocks associated with functions or procedures

slide 31 Simplified Machine Model Registers Environment pointer Program counter DataCode Heap Stack

slide 32 Memory Management Registers, Code segment, Program counter Ignore registers (for our purposes) and details of instruction set Data segment Stack contains data related to block entry/exit Heap contains data of varying lifetime Environment pointer points to current stack position Block entry: add new activation record to stack Block exit: remove most recent activation record

slide 33 Scope and Lifetime Scope Region of program text where declaration is visible Lifetime Period of time when location is allocated to program Inner declaration of x hides outer one (“hole in scope”) Lifetime of outer x includes time when inner block is executed Lifetime  scope { int x = … ; { int y = … ; { int x = … ; …. };

slide 34 Inline Blocks Activation record Data structure stored on run-time stack Contains space for local variables May need space for variables and intermediate results like (x+y), (x-y ) { int x=0; int y=x+1; { int z=(x+y)*(x-y); }; Push record with space for x, y Set values of x, y Push record for inner block Set value of z Pop record for inner block Pop record for outer block

slide 35 Activation Record For Inline Block Control link Pointer to previous record on stack Push record on stack Set new control link to point to old env ptr Set env ptr to new record Pop record off stack Follow control link of current record to reset environment pointer Control link Local variables Intermediate results Control link Local variables Intermediate results Environment pointer In practice, can be optimized away

slide 36 Example { int x=0; int y=x+1; { int z=(x+y)*(x-y); }; Push record with space for x, y Set values of x, y Push record for inner block Set value of z Pop record for inner block Pop record for outer block Control link x y 0 1 x+y x-y Environment pointer 1 Control link z

Subprogram Procedures and functions Local referencing environments Parameter-passing methods Overloaded subprograms User-defined overloaded operator Generic subprograms Coroutines slide 37