CSE 3302 Programming LanguagesControlExpression vs. StatementExpressionPostfix notationExpression and Side EffectsApplicative Order Evaluation (Strict Evaluation)Order MattersExpected Side EffectSequence OperatorNon-strict evaluationShort-Circuit Evaluationif-expressioncase-expressionNormal order evaluation (lazy evaluation)What is it good for?ExamplesUnhygienic MacrosStatementsCSE 3302 Programming LanguagesChengkai Li, Weimin HeSpring 2008Control IExpressions and StatementsLecture 9 – Control I, Spring 2008 1CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 2008Control•Control:what gets executed, when, and in what order.•Abstraction of control:–Expression–Statement–Exception Handling–Procedures and functionsLecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20082Expression vs. Statement•In pure (mathematical) form:–Expression:•no side effect•return a value–Statement:•side effect•no return value•Functional languages aim at achieving this pure form•No clear-cut in most languagesLecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20083Expression•Constructed recursively:–Basic expression (literal, identifiers)–Operators, functions, special symbols•Number of operands:–unary, binary, ternary operators•Operator, function: equivalent concepts–(3+4)*5 (infix notation)–mul( add(3,4), 5)•“*”(“+”(3,4),5) (Ada, prefix notation)•(* (+ 3 4) 5) (LISP, prefix notation)Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20084Postfix notation•PostScript:•%!PS /Courier findfont 20 scalefont setfont 72 500 moveto (Hello world!) show showpage http://en.wikipedia.org/wiki/PostScriptLecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20085Expression and Side Effects•Side Effects:–changes to memory, input/output–Side effects can be undesirable–But a program without side effects does nothing!•Expression:–No side effect: Order of evaluating subexpressions doesn’t matter (mathematical forms)–Side effect: Order mattersLecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20086Applicative Order Evaluation(Strict Evaluation)•Evaluate the operands first, then apply operators (bottom-up evaluation)(subexpressions evaluated, no matter whether they are needed)•But is 3+4 or 5-6 evaluated first?Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20087*-4+365Order MattersC:int x=1;int f(void) {x=x+1;return x;}main(){printf(“%d\n”, x + f());return 0;}Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20088Java:class example{ static int x = 1; public static int f() { x = x+1; return x; } public static void main(String[] args) { System.out.println(x+f()); }}43Many languages don’t specify the order, including C, java.–C: usually right-to-lef–Java: always lef-to-right, but not suggested to rely on that.Expected Side Effect•Assignment (expression, not statement)x = (y = z) (right-associative operator)•x++, ++xint x=1;int f(void) {return x++;}main(){printf(“%d\n”, x + f());return 0;}Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 20089Why?Sequence Operator•(expr1, expr2, …, exprn)–Lef to right (this is indeed specified in C)–The return value is exprnx=1;y=2;x = (x=x+1, y++, x+y);printf(“%d\n”,x);Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200810Non-strict evaluation•Evaluating an expression without necessarily evaluating all the subexpressions.•short-circuit Boolean expression•if-expression, case-expressionLecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200811Short-Circuit Evaluation•if (false and x) … if (true or x)…–No need to evaluate x, no matter x is true or false•What is it good for?–if (i <=lastindex and a[i]>=x)…–if (p != NULL and p->next==q)…•Ada: allow both short-circuit and non short-circuit.–if (x /= 0) and then (y/x > 2) then ...–if (x /= 0) and (y/x > 2) then ... ?–if (ptr = null) or else (ptr.x = 0) then ...–if (ptr = null) or (ptr.x = 0) then ... ?Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200812if-expression•if (test-exp, then-exp, else-exp)ternary operator–test-exp is always evaluated first–Either then-exp or else-exp are evaluated, not both–if e1 then e2 else e3 (ML)–e1 ? e2 : e3 (C)•Different from if-statemnt?Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200813case-expression•ML:case color of red => “R’’ |blue => “B’’ |green => “G” |_ => “AnyColor”;Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200814Normal order evaluation(lazy evaluation)•When there is no side-effect:Normal order evaluation (Expressions evaluated in mathematical form)–Operation evaluated before the operands are evaluated;–Operands evaluated only when necessary.•int double (int x) { return x+x; }int square (int x) { return x*x; }Applicative order evaluation : square(double(2)) = …Normal order evaluation : square(double(2)) = …Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200815What is it good for?(p!=NULL) ? p->next : NULLint if_exp(bool x, int y, int z){ if (x) return y; else return z; }if_exp(p!=NULL, p->next, NULL);•With side effect, it may hurt you:int get_int(void) {int x;scanf(“%d” &x);return x;}Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200816Examples•Call by Name (Algol60)•Macro#define swap(a, b) {int t; t = a; a = b; b = t;}–What are the problems here?Lecture 9 – Control I, Spring 2008CSE3302 Programming Languages, UT-Arlington ©Chengkai Li, Weimin He, 200817Unhygienic Macros •Call by Name (Algol60)•MacroLecture 9 – Control I, Spring 2008CSE3302 Programming Languages,
View Full Document