2024-08-22 20:05:49 -04:00
|
|
|
=======
|
|
|
|
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
|
2024-08-26 17:52:19 -04:00
|
|
|
* only uses immutable strings
|
2024-08-22 20:05:49 -04:00
|
|
|
* does not use "load" recursively
|
2024-09-07 21:10:40 -04:00
|
|
|
* uses R3RS essential procedures only (with some exceptions)
|
2024-09-07 17:47:10 -04:00
|
|
|
|
|
|
|
The goal is to have the compiler run under the MiniScheme in ``miniscm``
|
|
|
|
in DOS, and then run in GLLV to compile itself.
|
|
|
|
|
2024-09-07 21:10:40 -04:00
|
|
|
A proper implementation must have, in addition to R3RS,
|
2024-09-07 17:47:10 -04:00
|
|
|
|
|
|
|
* ``open-input-port``, ``read-char``
|
|
|
|
* ``open-output-port``, ``write-char``
|
|
|
|
* ``cond-expand``
|
|
|
|
* ``and``, ``or``
|
|
|
|
* ``error``
|
|
|
|
|
2024-09-07 21:10:40 -04:00
|
|
|
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.
|