R7RS Scheme LISP compiler for GLLV bytecode, written to work in R3RS
Go to file
Peter McGoron ac28546a29 miniscm: list->string 2024-09-08 12:01:18 -04:00
miniscm miniscm: list->string 2024-09-08 12:01:18 -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: case folding 2024-09-07 21:10:40 -04:00
chez-compat.scm readtables, first pass 2024-09-07 17:47:10 -04:00
doubly-linked-list.scm add sets 2024-08-29 22:24:33 -04:00
read.scm readtable: handle EOF by returning EOF symbol 2024-09-08 08:46:15 -04:00
set.scm miniscm: add better support for immutable strings, and refactor to use real strings 2024-09-08 10:10:12 -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 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.