RABBIT: A Compiler for SCHEME (A Dialect of LISP). A Study in Compiler Optimization Based on Viewing LAMBDA as RENAME and Procedure Call as GOTO using the Techniques of Macro Definition of Control and Environment Structures. Source-to-Source Transformation Procedure Integration and Tail-Recursion.
Abstract
We have developed a compiler for the lexically-scoped dialect of LISP known as SCHEME. The compiler knows relatively little about specific data manipulation primitives such as arithmetic operators, but concentrates on general issues of environment and control. Rather than having specialized knowledge about a large variety of control and environment constructs, the compiler handles only a small basis set which reflects the semantics of lambda-calculus. All of the traditional imperative constructs, such as sequencing, assignment, looping, GOTO, as well as many standard LISP constructs such as AND, OR, and COND, are expressed as macros in terms of the applicative basis set. A small number of optimization techniques, coupled with the treatment of function calls as GOTO statements, serve to produce code as good as that produced by more traditional compilers. The macro approach enables speedy implementation of new constructs as desired without sacrificing efficiency in the generated code.
Document Details
- Document Type
- Technical Report
- Publication Date
- May 01, 1978
- Accession Number
- ADA061996
Entities
People
- Guy Lewis Steele Jr.
Organizations
- Massachusetts Institute of Technology