CSE 452: Programming Languages Expressions and Control Flow.

28
CSE 452: Programming Languages Expressions and Control Flow
  • date post

    21-Dec-2015
  • Category

    Documents

  • view

    225
  • download

    1

Transcript of CSE 452: Programming Languages Expressions and Control Flow.

CSE 452: Programming Languages

Expressions and Control Flow

2Organization of Programming Languages-Cheng (Fall 2004)

Outline of Today’s Lecture

Expressions and Assignment StatementsArithmetic ExpressionsOverloaded OperatorsType ConversionsRelational and Boolean Expressions

Short-circuit evaluation

Assignment StatementsMixed mode assignment

3Organization of Programming Languages-Cheng (Fall 2004)

Expressions

Expressions are the fundamental means of specifying computations in a programming language

Types:ArithmeticRelational/Boolean

4Organization of Programming Languages-Cheng (Fall 2004)

Arithmetic Expressions

Consist of operators, operands, parentheses, and function calls

Design issues for arithmetic expressions: What are the operator precedence rules? What are the operator associativity rules? What is the order of operand evaluation? Are there restrictions on operand evaluation side

effects? Does the language allow user-defined operator

overloading? What mode mixing is allowed in expressions?

5Organization of Programming Languages-Cheng (Fall 2004)

Arithmetic Expressions

Types of operators A unary operator has one operand:

- x A binary operator has two operands:

x + y Infix: operator appears between two operands Prefix: operator precede their operands

A ternary operator has three operands: (x > 10)? 0 : 1

Evaluation Order Operator evaluation order Operand evaluation order

6Organization of Programming Languages-Cheng (Fall 2004)

Operator Evaluation Order

Four rules to specify order of evaluation for operators

1. Operator precedence rules Define the order in which the operators of different

precedence levels are evaluated (e.g., + vs * )

2. Operator associativity rules Define the order in which adjacent operators with the same

precedence level are evaluated (e.g., left/right associative)

3. Parentheses Precedence and associativity rules can be overriden with

parentheses

4. Conditional Expressions ( ?: operator in C/C++/Perl) Equivalent to if-then-else statement

7Organization of Programming Languages-Cheng (Fall 2004)

Operand Evaluation Order

When do we evaluate operand? Variables are evaluated by fetching their values from

memory Constants

Sometimes, constants are evaluated by fetching its value from memory;

At other times, it is part of the machine language instruction

Parenthesized expressions If operand is a parenthesized expression, all operators it

contains must be evaluated before its value can be used as an operand

Function calls Must be evaluated before its value can be used as an operand

8Organization of Programming Languages-Cheng (Fall 2004)

Operand Evaluation Order Functional Side Effects

Occurs when the function changes one of its parameters or global variable

a + fun(a) If fun does not have the side effect of changing a, then the order

evaluation of the two operands, a and fun(a), does not matter If fun does have the side effect of changing a, order of evaluation

matters

Two Possible Solutions : Disallow functional side effects in the language definition

No two-way parameters in functions No non-local references in functions Advantage: it works! Disadvantage: No more flexibility

Write the language definition to demand that operand evaluation order be fixed

Disadvantage: limits some compiler optimizations

9Organization of Programming Languages-Cheng (Fall 2004)

Overloaded Operators

Multiple use of an operator E.g., use + for integer addition and floating-point addition

Some drawbacks of operator overloading May affect readability

E.g., the ampersand (&) operator in C is used to specify bitwise logical AND operation Address of a variable

May affect reliability Program does not behave the way we want int x, y; float z; z = x / y Problem can be avoided by introducing new symbols

(e.g., Pascal’s div for integer division and / for floating point division) C++ and Ada allow user-defined overloaded operators

Potential problems: Users can define nonsense operations Readability may suffer, even when the operators make sense

E.g., use + to mean multiplication

10Organization of Programming Languages-Cheng (Fall 2004)

Type Conversions

Narrowing conversion converts the value of a type to another type

that cannot store all the values of the original type

e.g., convert double to float

Widening conversion converts the value to a type that include at

least approximations to all of the values of the original type

e.g., convert integers to float

11Organization of Programming Languages-Cheng (Fall 2004)

Type Conversions

Implict/Explicit type conversion Coercion is an implicit type conversion

Useful for mixed-mode expression, which contains operands of different types

Disadvantage: decreases type error detection ability of compilers

In most languages, all numeric types are coerced in expressions, using widening conversions

In Ada, there are virtually no coercions in expressions Explicit Type Conversions

Often called type casts Ada:

Float(Index) -- Index is originally an integer type

Java: (int) speed /* speed is float type

*/

12Organization of Programming Languages-Cheng (Fall 2004)

Relational Expressions

Relational operator is an operator that compares the values of its two operands

Relational expression has two operands and one relational operator

Operator symbols used vary somewhat among languages Ada: /= (not equal operator) C-based language: != Fortran .NE. or <>

Javascript and PHP has two additional relational operators: === and !== similar to == and !=, except it is used to prevent coercion E.g., “7” == 7 is true in Javascript but “7”===7 is false

13Organization of Programming Languages-Cheng (Fall 2004)

Boolean Expressions

Consist of Boolean variables, Boolean constants, relational expressions, and Boolean operators

Boolean Operators:

C has no Boolean type it uses int type with 0 for false and nonzero for true a > b > c is a legal expression

FORTRAN77 FORTRAN90 C Ada

.AND. and && and

