| Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
The compiler now returns a DAG implemented as a hash table. The keys
are ellipsis group IDs and the values are lists of ellipsis group IDS.
When a producer encounters a repeated form, it uses the information in
this DAG to confirm that the production is valid.
|
|
Add precise definitions, with examples, for concepts like the ellipsis
nesting level. This should clarify what the matcher is doing. They
should apply to any implementation of the Macrological Fascicle's
description of patterns.
This also adds ellipsis grouping. This is used to determine which
identifiers are allowed to be repeated with each other in output.
TODO: The concept of group needs to encompass nested identifiers.
For instance
(let-values (((name ...) value) ...) body ...)
does not allow
((name ...) body ...)
but the current system does not handle this.
|
|
|
|
|
|
|
|
|
|
Expander now uses dynamically scoped variables. The old lexical scope
variable implementation was getting to four nested lambdas, which was
unreadable.
The dynamic variables are clearly labeled and segregated from the rest
of the code. The actual compiler interacts with the dynamic variables
through an API.
The previous compiler did not handle empty ellipses match properly.
This has some more work to fix that.
|
|
|
|
|
|
|
|
|