SlideShare a Scribd company logo
CSC321: Programming Languages 7-1
Programming Languages
Programming Languages
Tucker and Noonan
Tucker and Noonan
Chapter 7: Semantics
7.1 Motivation
7.2 Expression Semantics
7.3 Program State
7.4 Assignment Semantics
7.5 Control Flow Semantics
7.6 Input/Output Semantics
7.7 Exception Handling Semantics
CSC321: Programming Languages 7-2
Motivation
Motivation
• To provide an authoritative definition of
the meaning of all language constructs
for:
1. Programmers
2. Compiler writers
3. Standards developers
• A programming language is complete
only when its syntax, type system, and
semantics are well-defined.
CSC321: Programming Languages 7-3
• Semantics is a precise definition of the meaning of a
syntactically and type-wise correct program.
• Three approaches
– Operational semantics
• The meaning attached by compiling using compiler C and
executing using machine M. Ex: Fortran on IBM 709.
• Direct and straightforward program meaning
– Axiomatic semantics
• Axiomatize the meaning of statements -- Chapter 12
• Exploration of formal properties of programs
– Denotational semantics
• Statements as state transforming functions
• High-level mathematical precision of program meaning
• This chapter uses an informal, operational model.
Semantics
Semantics
CSC321: Programming Languages 7-4
Expression Semantics
Expression Semantics
• Notation – Expression tree
• Meaning
– Mathematics: (a + b) - (c * d)
– Polish prefix notation:
• - + a b * c d
• Preorder traversal
– Polish postfix notation
• a b + c d * -
• Postorder traversal
– Cambridge Polish:
• (- (+ a b) (* c d))
• Operator precedes operands
• Parentheses
CSC321: Programming Languages 7-5
Infix Notation
Infix Notation
• Mathematics meaning
– (a + b) - (c * d)
• Uses associativity and precedence to
disambiguate
– Associativity of Operators
Language + - * / Unary - ** == != < ...
C-like Left Right Left
Ada Left non non non
Fortran Left Right Right Left
– Meaning of a < x < b in C-like
• a < x && x < b ?
• If (a < x) 1 < b else 0 < b
CSC321: Programming Languages 7-6
Precedence of Operators
Precedence of Operators
Operators C-like Ada Fortran
Unary - 7 3 3
** 5 5
* / 6 4 4
+ - 5 3 3
== != 4 2 2
< <= ... 3 2 2
Unary not 7 2 2
Logical and 2 1 1
Logical or 1 1 1
CSC321: Programming Languages 7-7
Short Circuit Evaluation
Short Circuit Evaluation
• a and b evaluated as:
if a then b else false
• a or b evaluated as:
if a then true else b
• Benefits
– Efficiency
– Shorter code
– Clearer code
• Example in C-like
– x < Math.pow(y, 3) || b – bad?
– x<1 && (y*y > 100 || y>x) – good?
CSC321: Programming Languages 7-8
More Example
More Example
1. Node p = head;
while (p != null && p.info != key) p = p.next;
3. boolean found = false;
while (p != null && ! found) {
if (p.info == key) found = true;
else p = p.next;
} // avoiding break
2. while (p != null && ! found) {
if (p.info == key) break;
else p = p.next;
} // using break
CSC321: Programming Languages 7-9
Expression Meaning
Expression Meaning
• Number precision
– data type size
– (a+b)+c == a+(b+c) ?
• Side effect
– A change to any non-local variable or I/O.
– What is the value of:
• i = 2; b = 2; c = 5;
• x = b * i++ + c * i; // 19
• y = c * i + b * i++; // 14
– Consider
• y = x++;
• y = x+1;
CSC321: Programming Languages 7-10
Program State
Program State
• The state of a program is the collection of all active
objects and their current values.
• Two maps:
1. Active objects to specific memory locations
2. Active memory locations to specific values.
• State = memory  environment
• The current statement (portion of an abstract syntax tree)
to be executed in a program is interpreted relative to the
current state.
• The individual steps that occur during a program run can
be viewed as a series of state transformations.
• For simplicity, ignore the memory location
CSC321: Programming Languages 7-11
1 void main ( ) {
2 int n, i, f;
3 n = 3;
4 i = 1;
5 f = 1;
6 while (i < n) {
7 i = i + 1;
8 f = f * i;
9 }
10 }
n i f
undef undef undef
3 undef undef
3 1 undef
3, 3, 3 1, 2, 3 1, 2, 6
3, 3 1, 2 1, 2
3, 3 2, 3 1, 2
3, 3 3, 3 2, 6
3 3 6
Program: compute the
factorial of n
Program State Transformation
Program State Transformation
State Transformation
CSC321: Programming Languages 7-12
Assignment Semantics
Assignment Semantics
• Issues
– Multiple assignment
• Example:
–a = b = c = 0;
– Sets all 3 variables to zero.
– Problems???
– Assignment statement vs. expression
– Copy vs. reference semantics
CSC321: Programming Languages 7-13
Assignment Statement vs.
Assignment Statement vs.
Expression
Expression
• In most languages, assignment is a statement;
cannot appear in an expression.
• In C-like languages, assignment is an
expression.
– Example: if (a = 0) ... // an error
– while (*p++ = *q++) ; // strcpy
– while (ch = getc(fp)) ... // ???
– while (p = p->next) ... // ???
CSC321: Programming Languages 7-14
Copy vs. Reference
Copy vs. Reference
Semantics
Semantics
• Copy: a = b;
– a, b have same value.
– Changes to either have no effect on other.
– Used in imperative languages.
• Reference
– a, b point to the same object.
– A change in object state affects both
– Used by many object-oriented languages.
CSC321: Programming Languages 7-15
Control Flow Semantics
Control Flow Semantics
• Turing complete
– a programming language is Turing Complete
if its program are capable of computing any
computable function
• To be complete, an imperative language
needs:
– Statement sequencing
– Conditional statement
– Looping statement
CSC321: Programming Languages 7-16
Sequence
Sequence
• Format:
s1 s2
• Semantics: in the absence of a branch:
– First execute s1
– Then execute s2
– Output state of s1 is the input state of s2
CSC321: Programming Languages 7-17
Conditional
Conditional
• Format
IfStatement  if ( Expression ) Statement [ else
Statement ]
• Semantics
If the value of Expression is true, the meaning is the
state resulting from evaluating Statement1 in the
current state. Otherwise the meaning is the state
resulting from evaluating Statement2 in the current
state
• Example:
if (a > b)
z = a;
else
z = b;
CSC321: Programming Languages 7-18
Various Conditional Statements
Various Conditional Statements
• if <E> then <S> : if <E> is true then execute <S>
• if <E> then <S> else <S2>: if <E> is true then execute
<S>, otherwise execute <S2>
• Dangling-else: Ambiguity. Ways to avoid ambiguity
– Syntax: the else-clause associated with the closest then – e.g. C,
Java
if <E1> then if <E2> then <S1> else <S2>
– Use compound brackets
• A: if <E1> then { if <E2> then <S1> } else <S2>
• B: if <E1> then { if <E2> then <S1> else <S2> }
– Avoid use of nesting in then parts
• A: if !<E1> then <S2> else if <E2> then <S1>
• B: if <E1> && <E2> then <S1> else if <E1> then <S2>
CSC321: Programming Languages 7-19
Multiple Branches
Multiple Branches
• Multiple branches – case (selection): use the value of an expression to select one of
several substatements for execution
• Pascal, Modula-2: case x of
<value1>: <statements1>
<value2>: <statements2>
…
[else: <statements>]
end
• Ada: case x is
when <value1> => <statements1>;
when <value2> => <statements2>;
…
[others => <statements>];
• C/C++, Java : Notice: the use of break
switch (x) {
case <value1>: <statements1>;
[break;]
case <value2>: <statements2>;
[break;]
…
[default: <statements>];
}
CSC321: Programming Languages 7-20
Multiple Branches
Multiple Branches
• Points:
– Cases can appear in any order, but else/others/default must be
the last one
– The case value of x is discrete, such as 1, 10, 6, 9
– The case values must be distinct
– Some languages allow ranges of case values, such as in
Modula-2, ‘0’..’9’ represents the value either ‘0’, or ‘1’, …, or ‘9’
of x
• Case can be replaced with if—then—else statements
if x == <value1> then <statements1>;
else if x == <value2> then <statements2>;
…
else: <statements>;
CSC321: Programming Languages 7-21
Loops
Loops
• Format
WhileStatement  while ( Expression )
Statement
• Semantics
– The expression is evaluated.
– If it is true, first the statement is executed,
and then the loop is executed
again.
– Otherwise the loop terminates.
CSC321: Programming Languages 7-22
General Loop Structure
General Loop Structure
• General structure:
Do S1
If C exit
Otherwise Do S2
Repeat
S1
C
S2
CSC321: Programming Languages 7-23
Loop Implementation
Loop Implementation
Ada:
while (!C) loop
S2
end loop
C/C++, Java:
while (!C) {
S2
}
Pascal:
while (!C) do
begin
S2
end
Perl:
unless (C) {
S2
}
Ada:
S1
while (!C) loop
S1
end loop
C/C++, Java:
do
S1
while (C)
Pascal:
repeat
S1
until C
Perl:
S1
while (!C) {
S1
}
Ada:
loop
S1
exit when C
S2
end loop
C/C++, Java:
while (t) {
S1
if (C) break;
S2
}
Pascal:
S1;
while (C) do
begin
S2
S1
end
General
loop
While
loop
Repeat
loop
CSC321: Programming Languages 7-24
For Loop Implementation
For Loop Implementation
• For statement: definite iteration – for each element do
• General form:
– for (<var> = <initial>; [<step>]; <termination>) do statements
– <var> varies from the initial value to the termination, each loop varies
with a stepwise
– Step can be omitted, default value is 1
– Stepwise can be going either up from small initial to large termination, or
down from large initial to small termination
• Pascal:
– for x := low to high do S
– for x:= high downto low do S
• Fortran/Algol:
– for x:= start step increment until end do S
– increment may be negative to implement “going down”
• Ada:
– for x in low..high loop S end loop;
– for x in reverse low..high loop S end loop
• C/C++/Java:
– for (e1; e2; e3) S
CSC321: Programming Languages 7-25
For Loop Implementation
For Loop Implementation
• Some languages allow the stepwise to be real or
other data types
– Fortran/Algol: allow real steps such as 0.1, 0.2
– Pascal/Modula-2: allow step type of enumeration
• for x in d do S; where d is a type of enumeration
– Perl: allows enumeration in a list
• foreach $x (@list) S;
– Java: allows enumeration in a collection
• Syntax
foreach (Type variable : collection) statement
• Example
String names[];
……
foreach (String name : names)
do something with name;
CSC321: Programming Languages 7-26
Jump Statements
Jump Statements
• Goto: jump to a specific statement (labeled by a label).
Recall jmp, jp in assembly languages
– makes the program difficult to trace, hard to prove
– violates the structured programming style
– destroy the system if goto the kernel of the OS
• Break (C/C++, Java): limited use of Goto as an exit of a
loop or selection
– Used inside a loop: exit the loop
– Used inside a selection (case): exit the case
– Exit in Ada and Modula-2
• Continue(C/C++, Java, Fortran): limited use of Goto
– Begin the next loop, ignore the statements after it in the body
CSC321: Programming Languages 7-27
7.6 Input/Output Semantics
7.6 Input/Output Semantics
• Binding: open, close
• Access: sequential vs. random
• Stream vs. fixed length records
• Character vs. binary
• Format
• I/O Error handling
CSC321: Programming Languages 7-28
Standard Files
Standard Files
• Unix: stdin, stdout, stderr
• C: stdin, stdout, stderr
• C++: cin, cout, cerr
• Java: System.in, System.out, System.err
CSC321: Programming Languages 7-29
Input/Output Streams
Input/Output Streams
• Fortran
integer :: i, a(8)
write(8,*) “Enter 8 integers: “
read(*,*) a
write(*,*) a
• Java
– file, pipe, memory, url
– filter
– reader, writer
CSC321: Programming Languages 7-30
Formats
Formats
• C
– Codes: d, e, f, c, s (decimal. float, float, char,
string)
– Specifier: % opt-width code
– Ex: %s %5d %20s %8.2f
• Fortran
– Codes: i, f, a (integer, float, string)
– Specifier: op-repeat code width
– Ex: 8i4, f8.2, a20
CSC321: Programming Languages 7-31
Exception Handling Semantics
Exception Handling Semantics
• Exception
– an error condition occurring from an operation
that cannot be resolved by the operation itself
• Purposes
– Simplify programming
– Make applications more robust: continue to
operate under all concevable error situations
CSC321: Programming Languages 7-32
Exception Handling Basic Structure
Exception Handling Basic Structure
• Exception events: abnormal
– event that the system can not
deal with so that leave to the
programmer, such as
• division by zero,
• get value from a null pointer;
• read a file that doesn’t exist
• Exception handlers
– Deal with the exception events,
such as
• output error
• use default value
• stop the execution
<exceptionevent>
<exception handler>
Automatically
jump
CSC321: Programming Languages 7-33
Exception Handling ProgramStructure
Exception Handling ProgramStructure
Ada:
begin
…
exception
when <exception1> =>
exception1-handler;
when <exception2> =>
exception2-handler;
….
end
C++/Java:
try {
….
} catch
(<exception1>) {
exception1-handler;
} catch
(<exception2>) {
exception2-handler;
}
…
CSC321: Programming Languages 7-34
Raise/Throw/Catch Exceptions
Raise/Throw/Catch Exceptions
• Raise/throw exception
– Implicitly throw: built-in method/function throw, e.g. division, file access
– Explicitly throw:
• throw <exception> --- C++/Java
• raise <exception> --- Ada
• Catch exception
– If there exists a catch clause to catch a specific exception, the
exception is handled by the corresponding handler. If no handler
exists, the exception is raised/thrown to the caller. To implement this,
the throws must be specified in the method prototype (signature). E.g.
in Java
public void method_sample(…) throws <exception> {
…
throw <exception>;
…
}
CSC321: Programming Languages 7-35
Throwing an Exception
Figure 7.13
CSC321: Programming Languages 7-36
Exception Post-process
Exception Post-process
• Termination model
– C++/Java, Ada: only enter the exception
handler and execute the finally clause, if any.
• Resumption model
– Eiffel: can use the retry statement to re-
execute the procedure/function in which the
exception occurred
CSC321: Programming Languages 7-37
Exception Handling
Figure 7.9
CSC321: Programming Languages 7-38
Creating a New Exception Class
Declare Exceptions
Declare Exceptions
• Predefined exceptions (built-in exception)
• User-defined exception: e.g. in Java
Public class MyException extends RuntimeException {
……
}
CSC321: Programming Languages 7-39
Java Exception Type Hierarchy
Figure 7.10
CSC321: Programming Languages 7-40
Missing Argument Exception
CSC321: Programming Languages 7-41
Invalid Input Exception
Figure 7.12
CSC321: Programming Languages 7-42
AssertException Class
CSC321: Programming Languages 7-43
Assert Class
Figure 7.15
CSC321: Programming Languages 7-44
Using Asserts

