R7RS Scheme LISP compiler for GLLV bytecode, written to work in R3RS
Go to file
Peter McGoron 8bee2d39a4 readtable: simplify
After taking a look at the R7RS syntax and how Chicken parses
directives, I realized that it's easier to have "#!", "#\\", etc.
parse identifiers instead of baking in trie actions. This is slightly
slower but completely removes the trie concept from the readtable,
which simplifies the implementation and removes many corner cases
involving combining readtables with different action types.
2024-09-08 08:22:39 -04:00
miniscm trie: add with test 2024-09-04 02:16:10 -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: simplify 2024-09-08 08:22:39 -04:00
set.scm change around insert, delete, and update to hide representation 2024-09-05 21:18:04 -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.