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:
(define fib
(lambda (n)
(if (< n 2)
n
(+ (fib (- n 1)) (fib (- n 2))))))
(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))
This project is hosted on github.
These papers are available at http://library.readscheme.org/page1.html.