This course is focused on the study of general language-design and evaluation concepts.
Preliminaries: Reasons for studying concepts of Programming languages, Programming domains, Language evaluation criteria, Influences on language design, Language categories, and design trade-offs, Implementation Methods, Programming Environments.
Evolution of the Major Programming Languages (Historical Background & Design Process): Pseudocodes, IBM 704 and FORTRAN, LISP, ALGOL 60, COBOL, BASIC, PL/I, APL, SIMULA 67, ALGOL 68, Prolog, Ada, Smalltalk, C++, Java.
Describing Syntax & Semantics: Introduction, General Problem & Formal Methods, Recursive Descent Parsing, Attribute Grammars, Dynamic Semantics.
Lexical and Syntax Analysis.
Names, Bindings, Type Checking, and Scopes: Introduction, names, variables, concept of binding, type checking, strong typing, type compatibility, scope & lifetime, referencing environments, named constants, variable initialization.
Data Types: Introduction, Primitive data types, character string types, user-defined ordinal types, array types, associative arrays types, record types, union types, set types, pointer types.
Expressions and Assignment Statements: Introduction, Arithmetic expressions, overloaded operators, type conversions, Relational & Boolean expressions, short-circuit evaluation, assignment statements, mixed-mode assignment.
Statement Level Control structures: Introduction, compound, selection & iterative statements, unconditional branching.
SubPrograms: Introduction, Fundamentals, design issues, Local referencing environment, Parameter passing Methods, separate & independent compilation, design issues for functions, coroutines.
Abstract Data Types: Concept of abstraction, encapsulation, introduction to abstraction, design issues.
Object Oriented Programming: Introduction, basic concepts, design issues for object-oriented languages