**Western Ontario:**- Full time computer science faculty member from 1962. Learned
computer science by teaching courses never taught there before (in the absence of
textbooks!), and designing and implementing an ALGOL 60 compiler. Research work
in automata, logic and formal languages.
**Penn State:**- Curriculum development and departmental matters, directed many masters'
students (mostly in software areas) and several Ph.D. students. Characterizing
spectra in time-bounded Turing machine terms (solving a longstanding open program
in mathematical logic), invented logspace reducibility and used it to formulate
complete problems for NSPACE(log n).
**Kansas:**- Continued complexity work including the discovery of problems
complete for PTIME, and established complexity of many problems in
NSPACE(log n)
and PTIME, particularly concerning
program analysis and Petri nets.
Shifted attention back to programming languages
in 1974, especially program flow analysis. Fruitful collaboration with Steven
Muchnick, an NSF grant for research on optimizating binding times in a
program's
execution by means of program flow analysis.
**Aarhus:**- Organized in 1980
workshop on Semantics-Directed Compiler Generation, Springer-Verlag proceedings,
smaller workshop in Program Flow Analysis 1981.
Papers on complexity and pattern matching, taught
analysis of algorithms, and learned mathematical semantics. Research during
second visit on attribute grammars, generation of compilers from denotational
definitions of programming languages, and flow analysis of applicative languages.
**Copenhagen:**-
Wrote one book on compiler generation using partial evaluation; another book on
complexity and computability; and edited several proceedings and article
collections. Organized several workshops and conferences, including
the very large
*Federated Logic Conference 2002*FLoC'02. Taught both advanced courses and a very large undergraduate course.Papers on model checking in relation to program transformation, program termination analysis, partial evaluation, complexity theory, semantics of Prolog, abstract interpretation of higher-order functional programs and Prolog, semantics-directed compiler generation, automata to detect structure in polyhedra.

**Southern Illinois:**- I programmed my way through undergraduate school, writing many
applications and service programs for the IBM 650 and 1620. I wrote a subroutine
package for elementary functions (on average five times as fast as IBM-supplied
routines).
**Western Ontario:**- I wrote a compiler for ALGOL 60 (1962-65), and designed a fast student Cobol
compiler, system to teach assembly languages. These systems were all used several
years for teaching at Western Ontario.
**Penn State:**- I wrote system to teach IBM 360 assembly language,
numerous student projects in compiling for courses and masters projects, including extensions
to the ALGOL-W and XPL-compilers, a LISP compiler, and a transition matrix system.
**Kansas:**- I designed a pedagogical language to teach binding time concepts; a
microprogrammed transition matrix processor; a structured assembly language and
processor; and a language and compiler for Hoare's recursive data structures (all
implemented by master's students).
**Aarhus:**- I developed a first version of the semantics-directed compiler generator CERES
in Prolog, and a second in Lisp.
**Copenhagen:**- A much improved new version of CERES (with Mads Tofte), and used it for
a semantics-based implementation of Prolog. Constructed the first nontrivial
self-applicable partial evaluator (an open problem
since 1971), for first-order Lisp. This has since led to much further activity
in partial evaluation, both world-wide and at DIKU. Implemented (with students)
some highly general theoretical constructions: 2DPDA (2-way pushdown automata),
Kleene's Recursion Theorem, Levin's Search Theorem.

February 22, 2008