DESIGN AND IMPLEMENTATION OF PROGRAMMING LANGUAGES
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Introduction
Programming languages are medium through which we communicate with the computers. The languages we discuss in the course are C, C++, Java, Scheme and Prolog
Department of CSE, MIT, Manipal
What is a programming language?
A programming language is a notational system for describing computation in human readable and machine readable form.
Department of CSE, MIT, Manipal
What is computation?
Computation is any process carried out by computer. Computation includes all kinds of computer operations including data manipulation, text processing and information storage and retrieval.
Department of CSE, MIT, Manipal
What is machine readability?
There must be some compiler or interpreter which translates the language. Compiler/interpreter must not be too complex. Machine readability is ensured by restricting the structure of programming language to that of context free languages.
Department of CSE, MIT, Manipal
What is Human readability?
Programming language must be easy to understand. Programming languages must be easy to maintain.
Department of CSE, MIT, Manipal
Abstraction in programming languages
Data abstraction Control abstraction
Department of CSE, MIT, Manipal
Levels of abstraction
Basic abstraction Structured abstraction Unit abstraction
Department of CSE, MIT, Manipal
Basic abstractions
Collect together the most localized machine information.
Department of CSE, MIT, Manipal
Structured abstraction
Collect more global information about the structure of the program.
Department of CSE, MIT, Manipal
Unit abstractions
Collect information about entire pieces of program.
Department of CSE, MIT, Manipal
Basic data abstraction
Locations in computer memory that contain data value are abstracted by giving them a name called variables. The kind of data value is also given a name and is called a data type. Eg:- int x;
Department of CSE, MIT, Manipal
Structured data abstraction
The collection of related data values are abstracted thru data structures. Eg:-arrays, structures. Many languages allow type declaration Eg:-typedef int Intarray[10]; Such data types are called structured types.
Department of CSE, MIT, Manipal
Unit data abstraction
In a large program it is useful to collect related code into specific locations within a program either as a separate file or as a separate language structure within a file. Eg:-package in java, class in C++ The most important property of unit data abstraction is its reusability. Unit abstraction become basis for language library mechanisms
Department of CSE, MIT, Manipal
Basic control abstractions
Statements which combine a few machine instructions into a more understandable abstract statement. Eg:-goto
Department of CSE, MIT, Manipal
Structured control abstractions
Structured control abstractions divide a program into groups of instructions that are nested within tests that govern their execution. Eg:-if, switch case, while, for, do while, subroutine,(procedure and function) Function return value while procedures do not.
Department of CSE, MIT, Manipal
Unit control abstraction
Focus on operation rather than the data. The goal is to achieve reusability and library building.
Department of CSE, MIT, Manipal
Parallel abstractions
Allow parallel execution of parts of program. Eg:- threads in Java
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Turing Completeness
A language is said to be turing complete when it has integer variables, arithmetic and sequentially executes the statement, which include assignment, selection and loop statements.
Department of CSE, MIT, Manipal
Turing completeness
A programming language is turing complete if it has integer values, arithmetic functions on those values, and if it has a mechanism for defining new functions using existing functions, selection, and recursion.
Department of CSE, MIT, Manipal
Computational paradigms
Imperative languages Functional languages Logical languages Object oriented languages Parallel
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Imperative language
Imperative language is characterized by following properties. The sequential execution of instruction The use of variables Use of assignment to change the values of variables. Eg:-C,Pascal,ada,Fortran
Department of CSE, MIT, Manipal
Imperative language
Int fact(int n) { int sofar=1; while(n>0) sofar *=n--; return sofar; }
Department of CSE, MIT, Manipal
Hall marks of Imperative languages
Assignment Iteration Order of execution is critical
Department of CSE, MIT, Manipal
Functional languages
(define fact(x) (if (<= x 0) 1(* x(fact(- x 1)))))
Department of CSE, MIT, Manipal
Hall mark of functional languages
Single valued variables : no assignment Heavy use of recursion : no iteration
Department of CSE, MIT, Manipal
Logical languages
fact(x,1):-x:=1 fact(x,Fact):-x>1, Newx is x-1, fact(newx,nf), Fact is x*nf
Department of CSE, MIT, Manipal
Hallmark of logic languages
Program expressed as rules in formal logic.
Department of CSE, MIT, Manipal
Object Oriented Languages
class Factorial { int facto(int n) { int fac=1; for(int i=n;i>0;i--) { fac*=i; } return(fac); } public static void main(String args[]) { Factorial f=new Factorial(); int fact=f.facto(5); System.out.println("Factorial of 5="+fact); } }
Department of CSE, MIT, Manipal
Hallmarks of object oriented languages
All properties of imperative plus objects
Department of CSE, MIT, Manipal
Pure languages
Imperative:- (old)fortran Functional:- haskell Object oriented:- small talk
Department of CSE, MIT, Manipal
Question
Can you execute statement within an if statement without checking its condition in C/C++ and in JAVA why or why not
Department of CSE, MIT, Manipal
Permissive Languages
Goto my10; i=5; If(i==12) { my10:cout<<I can reach here in C++; }
Department of CSE, MIT, Manipal
Language definition
Rules that govern the language American National Standard Institute (ANSI) International Organization for Standardization (ISO)
Department of CSE, MIT, Manipal
Language definition
Language definition can be divided into two parts Syntax (structure) Semantics (meaning).
Department of CSE, MIT, Manipal
Language Syntax
The syntax of the programming language is like grammar of a natural language. Syntax of all programming languages is given using context-free grammars. if-statementif(expression) statement [else statement]
Department of CSE, MIT, Manipal
Lexical structure
The structure of words or tokens. Eg:-if, else, identifiers, +, ; etc
Department of CSE, MIT, Manipal
Language Semantics
The actual result of execution. Usually described in English but can be done mathematically. Semantics can have static components such as type checking, definition checking other consistency checks prior to execution.
Department of CSE, MIT, Manipal
Semantic of If statement
An if statement is executed by first evaluating its expression, which must have arithmetic or pointer type, including all side effects, and if it compares unequal to zero, the statement following the expression is executed. If there is an else part, and the expression is zero, the statement following the else is executed.
Department of CSE, MIT, Manipal
Language Translation
Compiler:- Two step process that translate source code into target code then user executes the target code. Interpreter:-one step process where the source code is executed directly. Java code is compiled to a machine independent set of instructions called byte code. Byte code is then interpreted by the Java Virtual Machine(JVM).
Department of CSE, MIT, Manipal
Department of CSE, MIT, Manipal
Phases of translation
Source program is converted into tokens by lexical analyzer. Tokens are converted into structure of the program by syntax analyzer. Structure of the program is converted into proper meaningful program by semantic analyzer.
Department of CSE, MIT, Manipal
Error classification
Lexical Syntax Static semantic Dynamic semantic logical
Department of CSE, MIT, Manipal
Lexical error
Character level error such as illegal character. Eg:- abc#, ab$
Department of CSE, MIT, Manipal
Syntax error
Error in structure Eg:- missing semicolon or keyword
Department of CSE, MIT, Manipal
Static semantic
Non syntax error prior to execution Eg:-Undefined variables, incompatible type.
Department of CSE, MIT, Manipal
Dynamic semantic
Non syntax error during execution. Eg:- division by zero. array index out of range.
Department of CSE, MIT, Manipal
Logical errors
Programmer errors. Logic errors are not errors at all from the point of view of language translation.
Department of CSE, MIT, Manipal
Error reporting
A compiler will report lexical, syntax and static semantic errors. It cannot report dynamic sematic errors. An interpreter will only report lexical and syntax errors when loading the program. Static semantic errors may not be reported until just prior to execution. No translator can report a logic error.
Department of CSE, MIT, Manipal
Run time environment
During execution language translators must maintain run time environment and allocation of memory to program and data.
Department of CSE, MIT, Manipal
Run time environment
An interpreter maintains Run time environment internally as a part of its management of the execution of the program.
Department of CSE, MIT, Manipal
Run time environment
Compiler adds suitable instructions to the target code to maintain run time information.
Department of CSE, MIT, Manipal
Birth of languages
UnixC Internetjava OOApproachesC++.
Department of CSE, MIT, Manipal
Imperative style
int numdigits(int x) { int temp=x; n=1; while(temp>=10) { n++; temp=temp/10; } return n; }
Department of CSE, MIT, Manipal
Functional style
int numdigits(int x) { if(x<10) return 1; else return 1+numdigits(x/10); }
Department of CSE, MIT, Manipal
Question
Write down the while statement equivalent of following statement if(e) s1 else s2
Department of CSE, MIT, Manipal
Answer
X=e; Y=1-X; while(X) { s1; X=0; } while(Y) { s2; Y=0; }
Department of CSE, MIT, Manipal
Question
Write a program in C/C++ to reverse a string using functional paradigm(i.e. using recursion).
Department of CSE, MIT, Manipal
# include <stdio.h> void reverse(char *str) { if(*str) { reverse(str+1); printf("%c", *str); } } int main() { char a[] = MIT"; reverse(a); getchar(); return 0; }
Department of CSE, MIT, Manipal
Fibonacci Iterative
static int FibonacciIterative(int n) { if (n == 0) return 0; if (n == 1) return 1; int prevPrev = 0; int prev = 1; int result = 0; for (int i = 2; i <= n; i++) { result = prev + prevPrev; prevPrev = prev; prev = result; } return result; }
Department of CSE, MIT, Manipal
Scheme Program
(define (fib n) (cond(= n 0) 0) ((<= n 2) 1) (else (+ (fib (- n 1)) (fib (- n 2)))) ) )
Department of CSE, MIT, Manipal
Fibonacci in Prolog
fibonacci(0,0). fibonacci(1,1). fibonacci(2,1). fibonacci(N,F) :- if (N>=3) fibonacci(N-1,F1), fibonacci(N-2,F2), F = F1 + F2.
Department of CSE, MIT, Manipal
References
Text book Kenneth C. Louden and Kenneth Lambert Programming Languages Principles and Practice Third edition Cengage Learning Publication. Reference Books: Terrence W. Pratt, Masvin V. Zelkowitz Programming Languages design and Implementation Fourth Edition Pearson Education. Allen Tucker, Robert Noonan Programming Languages Principles and Paradigms second edition Tata MC Graw Hill Publication.
Department of CSE, MIT, Manipal