Basic Concepts of Programming
Syntax Rules
• Program specify operations to be performed by the CPU
• The specification has to be precise and unambiguous
• PL specifies elaborate syntactic rules for construction of
programs
• Every PL comes up with a manual describing these rules
• Any violation is termed syntax error and flagged by the
compiler
• So one main function of compiler is to detect errors in your
programs
• When no error, it produces the executable or object code
• Object code executed to get results or outputs
Semantics
• The semantics of programs also specified by the language
• A precise specification of semantics also required
• Compiler writers take that as a basis for code generation
• It is essential the machine code is equivalent to the source
code
• Programs should produce the same result independent of time
and place (computers and compilers)
• Unfortunately, this is not true always!
• Standardization of Programming Languages
Program Structure
Every Fortran Program (true in most
languages too)
– starts with the keyword Program and a
name
• names are any identifiers starting with
an alphabet
– ends with the keyword end
– has two parts
– A Declarative part followed by an
Executable part
– Each part consists of a sequence of
statements
Fortran Statements
•
Every
Statement optionally starts with a label
•
A
label is any number between 1 and 99999 used for identification
•
Each
line up to 132 (or 128) characters long
•
For
longer statements, use &
•
Free
source form (type anywhere!)
•
Old
Fortran programs input using punch cards and had a strict syntax
– The first 5 columns
reserved for labels
– Continuation character at the 6th column
– The total number of columns is 80
– etc.
•
Beware:
Your compiler may follow some of these restrictions, still
Declarations
• Each declarative statement defines one or more Data items,
called variables
• Variables are identifiers with the first symbol, an alphabet
• Variables are abstractions of memory locations
• Machine programs operate on memory locations
• High level programs operate on variables
• Variables hold data values which can be accessed and changed
during execution
• Variable declarations optionally indicate initial values
Types
• Variables have definite data types (like integer, real)
specified in the declaration
• The type of a variable determine the values that can be
stored
• The types also define the operations (eg. +,* for integer
and real while // for string variable)
• Types further determine storage space
• Each language defines a number of intrinsic or built-in
types
• Fortran 90 has
integer,real,
character, complex, logical
• Fortran 90 allows users to define their own types too!
A General Declarative Statement
type_name
[,attributes] :: variable_list
• type_name - name of the intrinsic type or defined type
• [..] - to denote optional strings
• attributes - define additional properties of variables
– More about attributes later
• variable_list - list of variables defined
• All the variables in the list declared to be of the
specified type
• Eg.
Integer :: abc, xyz, m01
Real
:: x_coord,y_coord
Variables
• variable names in Fortran contain at most 31 characters
• Characters can be upper or lower case letters, numerals
(0-9) or underscore `_‘
• name should start with a letter
• upper and lower case letters not distinguished:
e.g.
Fort and fORT refer to the same variable
• no blanks allowed
• meaningful and indicative names be used
• words like real,
program not to be used
Storage Allocation for Variables
• Compiler allocates an address in memory for variables
• The contiguous bits located at the address contain the
binary representation of the value stored.
• The number of bits, dependent on type of the variables and
the compiler used
• For each data type and compiler, a default value
• Default values changed using declarations
• Here are the typical default values:
– Integer: 32 bits
– Real: 32 bits
– Character: 8 bits
– Logical: 1 bit
Integer Representation
• How many integers are there?
• But memory is finite
• Only finitely many numbers can be
stored!
• Fixed no. of bits are allocated for
integers
• One of the bits represents the sign,
called sign bit
• The usual size of integer is 32 bits
Integer Representation
Sign bit
Overflow & Underflow
• Largest representable value for 32 bits is (why?)
• ( 231 - 1) = 214,74,83,647
• Overflow
occurs when an integer exceeds this
• Smallest
value is: - 231
• Underflow
occurs when an integer is less than this value
KIND Parameter
• The compiler assigns a default size for
INTEGER :: ABCD
• The size can be changed by KIND parameter:
INTEGER(KIND=1) :: ABCD
• or equivalently
INTEGER(1)
:: ABCD
• KIND parameter for integer may have values 1,2 or 3; 3 is
the default
• Varying sizes for different kind values (machine dependent)
• 1 is of low precision (usually 8 bits); 3 high precision
Real Numbers
• What are real numbers?
5/8, 22/7, 0.001, 3.141, p, Ö2,1234567890.00023
• How many of them are there? infinite (uncountable)
• Only finitely many real numbers can be represented in a
computer
• Fixed no. of bits allocated for real numbers
• For any n, there ia a real number requiring more than n bits
• There are numbers which require infinite number of digits!
• So, only finite approximations possible for many such
numbers
Mantissa-Exponent Notation
• Many applications involving real numbers require
representation of large range of numbers
– Astronomy, Physics calculations
• Common scientific representation found useful:
0.2 ´ 1034,
0.09 ´ 10-26
• 0.2, 0.09 are called Mantissa
• 34, -26 are
exponents
• Base is 10
•
This is a compact
representation: small number of digits with large range of representable values
Floating Point Representation
• Mantissa-Exponent notations is used in computers
• Floating point representation, in computer parlance
• Fixed number of bits for mantissa and exponent
• The base is usually
2; sometimes it is 16
• Two kinds of representation
– Single Precision
– Double Precision
• No. of bits for double precision more
Real Representation
Sign bit
Approximations in Real Values
• 0.2 cannot be represented exactly
0.0011 0011 0011 0011 0011 0011 .
. .
• possible representation in 25 bit
mantissa
0.0011 0011 0011 0011 0011 0011 0
• this value is 0.2 ´ (1 - 2-24) How?
Normalized Representation
• IEEE Standard
• Mantissa
– An implied 1 bit before the decimal
point
– binary point before first bit in the
mantissa
• Exponent
– Excess 127 (or 1023) representation
– All 0 and all 1 disallowed
– They are used for 0 and infinity
Real Variables
• largest real value (Single precision, IEEE Std)
~ 2128
~ 1038
• smallest positive real value
2 -126 ~ 10-38
• overflow or underflow occur when a number falls outside the
range
• Round-off has to be done when exact representation require
more bits
Errors in Real Values
• round-off errors occur in real values
due to finite precision
• absolute value of error can be large!
• error in 0.2*2100 is 276 (in 25 bit representation)
• however, relative error is always small
• error/absolute value <= 2 -22
• (except for very small values)
• only 7 decimal digits are significant
• possible to increase precision/range if
required
Attributes
• One of the important attributes is PARAMETER
• Consider the statement:
REAL parameter :: pi = 3.141592
• This declares pi as a real variable with specified initial
value
• The attribute PARAMETER indicates that the value of pi will
remain unchanged in the program
• Any change is illegal
• The parameter attribute can be used for any variable
declaration:
eg.
integer PARAMETER :: min_value = 25
• Many more attributes are possible (look in the manual)