This presentation is the property of its rightful owner.
1 / 19

# CS 330 Organization of Programming Languages PowerPoint PPT Presentation

CS 330 Organization of Programming Languages . Soundararajan Ezekiel Department of Computer Science Ohio Northern University ADA, Ohio 45810 e-mail: s-ezekiel@onu.edu http://www.onu.edu/user/FS/sezekiel. FORTRAN CODE WALK PROBLEMS.

CS 330 Organization of Programming Languages

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

## CS 330 Organization of Programming Languages

Soundararajan Ezekiel

Department of Computer Science

Ohio Northern University

e-mail: s-ezekiel@onu.edu

http://www.onu.edu/user/FS/sezekiel

### FORTRAN CODE WALK PROBLEMS

• 1. Wrtie a program to read two n-dimensional vectors and then evaluate

• the norm of each vector

• unit vectors having the same direction as the vectors

• the sum, difference and dot product

• the cosine of the angle between the vectors calculated using cos0 = a.b /(|a||b|)

• 2. Write a program that reads a list of numbers , count them, and the calculate their mean, variance, and standard deviation. Print how many numbers there are and their mean, variance, and SD

### Expressions and Assignment Statements

• Introduction

• Arithmetic expressions

• Type Conversions

• Relational and Boolean Expressions

• Short-Circuit Evaluation

• Assignment Statements

• Mixed-Mode Assignments

### Introduction

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

• Programmers should understand both syntax and semantics of expression

• To understand evaluation -- understand the order of operator and operand evaluation

• An assignment statement can simply cause a value to be copied from one memory cell to another-- in many case it include expressions with operators, which cause values to be copied to the processor and to be operated on, and the result to be copied back to memory

• simple assignment statements specify an expression to be evaluated and a target location in which to place the result of the expression evaluation

• we will see number of variation on this basic form

### 2. Arithmetic Expression

• Most of the characteristic of Arithmetic expression were inherited from Math

• Consists of operators, operands, parentheses, and function calls

• operator can be

• unary--- single operands

• binary -- double operands

• C, C++, Java, - ternary-- three operands

• Most cases-- binary operators are infix-- between their operands

• In Perl-- some of them are prefix-- precede their operands

• The purpose is to specify an arithmetic computation

• Implementation of such computation must cause two action

• fetching the operands-- usually from memory

• executing arithmetic operations on those operands

• Design issues

• 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 operands evaluation side effect

• 6. What mode mixing is allowed in expression

### Precedence

• Consider the following expression -- a+b*c

• suppose a=3, b=4, c=5---- evaluate left to right=> 35, right to left=> 23

• FORTRAN:- **,* /+-

• Pascal: *,/,div, mod+ -

• Ada: **, abs*/ unary +/binary +-

• C: postfix ++, --prefix ++.-- , unary +-,*/&binary +-

• APL is odd among languages because it has single level of precedence

### Associativity

• consider the following expression a-b+c-d

• here + - are the same level of precedence-- this case which operator is evaluated first is answered by the associativity rule of the language

• Fortran:- left to right ( exponential right to left A**B**C )

• Ada: exponential is nonassociative-- A**B**C is illegal () should be used that is (A**B)**C or A** (B**C)

• FORTRAN and Ada have the exp operator

Language Associativity Rule

FORTRAN Left: */+-

Right: **

Pascal Left: all

C Left: postfix++, postfix--, */%binary+ binary-

Right: prefix++ prefix--, unary + unary-

C++ Left: */%binary+ binary-

Right: ++, --, unary -, unary +

Nonassociativity **

in APL: AxB+C (x means multiplication) A=3, B=4, C=5 then 27

How: associative right to left-- addition first then multiplication

### Parentheses

• programmers can alter the precedence and associativity rules by placing () in expression --- (A+B)*C

• programmer would specify the desired order of evaluation with parentheses

• the disadvantage of this scheme is that it makes writing expression more tedious and it also seriously compromises the readability of the code

### Conditional expression

• we will look at the the ternary operator ?: which is part of C, C++ Java

• this operator is used to form conditional expression

• sometimes if then else statements are used to perform a conditional expression assignment

• example

• if (count = = 0)

• average =0;

• else

• average= sum/count;

• In C, C++ and Java this can be specified more conveniently in an assignment statement using condition expression

• expression_1 ? Expression_2 :expression_3

• expression_1 is Boolean expression--- if that is true do expression_2 otherwise expression_3

• average= (count = = 0)? 0 : sum/count;

### Operand evaluation order

• A less commonly discussed design characteristics of expression is the order of evaluation of operands

• Side Effects:- A side effect of a function called a functional side effect, occurs when the function changes either of its parameters or global variable ( variable declared outside of the function)

### Example:

• consider the expression a+fun(a)

• if fun does not have the side effect of changing a, the order of evaluation is two operands a fun(a) has no effect on value of the expression

• if fun changes the value of a say divide by 2 and change its parameter to have the value 20 then it matters

• a=10;

• b=a+fun(a)

• two answers--- 15 from left to right and 25 from right to left

### C example

• the following c code will the same problem like before

• int a=5;

• int fun1(){

• a=17;

• return 3;

• } /* of fun1*/

• void fun2(){

• a=a+fun1();

• } /* of fun2*/

• void main(){

• fun2();

• }/* of main */

The value computed for a in fun2

depends on the order of evaluation

of the operands in the expression

a+fun1()

the value will be 8 or 20

### Solution

• 1. The language designer could disallow functional side effect

• 2. Avoid the problem by stating in the language definition that operands in expressions are to be evaluated in a particular order and demand that implementors guarantee that order

• Arithmetic operators are often used for more than one purpose

• example:- + for addition In Java it is used for string catenation