More Related Content

PDF
07 control+structures
PDF
1. Introduction to Programming concepts LICSTA.pdf
PPTX
Looping and switch cases
PPT
8 statement level
PPTX
C Language Presentation.pptx
PPT
PDF
UNIT 2 PPT.pdf
DOCX
Example PseudocodeProblem Given a sorted array a with n elements .docx
07 control+structures
1. Introduction to Programming concepts LICSTA.pdf
Looping and switch cases
8 statement level
C Language Presentation.pptx
UNIT 2 PPT.pdf
Example PseudocodeProblem Given a sorted array a with n elements .docx

Similar to Chapter_7_tucker_noonan_programmng_lang.ppt (20)

PPT
asdasdqwdsadasdsadsadasdqwrrweffscxv wsfrt
PPTX
C for Engineers
PPTX
Dr Mrs A A Miraje C Programming PPT.pptx
PPT
02-chapter-1.ppt programming languages 10
PPT
brief intro for Programming Languages 02-chapter-1
PPTX
Ch05-converted.pptx
PPT
02-chapter-1.ppt
PPTX
C programming slide day 01 uploadd by md abdullah al shakil
PPT
1_Introduction to C programming - Copy.ppt
DOCX
Example PseudocodeProblem Given a sorted array a with n elements .docx
PPT
Unit 1 c - all topics
PDF
PPTX
Lecture 03 Programming C for Beginners 001
PDF
3.Loops_conditionals.pdf
PPTX
chapter 6.pptx
PPTX
Lecture 1 Introduction.pptx hfjsh huwhf uwej wiuehfi w
PPTX
What is c
PPT
Control Statements, Array, Pointer, Structures
PPT
Control flow in c
PPT
conditional.ppt
asdasdqwdsadasdsadsadasdqwrrweffscxv wsfrt
C for Engineers
Dr Mrs A A Miraje C Programming PPT.pptx
02-chapter-1.ppt programming languages 10
brief intro for Programming Languages 02-chapter-1
Ch05-converted.pptx
02-chapter-1.ppt
C programming slide day 01 uploadd by md abdullah al shakil
1_Introduction to C programming - Copy.ppt
Example PseudocodeProblem Given a sorted array a with n elements .docx
Unit 1 c - all topics
Lecture 03 Programming C for Beginners 001
3.Loops_conditionals.pdf
chapter 6.pptx
Lecture 1 Introduction.pptx hfjsh huwhf uwej wiuehfi w
What is c
Control Statements, Array, Pointer, Structures
Control flow in c
conditional.ppt
Ad

