Page:AITR-474.djvu/128

 The main modules of RABBIT are organized something like this:

COMFILE, TRANSDUCE, PROCESS-FORM (Bookkeeping and file handling) COMPILE (Compile a function definition) ALPHATIZE (Convert input, rename variables) MACRO-EXPAND (Expand macro forms) META-EVALUATE (Source-to-source optimizations) PASS1-ANALYZE (Preliminary code analysis) ENV-ANALYZE (Environment analysis) TRIV-ANALYZE (Triviality analysis) EFFS-ANALYZE (Side effects analysis) META-IF-FUDGE (Transform nested IF expressions) META-COMBINATION-TRIVFN (Constants folding) META-COMBINATION-LAMBDA (Beta-conversion) SUBST-CANDIDATE (Substitution feasibility) META-SUBSTITUTE (Substitution, subsumption) CONVERT(Convert to continuation-passing style) CENV-ANALYZE (Environment analysis) BIND-ANALYZE (Bindings analysis) DEPTH-ANALYZE (Register allocation) CLOSE-ANALYZE (Environment structure design) COMPILATE-ONE-FUNCTION (Generate code, producing one module) COMPILATE (Generate code for one subroutine) COMP-BODY (Compile procedure body) ANALYZE (Generate value-producing code) TRIV-ANALYZE (Generate 'trivial' code)