Chapter 7: Expressions. Expressions are the fundamental means of specifying computations in a programming language To understand expression evaluation, need to be familiar with the orders of operator and operand evaluation
1. What are the operator precedence rules?
2. What are the operator associativity rules?
3. What is the order of operand evaluation?
4. Are there restrictions on operand evaluation side effects?
5. Does the language allow user-defined operator overloading?
6. What mode mixing is allowed in expressions?
Comparison of notations
1. Variables: just fetch the value
2. Constants: sometimes a fetch from memory; sometimes the constant is in the machine language instruction
3. Parenthesized expressions: evaluate all operands and operators first
4. Function references: The case of most interest
a = 10;
b = a + fun(&a);
Does the first a get loaded before or after the second use?
1. Write the language definition to disallow functional side effects
2. Write the language definition to demand that operand evaluation order be fixed
index = 1;
while (index <= length) && (LIST[index] != value)
begin sq = x*x;
Becomes sq(i++) = (i++)*(i++) is evaluated twice.
Unary assignment operators (C, C++, and Java)a++;
C, C++, and Java treat = as an arithmetic binary operatore.g. a = b * (c = d * 2 + 1) + 1
This is inherited from ALGOL 68