Recently uploaded (20)

DOCX
How to Use SharePoint as an ISO-Compliant Document Management System
PPTX
AMADEUS TRAVEL AGENT SOFTWARE | AMADEUS TICKETING SYSTEM
PPTX
Advanced SystemCare Ultimate Crack + Portable (2025)
PDF
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Designing Intelligence for the Shop Floor.pdf
PPTX
GSA Content Generator Crack (2025 Latest)
PPTX
Oracle Fusion HCM Cloud Demo for Beginners
PDF
Visual explanation of Dijkstra's Algorithm using Python
PDF
DNT Brochure 2025 – ISV Solutions @ D365
PPTX
Trending Python Topics for Data Visualization in 2025
PDF
AI Guide for Business Growth - Arna Softech
PPTX
Tech Workshop Escape Room Tech Workshop
PDF
Topaz Photo AI Crack New Download (Latest 2025)
PPTX
Introduction to Windows Operating System
PPTX
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
PDF
How Tridens DevSecOps Ensures Compliance, Security, and Agility
PPTX
Monitoring Stack: Grafana, Loki & Promtail
PDF
Top 10 Software Development Trends to Watch in 2025 🚀.pdf
PDF
AI-Powered Threat Modeling: The Future of Cybersecurity by Arun Kumar Elengov...
How to Use SharePoint as an ISO-Compliant Document Management System
AMADEUS TRAVEL AGENT SOFTWARE | AMADEUS TICKETING SYSTEM
Advanced SystemCare Ultimate Crack + Portable (2025)
EaseUS PDF Editor Pro 6.2.0.2 Crack with License Key 2025
Computer Software and OS of computer science of grade 11.pptx
Designing Intelligence for the Shop Floor.pdf
GSA Content Generator Crack (2025 Latest)
Oracle Fusion HCM Cloud Demo for Beginners
Visual explanation of Dijkstra's Algorithm using Python
DNT Brochure 2025 – ISV Solutions @ D365
Trending Python Topics for Data Visualization in 2025
AI Guide for Business Growth - Arna Softech
Tech Workshop Escape Room Tech Workshop
Topaz Photo AI Crack New Download (Latest 2025)
Introduction to Windows Operating System
WiFi Honeypot Detecscfddssdffsedfseztor.pptx
How Tridens DevSecOps Ensures Compliance, Security, and Agility
Monitoring Stack: Grafana, Loki & Promtail
Top 10 Software Development Trends to Watch in 2025 🚀.pdf
AI-Powered Threat Modeling: The Future of Cybersecurity by Arun Kumar Elengov...
Ad

