Skip to content

joefarebrother/scheme

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

scheme

(what will be) A scheme compiler

The bootstrap directory contains the following: bootstrap.c is a bootstrap interpreter for scheme, intended for bootstraping compile/compile.scm (currently non-existant because git doeesn't track empty directories). prims.c contains the primitive procedures for the bootstrapper lib.scm implements a standard library for the bootstrapper to run.

To test, type at a terminal:

$ make
$ ./bootstrap/bootstrap
> (load "bootstrap/lib.scm")

prims.c currently defines:

  • char->integer
  • integer->char
  • number->string
  • string->number
  • symbol->string
  • string->symbol
  • boolean?
  • char?
  • integer?
  • pair?
  • symbol?
  • procedure?
  • string?
  • port?
  • quotient
  • remainder
  • =
  • <
  • cons
  • car
  • cdr
  • set-car!
  • set-cdr!
  • eq?
  • string-append
  • apply
  • eval
  • exit
  • interaction-enviroment
  • enviroment
  • null-enviroment
  • open-input-file
  • read-char
  • unread-char (non-standard) - (unread-char char port) pushes a character back to an input port
  • eof-object?
  • close-input-file
  • read
  • load
  • open-output-file (takes a non-standard optional second argument a symbol indicating what to di if it already exists: overwrite or append. Default is overwrite.)
  • close-output-file
  • write-char
  • write
  • display
  • error
  • string-append
  • system (non-standard) - excecutes shell code
  • gensym

bootstrap.c currently recognises the following special forms:

  • if
  • set!
  • define
  • quote
  • lambda
  • begin
  • cond, including =>
  • let
  • and
  • or
  • declare (non-standard) - ignored by the interpreter, the compiler will use them to aid compilation

bootstrap/lib.scm defines:

  • number?
  • list
  • not
  • append (varadic version)
  • length
  • reverse
  • vector? (always false)
  • range
  • map
  • filter
  • foldl
  • foldr
  • accumulate
  • all c...r functions
  • memq
  • memv

The following (non-standard) variable is availiable on startup:

  • args - command line arguments

Currently tested on Ubuntu only. SHOULD work on all OSs currently (though untested) but I only plan to support unix.

About

A scheme interpreter and compiler

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published