Principles of Programming Languages

Course
Identifier: 
COM S 342

Offered during Fall and Spring Semesters each year.

  1. Credits and contact hours: 3 credits, 4 contact hours
  2. Instructor’s or course coordinator’s name: Hridesh Rajan, Samantha Khairunnesa
  3. Text book, title, author, and yearProgramming Languages: Design, Semantics, and Implementaion, Hridesh Rajan
  4. Other supplemental materialsConcepts of Programming Languages, Robert W. Sebesta, Pearson

Specific course information

  1. Brief description of the content of the course: Study of concepts in programming languages, especially functional programming concepts. Overview of major programming paradigms, their relationship, and tradeoffs among paradigms enabling sound choices of programming language for application-specific development. Programming projects.
  2. Prerequisites or co-requisites: Minimum of C- in COM S 228 and MATH 165; COM S 230 or CPR E 310
  3. Required, elective, or selected elective? Required

Specific goals for the course

  1. Specific outcomes of instruction:
  • Know terminologies of programming languages
  • Write programs in different programming languages
  • Compare and implement programming language design decisions on both syntax and semantics (2, 3)
  • Understand theoretical foundations of programming languages such as grammar, formal semantics and lambda calculus (6)

Brief list of topics to be covered

  • Formal language theory: regular languages, context-free languages,  finite state automata
  • Functional Programming: Write and modify programs in functional style, introduction to languages such as Scheme and Haskell and language implementation techniques such as lazy data structures and monads
  • Make effective use of data abstraction
  • Learn about language constructs by changing or enhance interpreters to have features such as: control flow, variables names and bindings, recursion, static and dynamic scoping, syntactic sugars, arrays, parameter passing mechanisms, continuations, co-routines, objects, and inheritance
  • Write programs using such features and explain their behavior
  • Type System: Learn about concepts such as type, type system, design decisions for types, type inference, type checking and execution errors
  • Learn about language constructs by changing or enhance interpreters to have features such as: types and type checking rules. Write program using such features and explain their behavior
  • Explain the data structures and algorithms used in interpreters
  • Logic programming: Prolog, resolution principles, unification algorithm, search with backtracking, cut operation, negation as failure
  • Compare alternatives in programming language design and implementations
  • Tentative Topics Order