9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of...
-
Upload
ilene-marianna-ramsey -
Category
Documents
-
view
214 -
download
1
Transcript of 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of...
![Page 1: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/1.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 1
COS220 Concepts of PLs AUBG, COS dept
Lecture 05
Components of Programming
Languages, Part II
Reference: R.Sebesta, Chapter 7
![Page 2: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/2.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 2
Lecture Contents:
• Expressions • Operands within Expressions• Operators within Expressions• The Assignment Operator• The Assignment Statement
![Page 3: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/3.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 3
Expressions
Expressions are defined as entities composed to contain operands and operators that specify some computation.
![Page 4: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/4.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 4
Expressions - Operands
Typical operands:
• Literals: 34, 5.68, -.567
![Page 5: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/5.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 5
Expressions - Operands
Typical operands:
• Literals: 34, 5.68, -.567• Named constants: PI, MAX, MIN, M
– #define PI 3.14159265 //C,C++– const int MAX = 100; //C,C++,C#– final int MIN = 0; //Java– Const M As Integer = 55 ‘VBasic
![Page 6: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/6.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 6
Expressions - Operands
Typical operands:
• Constants: 34, 5.68, -.567
• Named constants: PI, MAX, MIN, M• Variables: price, value, tax[I]
– Regular /scalar/ or Indexed /subscripted/
![Page 7: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/7.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 7
Expressions - Operands
Typical operands: • Constants: 34, 5.68, -.567 • Named constants: PI, MAX, MIN, M• Variables: price, value, tax[I]• Struct members: Ann.age,Ann.name
– struct Person { int age; string name; …};– Person Ann;
![Page 8: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/8.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 8
Expressions - Operands
Typical operands:
• Constants: 34, 5.68, -.567
• Named constants: PI, MAX, MIN, M• Variables: price, value, tax[I]• Struct members: Ann.age,Ann.name• Function Calls: sqrt(2.),fabs(a+b)
![Page 9: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/9.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 9
Expressions - Operands
Typical operands: • Constants: 34, 5.68, -.567 • Named constants: PI, MAX, MIN, M• Variables: price, value, tax[I]• Struct members: Ann.age, Ann.name• Function Calls: sqrt(2.), abs(a+b)• Parenthesized Sub Expressions:
(a+b)*c, b*(c-d+e%f)
![Page 10: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/10.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 10
Expressions - Operators
Formal characteristics of operators:
• Precedence;
![Page 11: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/11.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 11
Expressions - Operators
Formal characteristics of operators:
• Precedence;
• Associativity;
![Page 12: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/12.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 12
Expressions - Operators
Formal characteristics of operators:• Precedence;• Associativity; • Number of operands:
– Unary – a sole operand– Binary – two operands– Ternary – three operands
![Page 13: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/13.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 13
Expressions - Operators
Formal characteristics of operators:• Precedence;• Associativity; • Number of operands:
– Unary – a single operand– Binary – two operands– Ternary – three operands
• Infix, Prefix and Postfix operators;
Precedence, associativity for C/C++ operators (see table on next slide).
![Page 14: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/14.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 14
No
Operator Associativity
1 ( ) [ ] –>.
L→R
2 ! ~ ++ –– + –* & (type) sizeof
R→L
3 * / % L→R
4 + – L→R
5 << >> L→R
6 < <= > >= L→R
7 == != L→R
8 & L→R
9 ^ L→R
10 | L→R
11 && L→R
12 || L→R
13 ? : L→R
14 = += –= *= /= %=&= |= <<= >>=
R→L
15 , L→R
![Page 15: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/15.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 15
Expressions – Syntax
• Intro to BNF
• Intro to Backus Naur Form
• Intro to Backus Normal Form
![Page 16: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/16.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 16
Expressions – Syntax
• Syntax describes the expressions structure.
• How? Using BNF
• BNF /Backus Naur/Normal Form/ is a formalism to present syntax. See introductory example on next slides.
• Comprehensive survey on syntax of Programming Languages is presented in COS301 Compiler Theory course.
![Page 17: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/17.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 17
Expressions – Syntax
Do you remember the Reg EXP concept to describe integer/real literals (operands of expressions)
![Page 18: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/18.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 18
Expressions – Syntax
Do you remember the Reg EXP concept to describe integer/real literals (operands of expressions)
D+
D+.D* | D*.D+
![Page 19: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/19.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 19
Expressions – Syntax
Do you remember the Reg EXP concept to describe names/identifiers of variables (operands of expressions)
![Page 20: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/20.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 20
Expressions – Syntax
Do you remember the Reg EXP concept to describe names/identifiers of variables (operands of expressions)
L.(L|D)*
![Page 21: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/21.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 21
Expressions – Syntax
Reg EXP are tool to describe separate entities or unique lexical units as literals or names
Reg EXP are not the only possible tool to describe lexems
Even more Reg EXP can not describe more complex program segments as combinations of names, literals and operators, i.e. expressions.
There exists more powerful tool for this purpose – the grammar
![Page 22: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/22.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 22
Expressions – Syntax
Reg EXP and grammar to describe integer literal
RE = D+
Grammar:<Constant> ::= <Digit> | <Constant> <Digit>
<Digit> ::= 0 | 1 | 2 | … | 8 | 9
![Page 23: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/23.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 23
Expressions – Syntax
Reg EXP and grammar to describe integer literal
RE = D+
Grammar:
C -> D | C D
D -> 0 | 1 | 2 | … | 8 | 9
![Page 24: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/24.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 24
Expressions – Syntax
Reg EXP and grammar to describe name
RE = L.(L|D)*
Grammar:
<Id> ::= <let> | <Id><let> | <Id><dig>
<let> ::= a | b | … | Z
<dig> ::= 0 | 1 | 2 | … | 8 | 9
![Page 25: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/25.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 25
Expressions – Syntax
Reg EXP and grammar to describe name
RE = L.(L|D)*
Grammar:
I -> L | I L | I D
L -> a | b | … | Z
D -> 0 | 1 | 2 | … | 8 | 9
![Page 26: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/26.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 26
Expressions – Syntax
Grammar to describe expression – see next slide
![Page 27: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/27.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 27
Expressions – Syntax
Example of a grammar (ambiguous)<Expr> ::= <Var> | <Const> | <Expr> + <Expr> | <Expr> * <Expr>
<Var> ::= <Ident>
<Ident> ::= <Letter> | <Ident><Letter> | <Ident><Digit>
<Const> ::= <Digit> | <Const><Digit>
<Letter> ::= A | B | … | Z | a | b | … | z | _
<Digit> ::= 0 | 1 | 2 | … | 9
How to interpret BNF notation?
Expression is defined as a sole variable or as a sole constant, or as a sum of expressions, or as a product of expressions.
![Page 28: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/28.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 28
Expressions – SyntaxExample of a grammar (non ambiguous)<Expr> ::= <Term> | <Expr> + <Term><Term> ::= <Factor> | <Term> * <Factor><Factor> ::= <Var> | <Const> | ( <Expr> )<Var> ::= <Ident><Ident> ::= <Letter> | <Ident><Letter> | <Ident><Digit><Const> ::= <Digit> | <Const><Digit><Letter> ::= A | B | … | Z | a | b | … | z | _<Digit> ::= 0 | 1 | 2 | … | 9
How to interpret BNF notation? Expression is defined as a term or as a sum of terms. Term is defined as a
factor or product of factors. Factor is defined as a var or as a const or as a sub expression surrounded in ( ).
![Page 29: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/29.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 29
Expressions – SyntaxCFG or Extended CFG
<Expr> ::= <Term> | <Expr> + <Term><Term> ::= <Factor> | <Term> * <Factor><Factor> ::= <Var> | <Const> | ( <Expr> )
<Expr> ::= <Term> { + <Term> } *<Term> ::= <Factor> { * <Factor> } *<Factor> ::= <Var> | <Const> | ( <Expr> )
![Page 30: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/30.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 30
Expressions – SyntaxExample of a grammar (non ambiguous)<Expr> ::= <Term> { + <Term> }*<Term> ::= <Factor> { * <Factor> }*<Factor> ::= <Var> | <Const> | ( <Expr> )<Var> ::= <Ident><Ident> ::= <Letter> | <Ident><Letter> | <Ident><Digit><Const> ::= <Digit> | <Const><Digit><Letter> ::= A | B | … | Z | a | b | … | z | _<Digit> ::= 0 | 1 | 2 | … | 9
How to interpret BNF notation? Expression is defined as a term or as a sum of terms. Term is defined as a
factor or product of factors. Factor is defined as a var or as a const or as a sub expression surrounded in ( ).
![Page 31: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/31.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 31
Expressions – Semantics
• Semantics is the meaning of expressions. It is determined by how expressions are evaluated.
• Expression evaluation depends on the order of operator and operand evaluation.
• Operator evaluation order is controlled by the precedence rules and associativity rules of the PL.
• Specific topics in semantics of expressions:– Type Mismatches– Coercions– Short-Circuit Evaluation
![Page 32: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/32.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 32
Expressions
• Classification of expressions by category of operators:– Arithmetic expressions;
– Relational expressions;
– Boolean (Logical) expressions.
![Page 33: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/33.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 33
Arithmetic Expressions
• Purpose of AExp: to specify arithmetic computation. Implementation of such a computation must cause two actions:– fetching operands from memory, and – executing arithmetic operators on those operands
• In Programming Languages AExp consist of:– Operators – addition, subtraction, multiplication,
division, modulus, power– Operands – constants, variables /scalar and indexed/,
sub expressions, function calls
![Page 34: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/34.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 34
Operator evaluation order - Precedence
• Instead of simply evaluating the order from L to R or from R to L, the concept of placing operators in hierarchy of evaluation priorities was developed.
• Precedence(priority) rules define the order in which the operators of different precedence levels are evaluated.
![Page 35: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/35.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 35
AOp - Precedence
• Binary AOp: pow, mul, div, mod, add, sub
– a + b + c
– a * b * c * d / e / f % g
– a + b * c
– a + b * c ^ d
![Page 36: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/36.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 36
AOp - Precedence
• Unary AOp:– Unary addition or identity operator (+a). It has no
associated operation and therefore no effect on its operand. (in Java the only effect is that byte/short operands are being implicitly converted to int).
– Unary minus (-a) changes the sign of its operand. It can appear either at beginning or anywhere inside the expression, as long as it is parenthesized to prevent from being adjacent to another operator
• a + (-b) * c - legal• a + -b * c - illegal
![Page 37: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/37.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 37
AOp - Precedence
• Precedence of AOp in some PL
C-like PL AdaHighest
postfix ++, -- **, abs
prefix ++, --, unary +,- *, /, mod, rem
*, /, % unary +, -
binary +, - binary +, -
Lowest
![Page 38: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/38.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 38
Operator evaluation order - Associativity
• When an expression contains two or more adjacent operators (i.e. separated by one operand) the same precedence, it is the operator associativity to dictate the order of operator evaluation
• Left associativity: from L > R• Right associativity: from R > L• Nonassociativity (Ada): parentheses used
in order to try to legalize the expression
![Page 39: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/39.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 39
Operator evaluation order - Associativity
• When an expression contains two or more adjacent operators (i.e. separated by one operand) the same precedence, it is the operator associativity to dictate the order of operator evaluation
• Left associativity: a+b-c a*b/c%d
![Page 40: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/40.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 40
Operator evaluation order - Associativity
• When an expression contains two or more adjacent operators (i.e. separated by one operand) the same precedence, it is the operator associativity to dictate the order of operator evaluation
• Right associativity: a**b**c
![Page 41: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/41.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 41
Operator evaluation order - Associativity
• When an expression contains two or more adjacent operators (i.e. separated by one operand) the same precedence, it is the operator associativity to dictate the order of operator evaluation
• Nonassociativity (Ada): a**b**c illegal and transformed to (a**b)**c or a**(b**c)in order to try to legalize the expression
![Page 42: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/42.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 42
Operator evaluation order - Associativity
• Unary – has precedence over binary –.• – a – b is equivalent to (– a) – b
• Unary – has precedence over mul, div.• – a * b is equivalent to (– a) * b• – a / b is equivalent to (– a) / b
• Ada: exponentiation and modulus have precedence over unary minus.
• – a ** b is equivalent to – ( a ** b)• – 17 mod 5 is equivalent to – (17 mod 5)
![Page 43: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/43.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 43
AOp – Associativity in PL
Language Associativity RulesVisual Basic Left: ^, *, /, \, Mod, +, –
Right:C-like PL Left: *, /, %, binary+, binary–
Right: ++, --, unary+, unary –Ada Left: all except **
Nonassociative: **Fortran Left: *, /, +, –
Right: **
![Page 44: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/44.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 44
Operator evaluation order - Parentheses
• Programmers can alter precedence and associativity rules by placing parentheses in expressions
a + b * c vs. ( a + b ) * c
• Parenthesized expressions have higher level of precedence. They are also called sub expressions and are being classified as valid operands.
![Page 45: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/45.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 45
Operator evaluation order – Conditional Expressions
• Unary, binary operators• C-like PL: the ternary operator ? :• How to describe a conditional expression.
Ternary operator
<expression1> ? <expression2> : <expression3>
average = (count==0) ? 0 : sum/count;
Instead if (count == 0) average = 0;
else average = sum/count;
![Page 46: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/46.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 46
Operand Evaluation Order
• Variables are evaluated by fetching their values from memory.
• Constants are sometimes evaluated by fetching their values from memory or a constant may be immediate operand in ML instruction and no need of a memory fetch.
• Operand evaluation order is irrelevant if neither of the operands of an operator has a side effect.
• Attention: Be careful on side effects
![Page 47: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/47.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 47
Operand Evaluation Order – Side Effects
Definition:
A side effect of a function (functional side effect) occurs when:
• the function changes either one of its parameters;
• the function changes a global variable.
![Page 48: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/48.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 48
Operand Evaluation Order – Side Effects
Consider an expression a + fun(a)If fun does not have the side effect of changing a, then the order
of evaluation of the operands a and fun(a) has no effect on the expression value.
However, if fun changes a, there is an effect.Example: Consider fun returns the value of its argument divided
by 2 and changes the value of its parameter to 20.Suppose source text: a = 10;
b = a + fun(a);If the value of a is fetched first,
b=10+fun(10)=10+5=15If the second operand is evaluated first,
b=20+fun(10)=20+5=25
![Page 49: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/49.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 49
Operand Evaluation Order – Side Effects
One more example – C program illustrates side effect when function changes global variable that appears in an expression
int a = 5; int fun1() { a = 17; return 3; } void fun2() { a = a + fun1(); } void main() { fun2(); }
The value computed for a in fun2 depends on the order of evaluation of the operands in the expression a+fun1(). The value of a will be either 8 or 20.
![Page 50: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/50.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 50
Operand Evaluation Order – Side Effects
Two solutions to the problem of operand evaluation order:
First, the language designer could disallow function evaluation from affecting the value of expressions by simply disallowing functional side effects.
Second, to state in language definition that operands in expressions are to be evaluated in particular order and demand that language implementors guarantee that order.
![Page 51: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/51.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 51
Overloaded Operators
• Arithmetic operators are often used for more than one purpose. For example, + serves– to add integers, like 5 + 8
– to add FP real values, like 3.3 + 7.2
– to catenate strings (STL, Java), like “AU” + “BG”
• This multiple use is called operator overloading.• Operator overloading is acceptable as long as
readability and reliability do not suffer.
![Page 52: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/52.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 52
Type Conversions
• Type conversions classification:– Narrowing– Widening
• A narrowing conversion converts a value to a type that cannot even store approximations of all the values of the original type– E.g. converting double to float
• A widening conversion converts a value to a type that can include at least approximations of all the values of the original type– E.g. converting from int to float
• Widening conversions are usually safe• Type conversions are either explicit or implicit
![Page 53: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/53.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 53
Implicit Type Conversion - Coercion• A design decision concerning AExp is whether an
operator can have operands of different types• PL that allow mixed-mode expressions, must define
conventions for implicit operand type conversions, called coercions
• Example: void myMethod() { int a, b, c; float d;
a = b * d; . . . }
• Two implicit conversions take place:– b is converted to float– the r-value is converted to int, being truncated or eliminating
the fraction part of the value
![Page 54: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/54.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 54
Explicit Type Conversion
• Most PL provide capabilities for doing explicit conversions, both widening and narrowing.
• In C-like PL, explicit type conversions are called casts using (type) operator– C/C++: (int)angle
• or applying so called functional notation– C++ only: int(angle)
![Page 55: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/55.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 55
Errors in ExpressionsA number of errors can occur in expression
evaluation.• If the PL requires type checking, then operand
type errors cannot occur.• Errors because of coercion of operands in
expressions, e.g. loss of accuracy.• Errors because result of an operation cannot be
represented in the memory cell where it must be stored:– Overflow – result is too large– Underflow – result is too small
![Page 56: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/56.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 56
Relational Expressions
• A relational operator is an operator that compares the values of its two operands.
• A relational expression has two operands and one relational operator. The value of Relational Expression is Boolean, except when Boolean is not a type included in PL
• RelOp have lower precedence than AOp.a + 1 > 2 * b
![Page 57: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/57.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 57
Syntax of Relational Operators
Ada C-like PL VBasic Fortran95Equal = == = .EQ. ==Not equal /= != <> .NE. <>Greater than > > > .GT. >Less than < < < .LT. <Greater than or equal >= >= >= .GE. >=Less than or equal <= <= <= .LE. <=
JavaScript/PHP have two more relop === and !==. They are similar to == and != but prevent their operands from coercion“7” == 7 is true in JavaScript (string coerced to number)“7” === 7 is false in JavaScript (no coercion is done with this operator)
![Page 58: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/58.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 58
Associativity of RelOp
• From Left to Right
• One odd result in C’s design is that the following expression is legal
• a > b > cThe leftmost > RelOp is evaluated first because of
the left associativity, producing 0 or 1. Then this result is compared to the variable c.
There is never comparison between b and c.
![Page 59: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/59.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 59
Boolean (Logical) Expressions
• Boolean expressions consist of Boolean variables, Boolean constants, relational expressions, and Boolean operators
• Boolean operators: AND, OR, NOT, and sometimes exclusive OR, and equivalence
• Precedence of Boolean operators: AND has higher precedence to OR. This results from baseless correlation of arithmetic multiplication with AND, and arithmetic addition with OR
![Page 60: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/60.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 60
Precedence of Ar,Rel,Bool Op
C-like PLHighest postfix ++, --
unary +,-, prefix ++, --, !
*, /, %
binary +, -
<, >, <=, >=
==, !=
&&
Lowest ||
![Page 61: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/61.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 61
Short-Circuit Evaluation
• A short-circuit evaluation of an expression is one in which the result is determined without evaluating all of the operands and/or operators.
![Page 62: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/62.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 62
Short-Circuit Evaluation
• The value of the arithmetic expression (13*a)*(b/13-1) is independent of the sub expression (b/13-1) if a is 0, because 0*x=0 for any x.
• However, in AExp this shortcut is not easily detected during execution, so it is never taken.
![Page 63: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/63.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 63
Short-Circuit Evaluation
• The value of the Boolean expression (a>=0)&&(b<10)is independent of the second relational expression if a<0, because false&&x=false for any x.
So, when a<0, there is no need to evaluate b, the constant 10, the second RelExp, or the && operator.
Unlike the case of AExp, this shortcut can easily be detected during execution.
![Page 64: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/64.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 64
Assignment
Operator/Statement
![Page 65: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/65.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 65
Assignment Operator/Statement
Semantics:The purpose of an assignment operator (statement) is to
change the value of a variable.An assignment statement can simply cause a value
to be copied from one memory cell to another.In some cases assignment statement includes
expressions with operators, which cause values to be copied to CPU and to be operated on, and the results to be copied back to memory.
![Page 66: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/66.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 66
Assignment Operator/Statement
Syntax:
Simple assignment:<target variable> <assignment oprtor> <expression>
l-value = r-value
:=
![Page 67: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/67.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 67
Assignment Operator/Statement
Syntax:
Simple assignment:<target variable> <assignment operator> <expression>
l-value = r-value
:=
a = 5 + 6 * 8
![Page 68: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/68.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 68
Assignment Operator/Statement
Syntax:
Simple assignment:<target variable> <assignment operator> <expression>
l-value = r-value
:=
a = 5 + 6 * 8 expression
![Page 69: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/69.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 69
Assignment Operator/Statement
Syntax:Simple assignment:<target variable> <assignment operator> <expression>
l-value = r-value :=
a = 5 + 6 * 8 expressiona = 5 + 6 * 8 ; statement
![Page 70: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/70.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 70
Assignment Operator/Statement
Multiple targets:
C-like Programming Languages: a = b = c = d = 5 + 6 * 8;
Pl/1, Ada: a, b, c, d = 5 + 6 * 8;
![Page 71: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/71.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 71
Assignment Operator/Statement
Conditional targets:
(flag) ? count1 = 0 : count2 = 0
![Page 72: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/72.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 72
Assignment Operator/Statement
Compound assignment operators are a shorthand method of specifying a commonly needed form of assignment. The form of assignment that can be abbreviated with this technique has the destination variable also appearing as the first operand of the expression in the right side
sum = sum + value is equivalent to
sum += value
The C-like languages have versions of the compound assignment operators for the most of their binary operators
+= -= *= /= %=
![Page 73: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/73.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 73
Assignment Operator/Statement
Two special unary arithmetic operators that are actually abbreviated assignments ++ and --. They combine increment and decrement operations with assignment and may be used in expressions or to form stand-alone single-operator assignment statement.
++count; count++; sum=++count;sum=count++;
count=count+1; sum=count;
sum=count; count=count+1;
![Page 74: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/74.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 74
Assignment Operator/Statement
When two unary operators apply to the same operand, the association is R to L.
- count ++
is equivalent to
- (count ++)
rather than
(-count) ++
![Page 75: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/75.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 75
Assignment Operator/Statement
Assignment as an ExpressionIn C-like PL the assignment statement produces a result,
which is the same as the value assigned to the target. It can therefore be used as an expression or as an operand in other expressions.
This means that assignment operator is to be treated as the other binary operators except that it has the side effect of changing its left operand
while ( ch = getchar() != EOF ) …
while ( ( ch = getchar() ) != EOF ) …
![Page 76: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/76.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 76
Assignment Operator/Statement
Assignment as an Expression: disadvantage: difficult to read and understand
a = b + ( c = d / b++ ) - 1
assign b to tempassign b+1 to bassign d/temp to cassign b+c to tempassign temp-1 to a
![Page 77: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/77.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 77
Assignment Operator/Statement
Assignment as an Expression: loss of error detection in the C PL design
if ( x = y ) …
if ( x == y ) …
![Page 78: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/78.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 78
Assignment–Conclusion Remark
• The very low level of precedence for the assignment operator
• The right associativity of the assignment operator
• The different notation for assignment operator and equality operator
• Mixed mode assignment
![Page 79: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/79.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 79
Exercise 5a
Components of Programming Languages. Part II.
Practical
• Operands, Operators, Expressions
Assignments under discussion are based on lecture 3.
![Page 80: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/80.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 80
Task 1
Write a program to check the values of three real (float, double, and/or long double) variables as valid sides of a triangle using an expression with arithmetic, relational and boolean (logical) operators.
![Page 81: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/81.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 81
Task 2
Write a program to check an integer (short, int, long and/or unsigned) valued variable as a valid leap year.
![Page 82: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/82.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 82
Task 3
Write a program that copies its input to output (screen) one character at a time until end of data indicator EOF registered using getchar() built-in function.
![Page 83: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/83.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 83
Task 4
Verify that the expression getchar() != EOF is valued 0 or 1.
![Page 84: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/84.jpg)
04/19/23 Assoc. Prof. Stoyan Bonev 84
Precedence and associativity of operators in C/C++
No Operator Associativity
1 ( ) [ ] –> . L→R
2 ! ~ ++ –– + – * & (type) sizeof R→L
3 * / % L→R
4 + – L→R
5 << >> L→R
6 < <= > >= L→R
7 == != L→R
8 & L→R
9 ^ L→R
10 | L→R
11 && L→R
12 || L→R
13 ? : L→R
14 = += –= *= /= %= &= |= <<= >>= R→L
15 , L→R
![Page 85: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/85.jpg)
ISBN 0-321-49362-1
Chapter 7
Expressions and Assignment Statements
![Page 86: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/86.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-86Copyright © 2009 Addison-Wesley. All rights reserved. 1-86
Chapter 7 Topics
• Introduction• Arithmetic Expressions• Overloaded Operators• Type Conversions• Relational and Boolean Expressions• Short-Circuit Evaluation• Assignment Statements• Mixed-Mode Assignment
![Page 87: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/87.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-87Copyright © 2009 Addison-Wesley. All rights reserved. 1-87
Introduction
• 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
• Essence of imperative languages is dominant role of assignment statements
![Page 88: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/88.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-88Copyright © 2009 Addison-Wesley. All rights reserved. 1-88
Arithmetic Expressions
• Arithmetic evaluation was one of the motivations for the development of the first programming languages
• Arithmetic expressions consist of operators, operands, parentheses, and function calls
![Page 89: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/89.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-89Copyright © 2009 Addison-Wesley. All rights reserved. 1-89
Arithmetic Expressions: Design Issues
• Design issues for arithmetic expressions– Operator precedence rules?– Operator associativity rules?– Order of operand evaluation?– Operand evaluation side effects?– Operator overloading?– Type mixing in expressions?
![Page 90: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/90.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-90Copyright © 2009 Addison-Wesley. All rights reserved. 1-90
Arithmetic Expressions: Operators
• A unary operator has one operand• A binary operator has two operands• A ternary operator has three operands
![Page 91: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/91.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-91Copyright © 2009 Addison-Wesley. All rights reserved. 1-91
Arithmetic Expressions: Operator Precedence Rules
• The operator precedence rules for expression evaluation define the order in which “adjacent” operators of different precedence levels are evaluated
• Typical precedence levels– parentheses– unary operators– ** (if the language supports it)– *, /– +, -
![Page 92: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/92.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-92Copyright © 2009 Addison-Wesley. All rights reserved. 1-92
Arithmetic Expressions: Operator Associativity Rule
• The operator associativity rules for expression evaluation define the order in which adjacent operators with the same precedence level are evaluated
• Typical associativity rules– Left to right, except **, which is right to left– Sometimes unary operators associate right to left (e.g.,
in FORTRAN)
• APL is different; all operators have equal precedence and all operators associate right to left
• Precedence and associativity rules can be overriden with parentheses
![Page 93: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/93.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-93Copyright © 2009 Addison-Wesley. All rights reserved. 1-93
Ruby Expressions
• All arithmetic, relational, and assignment operators, as well as array indexing, shifts, and bit-wise logic operators, are implemented as methods
- One result of this is that these operators can all
be overriden by application programs
![Page 94: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/94.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-94Copyright © 2009 Addison-Wesley. All rights reserved. 1-94
Arithmetic Expressions: Conditional Expressions
• Conditional Expressions– C-based languages (e.g., C, C++)– An example:
average = (count == 0)? 0 : sum / count
– Evaluates as if written likeif (count == 0)
average = 0
else
average = sum /count
![Page 95: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/95.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-95Copyright © 2009 Addison-Wesley. All rights reserved. 1-95
Arithmetic Expressions: Operand Evaluation Order
• Operand evaluation order1. Variables: fetch the value from memory2. 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. The most interesting case is when an operand is a function call
![Page 96: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/96.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-96Copyright © 2009 Addison-Wesley. All rights reserved. 1-96
Arithmetic Expressions: Potentials for Side Effects
• Functional side effects: when a function changes a two-way parameter or a non-local variable
• Problem with functional side effects: – When a function referenced in an expression alters
another operand of the expression; e.g., for a parameter change:
a = 10; /* assume that fun changes its parameter */
b = a + fun(&a);
![Page 97: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/97.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-97Copyright © 2009 Addison-Wesley. All rights reserved. 1-97
Functional Side Effects
• Two possible solutions to the problem1. Write the language definition to disallow functional
side effects• No two-way parameters in functions• No non-local references in functions• Advantage: it works!• Disadvantage: inflexibility of one-way parameters
and lack of non-local references
2. Write the language definition to demand that operand evaluation order be fixed• Disadvantage: limits some compiler optimizations• Java requires that operands appear to be evaluated in
left-to-right order
![Page 98: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/98.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-98Copyright © 2009 Addison-Wesley. All rights reserved. 1-98
Overloaded Operators
• Use of an operator for more than one purpose is called operator overloading
• Some are common (e.g., + for int and float)
• Some are potential trouble (e.g., * in C and C++)– Loss of compiler error detection (omission of
an operand should be a detectable error)– Some loss of readability
![Page 99: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/99.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-99Copyright © 2009 Addison-Wesley. All rights reserved. 1-99
Overloaded Operators (continued)
• C++ and C# allow user-defined overloaded operators
• Potential problems: – Users can define nonsense operations– Readability may suffer, even when the
operators make sense
![Page 100: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/100.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-100Copyright © 2009 Addison-Wesley. All rights reserved. 1-100
Type Conversions
• A narrowing conversion is one that converts an object to a type that cannot include all of the values of the original type e.g., float to int
• A widening conversion is one in which an object is converted to a type that can include at least approximations to all of the values of the original type e.g., int to float
![Page 101: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/101.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-101Copyright © 2009 Addison-Wesley. All rights reserved. 1-101
Type Conversions: Mixed Mode
• A mixed-mode expression is one that has operands of different types
• A coercion is an implicit type conversion• Disadvantage of coercions:
– They decrease in the type error detection ability of the compiler
• In most languages, all numeric types are coerced in expressions, using widening conversions
• In Ada, there are virtually no coercions in expressions
![Page 102: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/102.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-102Copyright © 2009 Addison-Wesley. All rights reserved. 1-102
Explicit Type Conversions
• Called casting in C-based languages• Examples
– C: (int)angle– Ada: Float (Sum)
Note that Ada’s syntax is similar to that of function calls
![Page 103: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/103.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-103Copyright © 2009 Addison-Wesley. All rights reserved. 1-103
Type Conversions: Errors in Expressions
• Causes– Inherent limitations of arithmetic
e.g., division by zero– Limitations of computer arithmetic
e.g. overflow
• Often ignored by the run-time system
![Page 104: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/104.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-104Copyright © 2009 Addison-Wesley. All rights reserved. 1-104
Relational and Boolean Expressions• Relational Expressions
– Use relational operators and operands of various types
– Evaluate to some Boolean representation– Operator symbols used vary somewhat among
languages (!=, /=, ~=, .NE., <>, #)
• JavaScript and PHP have two additional relational operator, === and !==
- Similar to their cousins, == and !=, except that they do not coerce their operands
![Page 105: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/105.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-105Copyright © 2009 Addison-Wesley. All rights reserved. 1-105
Relational and Boolean Expressions• Boolean Expressions
– Operands are Boolean and the result is Boolean
– Example operators
FORTRAN 77 FORTRAN 90 C Ada
.AND. and && and .OR. or || or
.NOT. not ! not
xor
![Page 106: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/106.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-106Copyright © 2009 Addison-Wesley. All rights reserved. 1-106
Relational and Boolean Expressions: No Boolean Type in C
• C89 has no Boolean type--it uses int type with 0 for false and nonzero for true
• One odd characteristic of C’s expressions: a < b < c is a legal expression, but the result is not what you might expect:– Left operator is evaluated, producing 0 or 1– The evaluation result is then compared with
the third operand (i.e., c)
![Page 107: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/107.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-107Copyright © 2009 Addison-Wesley. All rights reserved. 1-107
Short Circuit Evaluation
• An expression in which the result is determined without evaluating all of the operands and/or operators
• Example: (13*a) * (b/13–1)If a is zero, there is no need to evaluate (b/13-1)
• Problem with non-short-circuit evaluationindex = 1;while (index <= length) && (LIST[index] != value)
index++;– When index=length, LIST [index] will cause an
indexing problem (assuming LIST has length -1 elements)
![Page 108: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/108.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-108Copyright © 2009 Addison-Wesley. All rights reserved. 1-108
Short Circuit Evaluation (continued)• C, C++, and Java: use short-circuit evaluation for
the usual Boolean operators (&& and ||), but also provide bitwise Boolean operators that are not short circuit (& and |)
• Ada: programmer can specify either (short-circuit is specified with and then and or else)
• Short-circuit evaluation exposes the potential problem of side effects in expressions e.g. (a > b) || (b++ / 3)
![Page 109: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/109.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-109Copyright © 2009 Addison-Wesley. All rights reserved. 1-109
Assignment Statements
• The general syntax<target_var> <assign_operator> <expression>
• The assignment operator= FORTRAN, BASIC, the C-based languages:= ALGOLs, Pascal, Ada
• = can be bad when it is overloaded for the relational operator for equality (that’s why the C-based languages use == as the relational operator)
![Page 110: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/110.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-110Copyright © 2009 Addison-Wesley. All rights reserved. 1-110
Assignment Statements: Conditional Targets
• Conditional targets (Perl)($flag ? $total : $subtotal) = 0
Which is equivalent to
if ($flag){
$total = 0
} else {
$subtotal = 0
}
![Page 111: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/111.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-111Copyright © 2009 Addison-Wesley. All rights reserved. 1-111
Assignment Statements: Compound Operators
• A shorthand method of specifying a commonly needed form of assignment
• Introduced in ALGOL; adopted by C• Example
a = a + b
is written as
a += b
![Page 112: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/112.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-112Copyright © 2009 Addison-Wesley. All rights reserved. 1-112
Assignment Statements: Unary Assignment Operators
• Unary assignment operators in C-based languages combine increment and decrement operations with assignment
• Examplessum = ++count (count incremented, added to sum)
sum = count++ (count incremented, added to sum)
count++ (count incremented)-count++ (count incremented then negated)
![Page 113: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/113.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-113Copyright © 2009 Addison-Wesley. All rights reserved. 1-113
Assignment as an Expression
• In C, C++, and Java, the assignment statement produces a result and can be used as operands
• An example: while ((ch = getchar())!= EOF){…}
ch = getchar() is carried out; the result (assigned to ch) is used as a conditional value for the while statement
![Page 114: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/114.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-114Copyright © 2009 Addison-Wesley. All rights reserved. 1-114
List Assignments
• Perl and Ruby support list assignments e.g., ($first, $second, $third) = (20, 30, 40);
![Page 115: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/115.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-115Copyright © 2009 Addison-Wesley. All rights reserved. 1-115
Mixed-Mode Assignment
• Assignment statements can also be mixed-mode
• In Fortran, C, and C++, any numeric type value can be assigned to any numeric type variable
• In Java, only widening assignment coercions are done
• In Ada, there is no assignment coercion
![Page 116: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/116.jpg)
Copyright © 2009 Addison-Wesley. All rights reserved. 1-116Copyright © 2009 Addison-Wesley. All rights reserved. 1-116
Summary
• Expressions• Operator precedence and associativity• Operator overloading• Mixed-type expressions• Various forms of assignment
![Page 117: 9/14/2015Assoc. Prof. Stoyan Bonev1 COS220 Concepts of PLs AUBG, COS dept Lecture 05 Components of Programming Languages, Part II Reference: R.Sebesta,](https://reader030.fdocuments.in/reader030/viewer/2022032804/56649e455503460f94b3a452/html5/thumbnails/117.jpg)
Thank Youfor
Your attention