Techniques for static analysis of source code and modern programming paradigms.
Analysis techniques: data flow analysis, program dependence graphs,
program slicing, abstract interpretation. The meaning of programs:
denotational semantics, partial evaluation. Abstraction mechanisms:
polymorphic types, operation overloading, inheritance,
object-oriented programming and ML-like programming languages.
Prerequisites
CMSC 430 or equivalent.
Topics
Introduction and Overview of Programming Languages (2 weeks)
Language features (5 weeks)
Location, reference and expressions
Types
Kinds of types, type equivalence,
polymorphism and overloading,
type inference
Encapsulation
Inheritance
Exceptions
Dependences (3.5 weeks)
Def-Use chains
Static Single Assignment
Control Dependence (Dominators)
Program Dependence Graph
Selected topics (4.5 weeks), possibly including:
Lambda calculus
Denotational Semantics
Abstract Interpretation
Alias Analysis, including pointers and arrays
Partial evaluation
Program slicing
Course Text
Ryan Stansifer, The Study of Programming Languages,
Prentice Hall, 1995, ISBN 0-13-726936-6