cse 452: programming languages expressions and control flow
Post on 21-Dec-2015
226 views
TRANSCRIPT
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)
}