MCA 401: Principles of Programming Languages

Lectures: 4 Periods/Week Sessional Marks: 30
University Exam: 3 Hours University Examination Marks: 70


UNIT-I
Introduction
What is a programming language, Abstractions in programming languages, Computational paradigms, Language definition, Language translation, Language design.
History
Early History : The first programmer, The 1950s : The first programming languages, The 1960s : An explosion in programming languages, The 1970s : Simplicity, abstraction, study, The 1980s : New directions and the rise of object –orientation, The 1990s : Consolidation, The Internet, libraries and scripting, The future.
Language Design Principles
History and design criteria, Efficiency, regularity, Further language design principles, C++ : A Case study in language design.
Syntax
Lexical structure of programming languages, Context-free grammars and BNFs, Parse trees and Abstract syntax trees, Ambiguity, Associativity and precedence, EBNFs and syntax diagrams, Parsing techniques and tools, Lexical vs Syntax vs Semantics.
Basic Semantics
Attributes, binding and semantic functions, Declarations, blocks and scope, The symbol table, Name resolution and overloading, Allocation, Lifetimes and the environment, Variables and Constants, Aliases, Dangling references and garbage.
Data Types
Data types and type information, Simple types, Type constructors, Type equivalence, Type Checking, Type conversion, Polymorphic type checking, Explicit polymorphism.

UNIT-II
Control – I : Expressions and Statements
Expressions, Conditional Statements and Guards, Loops and Variation on “while”, The “goto” controversy, Exception handling.
Control – II : Procedures and Environments
Procedure definition and activation, Procedure semantics, Parameter passing mechanisms, Procedure environments, activations and allocation, Dynamic memory management, Exception handling and environments.
Abstract data types and Modules
The algebraic specification of abstract data types, Abstract data type mechanisms and modules, Separate compilation in C, C++ name spaces and Java packages, Ada packages, Modules in ML, Modules in earlier languages, Problems with abstract data type mechanisms, The mathematics of abstract data types.

UNIT-III
Object – Oriented Programming
Software reuse and independence, Java : objects, Classes and methods, Inheritance, Dynamic binding, C++, Small Talk, Design issues in object – oriented languages, Implementation issues in object – oriented languages.
Functional Programming
Programs as functions, Functional programming in an imperative language, Scheme : A Dialect of LISP, ML : Functional programming with static typing, Delayed Evaluation, Haskell – A fully curried lazy language with overloading, The Mathematics of functional programming I : Recursive functions, The Mathematics of functional programming II : Lambda calculus.
Logic Programming
Logic and Logic programs, Horn clauses, Resolution and Unification, The language Prolog, Problems with logic programming, Extending logic programming : Constraint logic programming and Equational systems.

UNIT-IV
Formal Semantics
A Sample small language, Operational semantics, Denotational semantics, Axiomatic semantics, Proofs of program corrections.
Parallel programming
Introduction to parallel processing, Parallel processing and programming languages, Threads, Semaphores, Monitors, Message passing, Parallelism in non-imperative languages.

Text Books

  1. Kenneth C. Louden, “Programming Languages Principles and Practice”, Second Edition, Cengage Learning (2008).
    Chapters : 1 through 14
Reference Books
  1. Terrence W. Pratt & Mervin V. Zelkowitz, “Programming Languages Design and Implementation”, Fourth Edition, Pearson Education (2008)
  2. Robert W. Sebesta, “Concepts of Programming Languages”, Seventh Edition, Pearson Education (2007)