beowulf.read
This provides the reader required for boostrapping. It’s not a bad reader - it provides feedback on errors found in the input - but it isn’t the real Lisp reader.
Intended deviations from the behaviour of the real Lisp reader are as follows:
- It reads the meta-expression language
MEXPR
in addition to the symbolic expression languageSEXPR
, which I do not believe the Lisp 1.5 reader ever did; - It treats everything between a semi-colon and an end of line as a comment, as most modern Lisps do; but I do not believe Lisp 1.5 had this feature.
Both these extensions can be disabled by using the --strict
command line switch.
gen-cond
(gen-cond p)
Generate a cond statement from this simplified parse tree fragment p
; returns nil
if p
does not represent a (MEXPR) cond statement.
gen-cond-clause
(gen-cond-clause p)
Generate a cond clause from this simplified parse tree fragment p
; returns nil
if p
does not represent a cond clause.
gen-dot-terminated-list
(gen-dot-terminated-list p)
Generate a list, which may be dot-terminated, from this partial parse tree ‘p’. Note that the function acts recursively and progressively decapitates its argument, so that the argument will not always be a valid parse tree.
gen-fn-call
(gen-fn-call p)
Generate a function call from this simplified parse tree fragment p
; returns nil
if p
does not represent a (MEXPR) function call.
generate
(generate p)
Generate lisp structure from this parse tree p
. It is assumed that p
has been simplified.
gsp
macro
(gsp s)
Shortcut macro - the internals of read; or, if you like, read-string. Argument s
should be a string representation of a valid Lisp expression.
parse
Parse a string presented as argument into a parse tree which can then be operated upon further.
READ
(READ input)
An implementation of a Lisp reader sufficient for bootstrapping; not necessarily the final Lisp reader.
simplify
(simplify p)
(simplify p context)
Simplify this parse tree p
. If p
is an instaparse failure object, throw an ex-info
, with p
as the value of its :failure
key.
strip-leading-zeros
(strip-leading-zeros s)
(strip-leading-zeros s prefix)
read-string
interprets strings with leading zeros as octal; strip any from this string s
. If what’s left is empty (i.e. there were only zeros, return "0"
.