John Tang Boyland boyland@cs.uwm.edu
925 EMS Building, 229-6986, 967-4804 (home)
A program is any formal notation used to communicate ideas precisely between people or between a person and a machine. Programs are increasingly being written and used by non-programmers to customize applications. Program analysis is the task of deriving information from programs. In this course, we will look beyond simple analyses such as lexical analysis and parsing to more ``semantic'' analysis, determining properties such as absence of type errors, cyclic dependencies or race conditions, and presence of strictness or execution independence.
Participants will learn how to read published accounts of analysis in the literature; they will learn successful techniques for program analysis, their benefits and shortcomings; they will learn ways to understand program analyses, especially those based on accepted techniques; they will learn how to design and implement analyses that are more likely to be correct, efficient, comprehensible and extensible.
A class in programming languages or compilers at the graduate level is required. In particular participants are expected to have practical knowledge of
The textbook for the course is Principles of Program Analysis by Nielson, Nielson and Hankin. The latter part of the course will concern presentations of published analyses.
Each student will develop his or her own project under the guidance of the instructor. The student will explore some program analysis, implement it, test it, write up a description and make a presentation. A good project could serve as the basis of a master's thesis and could even provide the starting point for research for a doctoral degree.
Possible areas for projects include
The grade for the course will be computed from the following parts:
Excellence in all areas is needed to achieve an ``A'' grade; average good performance will merit a ``B'' grade. Serious deficiencies in multiple places will lead to a ``C'' or lower grade.
The following schedule is subject to change.
| Date | Topic | Reading | Milestone |
| January 23 | Introduction and Partial Ordering | Ch. 1.1-2 | |
| January 25 | Lattices and Fixed Points | Ch. A | |
| January 30 | Data Flow Analysis (intro) | Ch. 1.3 | HW #1 due |
| February 1 | Constraint-Based Analysis (intro) | Ch. 1.4 | |
| February 6 | Abstract Interpretation (intro) | Ch. 1.5 | HW #2 due |
| February 8 | More on AI | ||
| February 13 | Type and Effect Systems (intro) | Ch. 1.5 | HW #3 due |
| February 15 | Algorithms and Transformations | Ch. 1.7-8 | |
| February 20 | Data Flow Analyses | Ch. 2.1,2.3 | HW #4 due |
| February 22 | Proving Correctness of DFA | Ch. 2.2 | |
| February 27 | Solving DFA | Ch. 2.4 | HW #5 due |
| March 1 | Fluid CFGs | ||
| March 6 | Interprocedural Analysis (1) | Ch. 2.5.0-2 | HW #6 due |
| March 8 | Interprocedural Analysis (2) | Ch. 2.5.3-6 | |
| March 13 | Control-Flow Analysis | Ch. 3.0-1 | HW #7 due |
| March 15 | Solving 0-CFA | Ch. 3.3,3.4 | |
| March 27 | Abstract Interpretation | Ch. 4.0-1 | HW #8 due |
| March 29 | Widenings | Ch. 4.2 | |
| April 3 | Algorithms | Ch. 6.0-2 | HW #9 due |
| April 5 | Strong Components | Ch. 6.3 | |
| April 10 | Recent Analysis (1) | HW #10 due | |
| April 12 | Recent Analysis (2) | ||
| April 17 | Recent Analysis (3) | ||
| April 19 | Recent Analysis (4) | ||
| April 24 | Recent Analysis (5) | Project idea due | |
| April 26 | Recent Analysis (6) | ||
| May 1 | Recent Analysis (7) | Progress report due | |
| May 3 | Recent Analysis (8) | ||
| May 8 | Project Talks I | Project first draft due | |
| May 10 | Project Talks II | ||
| May 15 | 12:30pm: Final Exam | Project due |