Chapter_7_tucker_noonan_programmng_lang.ppt

  • 1. CSC321: Programming Languages 7-1 Programming Languages Programming Languages Tucker and Noonan Tucker and Noonan Chapter 7: Semantics 7.1 Motivation 7.2 Expression Semantics 7.3 Program State 7.4 Assignment Semantics 7.5 Control Flow Semantics 7.6 Input/Output Semantics 7.7 Exception Handling Semantics
  • 2. CSC321: Programming Languages 7-2 Motivation Motivation • To provide an authoritative definition of the meaning of all language constructs for: 1. Programmers 2. Compiler writers 3. Standards developers • A programming language is complete only when its syntax, type system, and semantics are well-defined.
  • 3. CSC321: Programming Languages 7-3 • Semantics is a precise definition of the meaning of a syntactically and type-wise correct program. • Three approaches – Operational semantics • The meaning attached by compiling using compiler C and executing using machine M. Ex: Fortran on IBM 709. • Direct and straightforward program meaning – Axiomatic semantics • Axiomatize the meaning of statements -- Chapter 12 • Exploration of formal properties of programs – Denotational semantics • Statements as state transforming functions • High-level mathematical precision of program meaning • This chapter uses an informal, operational model. Semantics Semantics
  • 4. CSC321: Programming Languages 7-4 Expression Semantics Expression Semantics • Notation – Expression tree • Meaning – Mathematics: (a + b) - (c * d) – Polish prefix notation: • - + a b * c d • Preorder traversal – Polish postfix notation • a b + c d * - • Postorder traversal – Cambridge Polish: • (- (+ a b) (* c d)) • Operator precedes operands • Parentheses
  • 5. CSC321: Programming Languages 7-5 Infix Notation Infix Notation • Mathematics meaning – (a + b) - (c * d) • Uses associativity and precedence to disambiguate – Associativity of Operators Language + - * / Unary - ** == != < ... C-like Left Right Left Ada Left non non non Fortran Left Right Right Left – Meaning of a < x < b in C-like • a < x && x < b ? • If (a < x) 1 < b else 0 < b
  • 6. CSC321: Programming Languages 7-6 Precedence of Operators Precedence of Operators Operators C-like Ada Fortran Unary - 7 3 3 ** 5 5 * / 6 4 4 + - 5 3 3 == != 4 2 2 < <= ... 3 2 2 Unary not 7 2 2 Logical and 2 1 1 Logical or 1 1 1
  • 7. CSC321: Programming Languages 7-7 Short Circuit Evaluation Short Circuit Evaluation • a and b evaluated as: if a then b else false • a or b evaluated as: if a then true else b • Benefits – Efficiency – Shorter code – Clearer code • Example in C-like – x < Math.pow(y, 3) || b – bad? – x<1 && (y*y > 100 || y>x) – good?
  • 8. CSC321: Programming Languages 7-8 More Example More Example 1. Node p = head; while (p != null && p.info != key) p = p.next; 3. boolean found = false; while (p != null && ! found) { if (p.info == key) found = true; else p = p.next; } // avoiding break 2. while (p != null && ! found) { if (p.info == key) break; else p = p.next; } // using break
  • 9. CSC321: Programming Languages 7-9 Expression Meaning Expression Meaning • Number precision – data type size – (a+b)+c == a+(b+c) ? • Side effect – A change to any non-local variable or I/O. – What is the value of: • i = 2; b = 2; c = 5; • x = b * i++ + c * i; // 19 • y = c * i + b * i++; // 14 – Consider • y = x++; • y = x+1;
  • 10. CSC321: Programming Languages 7-10 Program State Program State • The state of a program is the collection of all active objects and their current values. • Two maps: 1. Active objects to specific memory locations 2. Active memory locations to specific values. • State = memory  environment • The current statement (portion of an abstract syntax tree) to be executed in a program is interpreted relative to the current state. • The individual steps that occur during a program run can be viewed as a series of state transformations. • For simplicity, ignore the memory location
  • 11. CSC321: Programming Languages 7-11 1 void main ( ) { 2 int n, i, f; 3 n = 3; 4 i = 1; 5 f = 1; 6 while (i < n) { 7 i = i + 1; 8 f = f * i; 9 } 10 } n i f undef undef undef 3 undef undef 3 1 undef 3, 3, 3 1, 2, 3 1, 2, 6 3, 3 1, 2 1, 2 3, 3 2, 3 1, 2 3, 3 3, 3 2, 6 3 3 6 Program: compute the factorial of n Program State Transformation Program State Transformation State Transformation
  • 12. CSC321: Programming Languages 7-12 Assignment Semantics Assignment Semantics • Issues – Multiple assignment • Example: –a = b = c = 0; – Sets all 3 variables to zero. – Problems??? – Assignment statement vs. expression – Copy vs. reference semantics
  • 13. CSC321: Programming Languages 7-13 Assignment Statement vs. Assignment Statement vs. Expression Expression • In most languages, assignment is a statement; cannot appear in an expression. • In C-like languages, assignment is an expression. – Example: if (a = 0) ... // an error – while (*p++ = *q++) ; // strcpy – while (ch = getc(fp)) ... // ??? – while (p = p->next) ... // ???
  • 14. CSC321: Programming Languages 7-14 Copy vs. Reference Copy vs. Reference Semantics Semantics • Copy: a = b; – a, b have same value. – Changes to either have no effect on other. – Used in imperative languages. • Reference – a, b point to the same object. – A change in object state affects both – Used by many object-oriented languages.
  • 15. CSC321: Programming Languages 7-15 Control Flow Semantics Control Flow Semantics • Turing complete – a programming language is Turing Complete if its program are capable of computing any computable function • To be complete, an imperative language needs: – Statement sequencing – Conditional statement – Looping statement
  • 16. CSC321: Programming Languages 7-16 Sequence Sequence • Format: s1 s2 • Semantics: in the absence of a branch: – First execute s1 – Then execute s2 – Output state of s1 is the input state of s2
  • 17. CSC321: Programming Languages 7-17 Conditional Conditional • Format IfStatement  if ( Expression ) Statement [ else Statement ] • Semantics If the value of Expression is true, the meaning is the state resulting from evaluating Statement1 in the current state. Otherwise the meaning is the state resulting from evaluating Statement2 in the current state • Example: if (a > b) z = a; else z = b;
  • 18. CSC321: Programming Languages 7-18 Various Conditional Statements Various Conditional Statements • if <E> then <S> : if <E> is true then execute <S> • if <E> then <S> else <S2>: if <E> is true then execute <S>, otherwise execute <S2> • Dangling-else: Ambiguity. Ways to avoid ambiguity – Syntax: the else-clause associated with the closest then – e.g. C, Java if <E1> then if <E2> then <S1> else <S2> – Use compound brackets • A: if <E1> then { if <E2> then <S1> } else <S2> • B: if <E1> then { if <E2> then <S1> else <S2> } – Avoid use of nesting in then parts • A: if !<E1> then <S2> else if <E2> then <S1> • B: if <E1> && <E2> then <S1> else if <E1> then <S2>
  • 19. CSC321: Programming Languages 7-19 Multiple Branches Multiple Branches • Multiple branches – case (selection): use the value of an expression to select one of several substatements for execution • Pascal, Modula-2: case x of <value1>: <statements1> <value2>: <statements2> … [else: <statements>] end • Ada: case x is when <value1> => <statements1>; when <value2> => <statements2>; … [others => <statements>]; • C/C++, Java : Notice: the use of break switch (x) { case <value1>: <statements1>; [break;] case <value2>: <statements2>; [break;] … [default: <statements>]; }
  • 20. CSC321: Programming Languages 7-20 Multiple Branches Multiple Branches • Points: – Cases can appear in any order, but else/others/default must be the last one – The case value of x is discrete, such as 1, 10, 6, 9 – The case values must be distinct – Some languages allow ranges of case values, such as in Modula-2, ‘0’..’9’ represents the value either ‘0’, or ‘1’, …, or ‘9’ of x • Case can be replaced with if—then—else statements if x == <value1> then <statements1>; else if x == <value2> then <statements2>; … else: <statements>;
  • 21. CSC321: Programming Languages 7-21 Loops Loops • Format WhileStatement  while ( Expression ) Statement • Semantics – The expression is evaluated. – If it is true, first the statement is executed, and then the loop is executed again. – Otherwise the loop terminates.
  • 22. CSC321: Programming Languages 7-22 General Loop Structure General Loop Structure • General structure: Do S1 If C exit Otherwise Do S2 Repeat S1 C S2
  • 23. CSC321: Programming Languages 7-23 Loop Implementation Loop Implementation Ada: while (!C) loop S2 end loop C/C++, Java: while (!C) { S2 } Pascal: while (!C) do begin S2 end Perl: unless (C) { S2 } Ada: S1 while (!C) loop S1 end loop C/C++, Java: do S1 while (C) Pascal: repeat S1 until C Perl: S1 while (!C) { S1 } Ada: loop S1 exit when C S2 end loop C/C++, Java: while (t) { S1 if (C) break; S2 } Pascal: S1; while (C) do begin S2 S1 end General loop While loop Repeat loop
  • 24. CSC321: Programming Languages 7-24 For Loop Implementation For Loop Implementation • For statement: definite iteration – for each element do • General form: – for (<var> = <initial>; [<step>]; <termination>) do statements – <var> varies from the initial value to the termination, each loop varies with a stepwise – Step can be omitted, default value is 1 – Stepwise can be going either up from small initial to large termination, or down from large initial to small termination • Pascal: – for x := low to high do S – for x:= high downto low do S • Fortran/Algol: – for x:= start step increment until end do S – increment may be negative to implement “going down” • Ada: – for x in low..high loop S end loop; – for x in reverse low..high loop S end loop • C/C++/Java: – for (e1; e2; e3) S
  • 25. CSC321: Programming Languages 7-25 For Loop Implementation For Loop Implementation • Some languages allow the stepwise to be real or other data types – Fortran/Algol: allow real steps such as 0.1, 0.2 – Pascal/Modula-2: allow step type of enumeration • for x in d do S; where d is a type of enumeration – Perl: allows enumeration in a list • foreach $x (@list) S; – Java: allows enumeration in a collection • Syntax foreach (Type variable : collection) statement • Example String names[]; …… foreach (String name : names) do something with name;
  • 26. CSC321: Programming Languages 7-26 Jump Statements Jump Statements • Goto: jump to a specific statement (labeled by a label). Recall jmp, jp in assembly languages – makes the program difficult to trace, hard to prove – violates the structured programming style – destroy the system if goto the kernel of the OS • Break (C/C++, Java): limited use of Goto as an exit of a loop or selection – Used inside a loop: exit the loop – Used inside a selection (case): exit the case – Exit in Ada and Modula-2 • Continue(C/C++, Java, Fortran): limited use of Goto – Begin the next loop, ignore the statements after it in the body
  • 27. CSC321: Programming Languages 7-27 7.6 Input/Output Semantics 7.6 Input/Output Semantics • Binding: open, close • Access: sequential vs. random • Stream vs. fixed length records • Character vs. binary • Format • I/O Error handling
  • 28. CSC321: Programming Languages 7-28 Standard Files Standard Files • Unix: stdin, stdout, stderr • C: stdin, stdout, stderr • C++: cin, cout, cerr • Java: System.in, System.out, System.err
  • 29. CSC321: Programming Languages 7-29 Input/Output Streams Input/Output Streams • Fortran integer :: i, a(8) write(8,*) “Enter 8 integers: “ read(*,*) a write(*,*) a • Java – file, pipe, memory, url – filter – reader, writer
  • 30. CSC321: Programming Languages 7-30 Formats Formats • C – Codes: d, e, f, c, s (decimal. float, float, char, string) – Specifier: % opt-width code – Ex: %s %5d %20s %8.2f • Fortran – Codes: i, f, a (integer, float, string) – Specifier: op-repeat code width – Ex: 8i4, f8.2, a20
  • 31. CSC321: Programming Languages 7-31 Exception Handling Semantics Exception Handling Semantics • Exception – an error condition occurring from an operation that cannot be resolved by the operation itself • Purposes – Simplify programming – Make applications more robust: continue to operate under all concevable error situations
  • 32. CSC321: Programming Languages 7-32 Exception Handling Basic Structure Exception Handling Basic Structure • Exception events: abnormal – event that the system can not deal with so that leave to the programmer, such as • division by zero, • get value from a null pointer; • read a file that doesn’t exist • Exception handlers – Deal with the exception events, such as • output error • use default value • stop the execution <exceptionevent> <exception handler> Automatically jump
  • 33. CSC321: Programming Languages 7-33 Exception Handling ProgramStructure Exception Handling ProgramStructure Ada: begin … exception when <exception1> => exception1-handler; when <exception2> => exception2-handler; …. end C++/Java: try { …. } catch (<exception1>) { exception1-handler; } catch (<exception2>) { exception2-handler; } …
  • 34. CSC321: Programming Languages 7-34 Raise/Throw/Catch Exceptions Raise/Throw/Catch Exceptions • Raise/throw exception – Implicitly throw: built-in method/function throw, e.g. division, file access – Explicitly throw: • throw <exception> --- C++/Java • raise <exception> --- Ada • Catch exception – If there exists a catch clause to catch a specific exception, the exception is handled by the corresponding handler. If no handler exists, the exception is raised/thrown to the caller. To implement this, the throws must be specified in the method prototype (signature). E.g. in Java public void method_sample(…) throws <exception> { … throw <exception>; … }
  • 35. CSC321: Programming Languages 7-35 Throwing an Exception Figure 7.13
  • 36. CSC321: Programming Languages 7-36 Exception Post-process Exception Post-process • Termination model – C++/Java, Ada: only enter the exception handler and execute the finally clause, if any. • Resumption model – Eiffel: can use the retry statement to re- execute the procedure/function in which the exception occurred
  • 37. CSC321: Programming Languages 7-37 Exception Handling Figure 7.9
  • 38. CSC321: Programming Languages 7-38 Creating a New Exception Class Declare Exceptions Declare Exceptions • Predefined exceptions (built-in exception) • User-defined exception: e.g. in Java Public class MyException extends RuntimeException { …… }
  • 39. CSC321: Programming Languages 7-39 Java Exception Type Hierarchy Figure 7.10
  • 40. CSC321: Programming Languages 7-40 Missing Argument Exception
  • 41. CSC321: Programming Languages 7-41 Invalid Input Exception Figure 7.12
  • 42. CSC321: Programming Languages 7-42 AssertException Class
  • 43. CSC321: Programming Languages 7-43 Assert Class Figure 7.15
  • 44. CSC321: Programming Languages 7-44 Using Asserts