Principles of Programming Languages

  •      This course concerns the interplay between problem modeling and programming languages. Problem solving relies on having good models that are written in a language that can support the modeling concepts. There are four main objectives:
    * Learning principles of programming languages: The elements of programming languages; abstraction means in programming languages; formal definition of programming languages – concrete syntax, abstract syntax, operational semantics; program correctness – type checking and type inference systems.
    * Learning the essence of program execution by evaluators: Interpreters, compilers.
    * Understanding programming paradigms: How the above topics are realized in Functional programming, Logic programming and Imperative programming.
    * Learning principles of program design: Abstraction, contracts, modular architecture, testing.
    The course is a mixture of theory and practice. All theoretical topics involve implemented software, and all course assignments involve a major amount of programming. The course combines two main approaches in teaching principles of programming languages:
    Using a single language for demonstrating all language aspects vs. introduction of multiple languages as representatives of different aspects. The course uses the Scheme language for teaching the general theory and practice of language design and implementation. Prolog is used for introducing the Logic Programming paradigm.
    Prerequisites: This subject is best learnt by comparison of the features and constructs of various programming languages. Hence a good knowledge of a procedure oriented programming language (C Language), an object oriented language (JAVA) is essential. In addition, a course in Data Structures, Formal Languages and Automata Theory (Theory of Computation) is also required.

    Why study this subject
    High level languages like C, C++, JAVA, FORTAN, Pascal and other programming languages impart the skills of developing a program for the problem at hand. To a novice programmer these programs appear to be independent. He/she cannot visualize the underlying basic principles on which these languages are designed. This subject exposes the student to the most fundamental blocks of all the programming languages namely, definition of the recognized character set, definition of keywords, reserved words, and identifiers, constructs of the languages etc. With the knowledge of this subjects, a computer science engineer would be better equipped with the knowledge of identifying the right language for the right kind of problem, development of efficient algorithms, and overcoming the inherent limitations of a programming language chosen to solve a complex problem. Hence Principles of Programming Languages is one of the most important subjects a computer Science engiuneering student studies.
    Unit-wise Objectives
    Understand the reasons for studying programming languages, application domains where programming languages can be used, evaluation criteria languages, different categories of languages, programming language implementation and different programming environments.
    Understand the general problem of describing syntax and semantics, formal methods of describing syntax using Backus-Naur Form, Extended Backus-Naur Form, Syntax Graphs , attribute grammars related to language syntax and dynamic semantics which describe the meaning of the expressions, statements and program units.
    Understand the different primitive data types, string data types, user defined ordinal types, array types, associative arrays, records, union types, pointer and reference types, name forms, keywords supported by languages, variables and variable initialization, concept of binding, type checking with compatibility.
    Understand different types of expressions, different types of assignment statements, control statements, unconditional statements, guarded statements of languages
    Explore the design of subprograms, including parameter-passing methods, local referencing environments, overloaded subprograms, generic sub programs and the side effects that are associated with sub programs, scope and life time of a variable, static and dynamic scopes and user defined overloaded operators with co routines.
    Understand data abstraction and encapsulation and differentiate the implementation of the concepts in different programming languages, understand the object oriented concepts of programming languages like SMALL TALK, C++, JAVA, C# and ADA 95. Understand various kinds of concurrency and the sub program level concurrency, semaphores, monitors, message passing, ADA support for concurrency and threads in JAVA and C#
    Understand exception handling, design issues of exception handling with ADA, C++, Java and the concepts of logic programming with logic programming language PROLOG.
    Understand the fundamentals of functional programming languages with LISP, ML and Haskell and compare functional programming languages with imperative languages and understand scripting language concepts with a case study on PYTHON

Industry      Interaction

Higher Education

Job Skills

Soft Skills

Comm. English

Mock Test