| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| |
|
|
|
|
| |
`(... <template>)` in R6RS+ will escape a single form of ellipses in
the production. I personally do not recommend this: overriding the
ellipsis with a new identifier is the better approach in all circumstances.
|
| |
|
|
|
|
|
|
|
|
| |
Adopts behavior such that
x ... ... => {append ((x ...) ...}
x ... ... ... => {append {append (((x ...) ...) ...)}}
where `{append ...}` occurs at the meta-level after expanding the
patterns. (In the code this is done with an accumulator.)
|
| |
|
|
|
|
|
| |
Previous PNL calculations calculated the PNL against the entire
pattern. This is not useful, because the PNL at each ellipsis pattern
is what is useful. This is also nice because it does not require a
parameter: the PNL can always be calculated locally.
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
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.
|
| | |
|
| | |
|
| | |
|
| |
|