Transcript Type
CHAPTER THREE
Type Systems
and Semantics
Programming Languages – Principles and Paradigms
by Allen Tucker, Robert Noonan
Type Systems :
A Type is a well-defined set of values and
operations.
In C - Int, float, char.
In FORTRAN – INTEGER, REAL, COMPLEX.
A Type System associates types with variables
and other objects defined in a program.
A Type Error occurs when an operation is
attempted on a value for which it is not defined
A Strongly Typed language allows all type errors
to be detected before the offending statement
can be executed.
Static Typing :
A Statically Typed language associates a single
type with a variable for the entire existence of
that variable.
Variable types are determined at compile time.
This means that type errors can also be
checked at compile time.
Run time checking can also be reduced since
the need to coerce value types can be detected
at compile time.
Examples – C, C++, Java.
Dynamic Typing :
A Dynamically Typed language allows the a
variable’s type to change during program
execution.
This can be very convenient but can make
debugging more difficult.
There can be performance penalties (why?)
Examples – Lisp, Scheme, Perl.
Formalizing Typing :
BNF is not capable of defining type checking
requirements for languages.
Can’t ensure all variables have unique names.
Can’t express the need to declare all variables prior
to use.
A program is Type-safe if it is free of typing
errors.
A Type Map is used to formally define the rules
for writing type-safe programs.
Contains pairs of declared variables and their types.
Analogous to a symbol table.
Formalizing Typing :
Programs written in strongly typed languages
are type safe.
If all the programs that can be written in a
language are type safe then the language is
strongly typed.
Dynamically typed languages are also type safe
as long as they can always coerce values at
runtime (otherwise?)
Programs written in strongly typed languages
are defined as having two parts:
A declarations section.
A body section.
Type Checking in jay :
Each declared Variable must have a unique
Identifier.
Each Variable’s type must be either int or
boolean.
Each Variable referenced within any Expression
in a program must have been declared.
For every Assignment statement the type of the
target variable must agree with the type of the
source expression.
For every Conditional and Loop the expression
type must be boolean.
Type Checking in jay :
Expression result types are determined as follows:
If the Expression is a Variable or Value then the result
is of the same type as the Variable or Value.
If the Expression’s Operator is arithmetic (+, -, *, /)
then…
All terms must be of type int.
The result is of type int.
If the Operator is relational (<, <=, >, >=, ==, !=) then…
All terms must be of type int.
The result is of type boolean.
If the Operator is boolean (&&, ||, !) then…
All terms must be of type boolean.
The result is of type boolean.
A C/C++ Factorial Function
Figure 3.2
Next time…
More On
Semantics
Programming Paradigms:
Imperative Programming.
Programs are a series of steps with input and output.
Traditional stuff like C, Fortran, and Cobol.
Object Oriented Programming (OOP).
Programs consist of objects passing messages.
Smalltalk, C++, and Java.
Functional Programming.
Programs are collections of functions.
Lisp, Scheme, Haskell, and ML.
Programming Paradigms:
Logic (Declarative) Programming.
Programs are collections of logical declarations.
Prolog and expert systems.
Event-driven Programming.
Programs are loops responding to events.
Visual Basic, Java, but can be almost any language.
Concurrent Programming.
Programs consist of cooperating processes.
High Performance Fortran (HPF), Linda, and SR.
Choose One!