BU CAS Computer Science 320
Concepts of Programming Languages









2015-09-03lecture:
languages
  • lecture notes
  • background & motivation
  • defining programming languages
    • sets of character strings
    • regular expressions
    • examples with regular expressions
    • sets of token sequences
    • syntax and BNF notation
2015-09-08lecture:
languages
  • lecture notes
  • more on syntax and BNF notation
  • concrete and abstract syntaxes
  • abstract syntax trees
  • lexing and parsing
2015-09-10lecture:
parsing
  • lecture notes
  • more on parsing algorithms
  • recursive descent parsers
    • predictive
    • backtracking
  • more on parser implementation
    • elimination of left recursion
    • left factoring
2015-09-15lecture:
interpretation
& compilation
  • lecture notes
  • operational semantics
  • inference rules
  • implementing interpreters
  • evaluation of expressions
2015-09-16
11:59 PM EDT
assignment
2015-09-17lecture:
interpretation
& compilation
  • lecture notes
  • execution of statements
    • control flow
    • side effects
    • environments/contexts
    • variable assignment
    • program subblocks
2015-09-22lecture:
interpretation
& compilation
  • lecture notes
  • execution of statements
    • conditional branches
    • looping constructs
  • control flow graphs
2015-09-24lecture:
interpretation
& compilation
  • lecture notes
  • compilation
    • history and background
    • formal definition
    • interpretation vs. compilation
  • example of a machine language
2015-09-29lecture:
interpretation
& compilation
  • lecture notes
  • machine language programs
  • compiling expressions
  • heap (memory region)
2015-10-01lecture:
interpretation
& compilation
  • lecture notes
  • compiling expressions
    • variable occurrences
  • compiling statements
    • assignments
    • procedures
  • stack vs. heap
2015-10-02
11:59 PM EDT
assignment
2015-10-06lecture:
interpretation
& compilation
  • lecture notes
  • compiling statements
    • procedure calls
    • procedure parameters
    • looping constructs
  • stack pointer
  • stack frames
2015-10-08lecture:
interpretation
& compilation
  • lecture notes
  • compiler optimizations
    • loop unrolling
    • constant folding
  • register allocation
    • interference graph
    • graph coloring
    • single static assignment
  • compiling comprehensions
2015-10-13
Monday sched.
    2015-10-15lecture:
    interpretation
    & compilation
    • more on compiling procedures
      • local variables
      • data structures
    • memory management
      • stack and heap
      • garbage collection
    2015-10-20lecture:
    static
    analysis
    • lecture notes
    • implementation correctness
      • test cases
      • bounded exhaustive testing
      • formal verification
    • static analysis
      • type checking
      • error reporting
    2015-10-21
    11:59 PM EDT
    assignment
    2015-10-22lecture:
    static
    analysis
    • lecture notes
    • more type checking and interpretation
      • functions with parameters
      • types with size annotations
    2015-10-27lecture:
    static
    analysis
    2015-10-29lecture:
    declarative
    programming
    • lecture notes
    • programming paradigms
    • declarative languages
    • substitution & unification
    2015-11-02
    11:59 PM EDT
    take-home
    midterm due
    2015-11-03lecture:
    declarative
    programming
    • lecture notes
    • more on substitution & unification
    • Haskell syntax & semantics
    • declarative programming
    • algebraic data types (ADTs)
    2015-11-05lecture:
    declarative
    programming
    • lecture notes
    • semantics of a declarative language
    • Haskell type system
    • type synonyms
    • infinitely large values
    2015-11-10lecture:
    functional
    programming
    • lecture notes
    • more on infinitely large values
    • function types
    • higher-order functions
    • type checking in Haskell
    2015-11-12lecture:
    functional
    programming
    • lecture notes
    • logic programming
    • built-in Haskell type classes
    • defining and overloading operators
    • embedded languages
    2015-11-16
    11:59 PM EDT
    assignment
    2015-11-17lecture:
    functional
    programming
    • lecture notes
    • more Haskell features and examples
    • list comprehensions
      • with pattern matching
    • state space search
      • defining a game state
      • building a state space
    2015-11-19lecture:
    functional
    programming
    • lecture notes
    • state space search
      • comparing states
      • choosing states optimally
    • polymorphism
      • ad-hoc (overloading)
      • parametric
    • defining modules
    • defining data structures
    • defining type classes
    2015-11-24lecture:
    functional
    programming
    2015-11-26recess
      2015-12-01lecture:
      algebra of
      programming
      • fold operations over data types
      2015-12-03lecture:
      algebra of
      programming
      • polymorphic fold operations
      • folds, maps, and filters
        • as comprehensions
        • in Haskell
        • in Python
        • in database languages
      • exploiting algebraic properties
      • lifts and joins
      2015-12-07
      11:59 PM EDT
      assignment
      2015-12-08lecture:
      review
      2015-12-10
      Thursday
      12:35-1:55 PM
      in-class
      exam
        2014-12-17
        11:59 PM EDT
        take-home
        project due