Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chenyukang/bootstrap-scheme
A quick and very dirty Scheme interpereter.
https://github.com/chenyukang/bootstrap-scheme
Last synced: 3 months ago
JSON representation
A quick and very dirty Scheme interpereter.
- Host: GitHub
- URL: https://github.com/chenyukang/bootstrap-scheme
- Owner: chenyukang
- License: agpl-3.0
- Fork: true (petermichaux/bootstrap-scheme)
- Created: 2013-08-11T11:48:55.000Z (about 11 years ago)
- Default Branch: v0.21
- Last Pushed: 2010-01-25T18:34:09.000Z (almost 15 years ago)
- Last Synced: 2024-04-09T02:33:03.028Z (7 months ago)
- Language: C
- Homepage: http://peter.michaux.ca/articles/scheme-from-scratch-introduction
- Size: 62.5 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README
- Changelog: CHANGES
- License: LICENSE
Awesome Lists containing this project
README
Bootstrap Scheme is a quick and very dirty Scheme interpreter. Its *only* intended use is to compile a self-compiling Scheme-to-Assembly or Scheme-to-C compiler the first time.
Bootstrap Scheme doesn't have many features a Scheme system usually has. It doesn't have numbers other than integers. It doesn't have vectors. It definitely doesn't have a module system, call/cc, macros, dynamic-wind or any other advanced Scheme features.
Bootstrap Scheme is slow. The implementation is an abstract syntax tree node walker with no optimizations. There is no point in making a node walking interpreter any better than the absolute base necessity as the fundamental design of a node walker would never be used in production. Small, easy to read source code is far more important than anything else.
Bootstrap Scheme revels in the opportunity to be very dirty Scheme.
----
Example build and use.
$ cd bootstrap
$ make
cc -Wall -ansi -o scheme scheme.c
$ ./scheme
Welcome to your Scheme REPL. Use ctrl-c to exit.
> #t
#t
> -123
-123
> #\c
#\c
> "adsf"
"asdf"
> (quote ())
()
> (quote (0 . 1))
(0 . 1)
> (quote (0 1 2 3))
(0 1 2 3)
> (quote asdf)
asdf
> (define a 1)
ok
> a
1
> (set! a 2)
ok
> a
2
> (if #t 1 2)
1
> (+ 1 2 3)
6
> +
#
> ((lamba (x) x) 1)
1
> (define (add x y) (+ x y))
ok
> (add 1 2)
3
> add
#
> (define c ((lambda (x) (lambda () x)) 3))
ok
> (c)
3
> (begin 1 2)
2
> (cond (#f 1)
((eq? #t #t) 2)
(else 3))
2
> (let ((x (+ 1 1))
(y (- 5 2)))
(+ x y))
5
> (and 1 2 #f 3)
#f
> (or #f #f 3 #f)
3
> (apply + '(1 2 3))
6
> (define env (environment))
ok
> (eval '(define z 25) env)
ok
> (eval 'z env)
25
> (define out (open-output-port "asdf.txt"))
ok
> (write-car #\c out)
ok
> (close-output-port out)
ok
> (load "program.scm")
program-loaded
> (error "bad move")
"bad move"
exiting
$----
For more information see:
http://peter.michaux.ca/articles/scheme-from-scratch-introduction
----
See the LICENSE file for legal information.