R7RS Scheme LISP compiler for GLLV bytecode, written to work in R3RS
Go to file
Peter McGoron fee4198f2f read: add object encapsulating identifier 2024-09-27 11:26:30 -04:00
miniscm miniscm: string->symbol and symbol->string 2024-09-22 12:09:09 -04:00
COPYING add doubly linked lists, tests, minischeme 2024-08-22 20:05:49 -04:00
Makefile minischeme: add char 2024-08-22 21:51:25 -04:00
README.rst readtable: add lists 2024-09-20 19:11:36 -04:00
chez-compat.scm read: add object encapsulating identifier 2024-09-27 11:26:30 -04:00
doubly-linked-list.scm add sets 2024-08-29 22:24:33 -04:00
linked-list.scm read: add object encapsulating identifier 2024-09-27 11:26:30 -04:00
read.scm read: add object encapsulating identifier 2024-09-27 11:26:30 -04:00
set.scm Revert "object: change to a stateful table" 2024-09-27 11:16:22 -04:00
tests.scm readtables, first pass 2024-09-07 17:47:10 -04:00
util.scm readtable: simplify 2024-09-08 08:22:39 -04:00

README.rst

=======
UNSLISP
=======

R7RS compiler written in a basic form of Scheme. Compiles to Universal
Service GLLV bytecode.

License: GPL-3.0-only

-------------------
Source Restrictions
-------------------

Although the compiler handles all of R7RS, the source of UNSLISP is
designed to be used by a severely limited Scheme interpreter, which

* lacks ``call/cc``, ``call-with-values``, etc
* lacks user definable macros
* has fixnums only
* only uses immutable strings
* does not use "load" recursively
* uses R3RS essential procedures/syntax only (with some exceptions)

The goal is to have the compiler run under the MiniScheme in ``miniscm``
in DOS, and then run in GLLV to compile itself.

A proper implementation must have, in addition to R3RS,

* ``open-input-port``, ``read-char``
* ``open-output-port``, ``write-char``
* ``cond-expand``
* ``and``, ``or``
* ``error``

Hopefully your implementation has input and output ports (there's no other
way to write a compiler). Everything else can be expressed in terms of
macros or R3RS essential procedures.