A small experiment about the RABBIT compiler

Last update 2010/02/01

In this small experiment, I'm trying to execute the Guy Steele's RABBIT compiler.

Currently, RABBIT seems to be running under the Sussman & Steele's SCHEME interpreter, which is running under a toy lisp system written in Java.

Example input and output are as follows:

[input: SCHEME code]
(define fib
  (lambda (n)
    (if (< n 2) 
        n
        (+ (fib (- n 1)) (fib (- n 2))))))
[output: LISP code (emitted by RABBIT)]
(COMMENT THIS IS THE RABBIT LISP CODE FOR "rabbit/fib.scm")
(DECLARE
 (SPECIAL **CONT** **ONE** **TWO** **THREE** **FOUR** **FIVE**
          **SIX** **SEVEN** **EIGHT** **ENV** **FUN** **NARGS**))
(PROGN 'COMPILE (COMMENT MODULE FOR FUNCTION FIB)
 (DEFUN |rabbit/fib-27| NIL
  (PROG NIL (DECLARE (SPECIAL |rabbit/fib-27|))
   (GO (PROG2 NIL (CAR **ENV**) (SETQ **ENV** (CDR **ENV**))))
   F-26
   (COMMENT (DEPTH = 0) (FNP = NIL) (VARS = (CONT-23 N)))
   (COND
    ((< **ONE** '2)
     (SETQ **FUN** **CONT**) (RETURN NIL))
    (T
     ((LAMBDA (Q-28 Q-29)
              (SETQ **ONE** Q-29)
              (SETQ **CONT** Q-28))
      (CONS 'CBETA
            (CONS |rabbit/fib-27|
                  (CONS 'C-25 (CONS **ONE** (CONS **CONT** **ENV**)))))
      (- **ONE** '1))
     (GO F-26)))
   C-25
   (COMMENT (DEPTH = 0) (FNP = NIL) (ENV = (N CONT-23)))
   ((LAMBDA (Q-30 Q-31)
            (SETQ **ONE** Q-31)
            (SETQ **CONT** Q-30))
    (CONS 'CBETA
          (CONS |rabbit/fib-27|
                (CONS 'C-24 (CONS **ONE** **ENV**))))
    (- (CAR **ENV**) '2))
   (SETQ **ENV** (CDDDR FIB))
   (GO F-26)
   C-24
   (COMMENT (DEPTH = 0) (FNP = NIL) (ENV = (NODE-13 N CONT-23)))
   (SETQ **FUN** (CADDR **ENV**))
   (SETQ **ONE** (+ (CAR **ENV**) **ONE**))
   (RETURN NIL)))
 (SETQ |rabbit/fib-27| (GET '|rabbit/fib-27| 'EXPR))
 (SETQ FIB (LIST 'CBETA |rabbit/fib-27| 'F-26))
 (DEFPROP |rabbit/fib-27| FIB USER-FUNCTION))
(PROGN 'COMPILE (COMMENT MODULE FOR FUNCTION |init-rabbit/fib|)
 (DEFUN |rabbit/fib-37| NIL
  (PROG NIL (DECLARE (SPECIAL |rabbit/fib-37|))
   (GO (PROG2 NIL (CAR **ENV**) (SETQ **ENV** (CDR **ENV**))))
   F-36
   (COMMENT (DEPTH = 0) (FNP = NIL) (VARS = (CONT-35)))
   (SETQ **FUN** **CONT**)
   (SETQ **ONE** 'NIL)
   (RETURN NIL)))
 (SETQ |rabbit/fib-37| (GET '|rabbit/fib-37| 'EXPR))
 (SETQ |init-rabbit/fib| (LIST 'CBETA |rabbit/fib-37| 'F-36))
 (DEFPROP |rabbit/fib-37| |init-rabbit/fib| USER-FUNCTION))
(COMMENT (COMPILE TIME 4 SECONDS))
For more information, please download this package and see README.

This project is hosted on github.

References

  1. Gerald Jay Sussman and Guy Lewis Steele, Jr.. "Scheme: An Interpreter for Extended Lambda Calculus". MIT AI Lab. AI Lab Memo AIM-349. December 1975.
  2. Guy Lewis Steele, Jr.. "RABBIT: A Compiler for SCHEME". Masters Thesis. MIT AI Lab. AI Lab Technical Report AITR-474. May 1978.

These papers are available at http://library.readscheme.org/page1.html.


Home