||Prerequisites: Data Structures, and an introductory course in Computer Architecture.
To introduce the major programming paradigms, and the principles and techniques involved in design and implementation of modern programming
languages. To introduce frameworks for specifying and reasoning about programming languages.
Notions of syntax and semantics of programming languages; introduction to operational/natural semantics of functional and imperative languages. Data abstractions and control constructs; block-structure and scope, principles of abstraction, qualification and correspondence; parameter passing mechanisms; runtime structure and operating environment; practical and implementation issues in run-time systems and environment; abstracts machines; features of functional and imperative languages; the untyped and simply-typed Lambda calculus type systems for programming languages including simple types and polymorphism; objects, classes and inheritance in object-oriented languages.
Course Organization (topics and hours)
Abstract Syntax and Semantics (algebraic)
Operational Semantics (functional paradigm, logic paradigm) 5
Block Structure and Control (imperative paradigm) 4
Principles of Abstraction, Qualification, Correspondence 4
Abstract Machines and Runtime structures
Parameter Passing and Runtime stacks
Type Systems and Type checking/inference 5
Object oriented systems
Brief description of laboratory activities:
Programming exercises will include use of tools for lexical analysis and parsing; representation of abstract syntax; abstract machines for
imperative and functional languages; translations from high level languages to abstract machine instructions; implementation of runtime
structures and parameter-passing; type checking and type inference; term reduction.