3.3 CONCEPT OF PROGRAMMING LANGUAGE
In order to communicate with other human beings, one needs some language or a
medium. In the same way for solving problems, a programming language is
required in order to communicate with the computer. A Programming Language is
used to design and describe a set of instructions/actions for the computation that
we wish to be executed by the computer.
First an algorithm is designed which solves the problem in question. In the next
step, the algorithm is expressed in the form of a program. For this one should
have a sound knowledge of some programming language. A program written in a
particular Programming Language can control the behavior of a computer and
perform a designated task to generate the desired output for any given input.
Program and Programming Language : A Program is defined as a collection of
statements/ instructions that enable the computer to solve a problem. The process
of writing a program is called programming. Statements in a program should be
well formed sentences. Each Programming Language has some basic building
blocks called the primitive building blocks. These blocks are defined by basic
components that have an associate Syntax and Semantics. Syntax provides
structure and semantic provides meaning to it. Different computer programming
languages have different advantages and disadvantages to their use. Hence
different application domains based on their requirement and functionality may
choose any one of the available programming languages suitable for the task.
Syntax provides the structure and how to formulate the phrase or sentence w.r.t
grammar of the language. It tells us about which composition is allowed from the
character set of the language. Each sentence must be a well formed sentence
according to the grammar of the language. The grammar is expressed in a Number
of rules that will be finite and these allow the formulation of any number of
sentences. A language is defined in the form a quadruplet L(T,N,P,S) where T is
set of terminals, N is a set of non terminals, P is set of productions or rules and S
is the start symbol. For any language we must have an alphabet/character set,
operators and rules. To form a grammar w.r.t a language rules need to be formed.
The basic structure of rule is LHS and RHS with some set of terminal and non
terminal symbol.
Syntax comprises grammar and vocabulary whereas syntactic analysis is known
as parsing. Semantics provides the meaning for the formulated /composed phrase
or word or sentence. Semantic function can be incorporated inside the logic of a
compiler or interpreter which evaluates ordering of statements for execution.
S-> A
A->Ab | b i.e any word with sequence of any number of occurrence of character b
Start symbol:
Here S is start symbol. Any sentence will start with start symbol only.
In respect of BNF notation it is as follows:
L(T,N,P,S)
T={b}
N={A}
P={S->A,A->Ab}
S=Start sybmol
Example grammar:
Program: statement
Statement: stmt| stmt
Stmt: var=expression
Var:a|b
Expression: term +term | term-term
Term: var/const
e.g x=y+2
Similarly
Sentence: subject,verb,object
Subject: noun/article
Sentence: subject,verb,object
Subject: noun/article
Here each symbol on the left is described in terms of its components. Thus a
program consists of statements, which are of the form of an assignment of a
variable to an expression, and so on.
Any number of sentences can be formed with the help of a grammar defined for a
language. The grammar should be unambiguous. otherwise during syntactic
analysis at some point of time it can have more than one meaning.
3.4 ELEMENTS OF PROGRAMMING LANGUAGE
Learning a programming language requires understanding of concepts such as
representation of different types of data in the computer, the various methods of
expressing mathematical and logical relationships among data elements and the
methods for controlling the sequence in which operations can be executed for
inputting the data, processing it and generating the output data.
3.4.1 Variables, Constants, Data type, Array and Expression
These are the smallest components of a programming language.
For writing a program, one must know how to use the internal memory of a
computer. A Computer memory is divided into several locations where each
location has its own address. Memory organization can be represented
diagrammatically as below:
Each location or cell can hold some information. In order to store, retrieve or
manipulate data from a specific memory location, we must have some identifier
for a particular location. .
Variable: As referencing memory by its physical address is very tedious, variable
names are used. A variable is a symbolic name given to a memory location. Once
a variable is assigned to a memory location, the programmer can refer to that
location by variable name instead of its address. Variable is the connection
between a name and a value.
It is composed of a name, attribute, reference and a value. Attribute means the
type of value a variable can hold.
For example the following programming code in C declares variables a & b.
int a,b;
char c;
In the above declaration, a & b are the variable name, which refer to a memory
location where integer values can be stored. Instead of address of the memory
location, variable names a and b will be used to refer to a memory location in
order to store or retriever update its value.
Similarly, c is a variable name given to a memory location where a character
value can be stored. Further c will be used to refer to the memory location in
order to store or retrieve or update its value.
Constant : In contrast to a variable, which is used as identifier for a value and
which can change, constants are identifiers that are used for values, which cannot
be changed. In other words constants are symbols used to refer to quantities which
do not change throughout the life of a program. No assignment can be done to a
constant.
A numeric constant stands for a number. This number can be an integer, a
decimal fraction, or a number in scientific (exponential) notation. Some of the
operations which can be performed with numeric constants are addition,
subtraction, multiplication, division and comparison.
A string constant consists of a sequence of characters enclosed in double/single
quote marks. Chopping off some of the characters from the beginning or end,
adding another string at the end (concatenation), copying are some of the
operations that performed on the string constants. All these operations can be
done on variables also.
For example in the C programming language
-integer constant is declared as:
const int a=2; /* the value of a cannot be changed throughout the program*/
-string constant is declared as:
char const *str; /* str ,string can not be altered by string library functions*/
Data Type: Anything that is processed by a computer is called data. There are
different types of data that can be given to the computer for processing. A data
type is a classification identifying the typeof data. It determines the
- Possible values for that type,
- Operations that can be performed on values of that type,
- The way values of that type can be stored in memory
- int, both signed and unsigned integers, 2 bytes in size.
- float, floating point numbers, up to 4 bytes in size.
- double, floating point number with double precision. These are organized in 8 bytes (64 bits)
- char, character type size of 1 byte (8 bits) It is used to form the strings i.e sequence of characters
An array is a set of elements of same data type that can be individually referenced
by an index. Usually these are placed in contiguous memory locations. Generally
two types of array are used:
- One dimensional array
- Two dimensional array
One dimensional array: A one-dimensional array is a structured collection of
elements that can be accessed individually by specifying the position of a
component with index/ subscript value. The index would let us refer to the
corresponding value. value at that .
Like a regular variable, an array must be declared before it is used. A typical
declaration for an array in C++ is:
type name [elements];
where type is a valid data type (like int, float...), name is a valid identifier or
variable name and the elements field (which is always enclosed in square brackets
[]), specifies how many of these elements the array will contain.
Therefore, in order to declare an array named as marks, that will store marks for 5
students,
int marks[5];
marks [0] marks[1] marks[2] marks[3] marks[4]
50 70 80 90 63
Two dimensional Arrays : A two-dimensional array is like a table, with a
defined number of rows, where each row has a defined number of columns. In
some instances we need to have such an array of arrays. It will have two
dimensions and data is represented in the form of rows and columns.
Type name [elements] [elements];
For example int a [3] [3]; /* lets one dimension depict location and other
dimension represent sales in a day or a week or a month*/
Expression : An expression is a combination of variables, constants and operators
written according to the syntax of the programming language. In the C
programming language every expression evaluates to a value i.e., every
expression results in some value of a certain type that can be assigned to a
variable. Every computer language specifies how operators are evaluated in a
given expression. An expression may contain
i) arithmetic operator:
ii) relational operator
iii) logical operator
Assignment : It is composed of variable name, an assignment operator of the
language and a value or variable or some expression as per composition allowed
based on rules defined in grammar.
e.g temp=5;
temp=temp+1;
This means to add 1 to the current value of the variable temp and make that the
new contents of the variable temp
temp = a+b ;
Arithmetic : These types of expressions consist of operators, operands or some
expression. The following is the list of arithmetic operator.
+(addition),
-(subtraction),
*(Multiplication),
/(Division),
% (modulo),
++(increment by 1),
--(decrement by 1)
Here are some examples of arithmetic expressions.
e.g. x=y+z; /* addition of y and z will be stored in x */
i++; /* i will be incremented by 1 i.e i=i+1 */
y=x%2; /* remainder after x divided by 2 will be stored in y */
Logical, relational and equality : these types of expression result in a Boolean
representation i.e. each expression will result in either True or False. It is
composed of operands and relational/logical/equality operator.
The following is the list of operators in the C programming language.
== (equal to)
!= (Not equal to)
< (less than)
<= (less than equal to)
> (greater than)
>=(greater than equal to)
&& (logical AND)
|| (logical OR)
! (logical NOT)
Relational expressions result in one of the truth value either TRUE or FALSE.
They are capable of comparing only two values separated by any valid relational
operator.
e.g.
Let x=1, y=3
x==1 /* evaluates to true as x has value 1 */
x!=y /* evaluates to false */
x<y /* evaluates to true */
(x<2) && (y> 5) /* evaluates to true */
Bit Wise: Bitwise operators modify variables considering the bit patterns that
represent the values they store.
& AND (Binary operator)
| inclusive OR (OR)
^ exclusive OR (XOR)
<< shift left.
>> shift right.
~ one's complement
e.g. let a=2 (0000 0010),b=5(0000 0101)
c=a&b; (0000 0000) /* c=0*/
3.4.2 Conditional and Looping Statement
Conditional statement: An If statement is composed of three parts. The first part
should be keyword w.r.t language to convey to the computer that it is if statement.
And a Boolean expression. The second and thirds part can be a statement or group
of statements as defined in rules of grammar of language.
Generally, an if statement is evaluated and executed in the following sequence:
first it evaluates the boolean expression. If the expression is true, the statements in
the second part are executed. Otherwise if it is false, the statements in the third
part are executed. The third part is optional; if it is absent and the expression is
false, then the program control simply moves on to the next statement in the
sequence.
For example,
if (n %2 ==0)
{
printf(“Number %d is even”,n);
}
else
{
printf(“Number %d is odd”,n)
}
Looping Statement: The purpose of a loop structure is to repeat certain tasks
until some condition is satisfied. Several variations of a loop structure are
available in each programming language to handle different situations.
A program loop consists of two segments, one is the body of the loop and the
other is the control statement. The control statement tests certain conditions and
then directs the repeated execution of the statements contained in the body of the
loop. The test may be either to determine whether the loop has repeated the
specified number of times or to determine whether the particular condition has
been met.
Thus a loop consists of :
- Initial condition
- Execution of set of statements inside the loop
- Test the condition
- Again execute the statements if the condition is met else go to the next
- statement in the sequence
There are three variants of looping statements in the C programming language
are:
- For loop
- While loop
- Do while loop
In this brief introductory unit, we will not go into the details of the distinctions
between these three types of loops.
e.g 1
for(i=0;i<20;i++)
{ printf(“%d =”,i+1);
scanf(“%d”,&s[i]);
}
e.g 2
i=0;
while(i<20)
{
sum=sum+s[i];
i++; /* increment counter */
}
Basic structure or keywords may vary in different languages. Also loop structure
may be structured or not as it might not have control variables. Most of the
languages do have control variables in their loop structure.
3.4.3 Subroutine and Functions
In a program, it is often necessary to repeat a statement or group of statements at
several points to accomplish a particular task. Repeating the same statement in a
program each time makes a program lengthy and reduces readability. These
problems could be sorted out if the necessary statements could be written once
and then referred to each time they are needed. This is the purpose of a
subprogram. Basically there are two different types of subprograms, called
functions and subroutines.
Making subprograms allows tackling small pieces of a problem individually.
Once each piece is working correctly then the pieces are integrated together to
create the complete solution of the problem. To implement functions and
subroutines, we require writing the main program that references all of the
subprograms in the desired order and also writing the subprograms. This can be
done in any order that is convenient.
The following steps take place during the execution of subprograms:
1) Temporarily halt the execution of the calling program i.e main program.
2) Execute subprogram.
3) Resume execution of the calling program at the point immediately following
the call of the subprogram.
Subroutine : A subroutine is a type of subprogram, a piece of code within a
larger program that performs a specific task and is relatively independent of the
remaining code.
It is also called a procedure, routine or a method.
A subroutine has no value associated with its name. All outputs are defined in
terms of arguments; there may be any number of outputs.
In most cases, a subroutine needs some information about the circumstances in
which it has been called. A procedure that performs repeated or shared tasks uses
different information for each call. This information consists of variables,
constants, and expressions that you pass to the procedure when you call it.
A parameter represents a value that the procedure expects you to supply when you
call it. You can create a procedure with no parameters, one parameter, or more
than one. The part of the procedure definition that specifies the parameters is
called the parameter list.
An argument represents the value you supply to a procedure parameter when you
call the procedure. The calling code supplies the arguments when it calls the
procedure. The part of the procedure call that specifies the arguments is called the
argument list. For example here is a subroutine to find the sum of three numbers
SUBROUTINE sub1(A,B,C, SUM)
REAL A,B,C,SUM
SUM = A + B + C
RETURN
END
The subroutine sub1 in the main program will be invoked as follows
CALL sub1(A,B,C, SUM)
Function : The purpose of a function is to take in a number of values or
arguments, do some calculations with those arguments and then return a single
result.
Each language has different rules to define a function. In the C programming
language the basic block for function is given as
return value function name (argument list)
{
statement;
}
Functions can be called from the main program or from anywhere else, even from
within itself. Program control will transfer to function definition statement as soon
they are called and then return back to next statement immediately after the
calling point.
e.g
#include<stdio.h>
void main()
{
int x, y;
printf(“Enter number”);
scanf(“%d”,&y);
x=funname(y);
if(x==1)
printf(“Number %d is even”,y);
else
printf(“Number %d is odd”,y);
}
int funname(int a)
{
if((a%2)==0)
return 1;
else
return 0;
}
Library function: These are the functions supplied with the programming
language. The code or definition of library functions does not have to be written
in a user program while writing it. Coding or definition of these function are
defined in header or library files which are required to be included in program.
e.g.
#include<stdio.h>
printf(),scanf() etc. are functions defined in stdio.h header file.
Similarly every programming language has a set of library or header files.