.OR. or || or

.NOT. not ! not

14Organization of Programming Languages-Cheng (Fall 2004)

Short Circuit Evaluation

Short-circuit evaluation of an expression result is determined without evaluating all operands & operators

int a = -1, b = 4;if ((a > 0) && (b < 10)) {

…}

Problem: suppose Java did not use short-circuit evaluationindex = 1; while (index <= length) && (LIST[index] != value) index++;

C, C++, and Java: use short-circuit evaluation for usual Boolean operators (&& and

||), also provide bitwise Boolean operators that are not short circuit (&

and |)

15Organization of Programming Languages-Cheng (Fall 2004)

Short Circuit Evaluation

Ada: Non-short-circuit: AND OR short-circuit: AND THEN OR ELSE

Index = 1;

while (Index <= Listlen) and then (List(Index) /= Key)

loop

Index = Index + 1;

end loop;

Short-circuit evaluation exposes the potential problem of side effects in expressions e.g. (a > b) || (b++ / 3) (b is changed only when a

<= b)

16Organization of Programming Languages-Cheng (Fall 2004)

Assignment Statements

The assignment operator symbol:

= FORTRAN, BASIC, PL/I, C, C++, Java

:= ALGOLs, Pascal, Modula-2, Ada

= can be bad if it is overloaded for the relational operator for equalitye.g. (PL/I) A = B = C;

17Organization of Programming Languages-Cheng (Fall 2004)

Assignment Statements

More complicated assignments: Multiple targets (PL/I)

A, B = 10

Conditional targets (C, C++, and Java) x = flag ? count1 : count2 = 0;

Compound assignment operators (C, C++, and Java) sum += next;

Unary assignment operators (C, C++, and Java) a++; - count ++;

18Organization of Programming Languages-Cheng (Fall 2004)

Assignment Statements

C, C++, and Java treat = as an arithmetic binary operator e.g. a = b * (c = d * 2 + 1) + 1 This is inherited from ALGOL 68

Assignment as an Expression In C, C++, and Java, the assignment statement

produces a result So, they can be used as operands in expressions

e.g. while ((ch = getchar() != EOF) { ... } Disadvantage

Another kind of expression side effect

Exercise: a=1, b=2, c=3, d=4

a = b + (c = d / b++) – 1cout << a << “,” << b << “,” << c << “,” << d << endl

19Organization of Programming Languages-Cheng (Fall 2004)

Mixed Mode Assignment

In FORTRAN, C, and C++ any numeric value can be assigned to any numeric

scalar variable; whatever conversion that is necessary is done

In Pascal integers can be assigned to reals, but reals cannot be

assigned to integers programmer must specify whether the conversion from

real to integer is truncated or rounded

In Java, only widening assignment coercions are done In Ada, there is no assignment coercion

20Organization of Programming Languages-Cheng (Fall 2004)

Control Structures

A control structure is a control statement and the statements whose execution it controls

Types of control statements: Selection statements Iterative statements Unconditional branching statement

Levels of Control Flow:1. Within expressions2. Among program units3. Among program statements

21Organization of Programming Languages-Cheng (Fall 2004)

Design Issues

What control statements should a language have?

Can a control structure have multiple entries? Single entry:

execution of the code segment begins with the first statement in the segment

Multiple entries are possible in languages that include gotos and statement labels

Multiple entries may add flexibility to a control construct

Can a control structure have multiple exits?

22Organization of Programming Languages-Cheng (Fall 2004)

Selection Statements

Provides the means of choosing between two or more execution paths in a program

Types of Selection Statements: One-way selection statements Two-way selection statements N-way (multiple) selection statements

Nested selection statements?

23Organization of Programming Languages-Cheng (Fall 2004)

Selection Statements

Single-Way ExamplesFORTRAN IF:

IF (boolean_expr) statement

Problem: can select only a single statement; to select more, a

GOTO must be used, as in the following example IF (.NOT. condition) GOTO 20

...

...

20 CONTINUE

24Organization of Programming Languages-Cheng (Fall 2004)

Selection Statements

Two-way selection statementsif control_expression

then clause else clause

Control_expressionarithmetic/Boolean expressions

Clause formCan be single statements or compound statements

(statements in a program block)

25Organization of Programming Languages-Cheng (Fall 2004)

Selection Statements

Nested Selectorsif (sum == 0)

if (count == 0) result = 0; else

result = 1; Which if gets the else?

Java's static semantics rule: else goes with the nearest if To force alternative semantics, use compound statement

if (sum == 0) { if (count == 0) result = 0;}elseresult = 1;

26Organization of Programming Languages-Cheng (Fall 2004)

Selection Statements

FORTRAN 90 and Ada solution use special words to resolve semantics of

nested selectors e.g. (Ada)

Advantage: flexibility and readability

if .. then if … then … end ifelse …end if

if .. then if … then … else … end ifend if

27Organization of Programming Languages-Cheng (Fall 2004)

Selection Statements

Multiple Selection Constructs

C: switch (expression) {case const_expr_1:

statement_1;

case const_expr_k: statement_k;

[default: def_statement;] (optional)

}

28Organization of Programming Languages-Cheng (Fall 2004)

Selection Statements

Early Multiple Selectors: FORTRAN arithmetic IF (a three-way selector)

IF (arithmetic expression) N1, N2, N3

Multiple Selection using if:

if Expr1 then statement_1

elsif Expr2 then statement_2

else statement_k

end if;