Next: Programs and definitions, Previous: Quasiquotations, Up: Formal syntax [Index]
Note: Though this grammar does not say so, a top-level
syntax-rules
pattern must be a list pattern, not a vector
pattern or an identifier pattern.
⟨transformer spec⟩ →
(syntax-rules
(⟨identifier⟩*)
⟨syntax rule⟩*)
|(syntax-rules
⟨identifier⟩(
⟨identifier⟩*)
⟨syntax rule⟩*)
⟨syntax rule⟩ →
(
⟨pattern⟩ ⟨template⟩)
⟨pattern⟩ → ⟨pattern identifier⟩
| ⟨underscore⟩
|(
⟨pattern⟩*)
|(
⟨pattern⟩+.
⟨pattern⟩)
|(
⟨pattern⟩* ⟨pattern⟩ ⟨ellipsis⟩ ⟨pattern⟩*)
|(
⟨pattern⟩* ⟨pattern⟩ ⟨ellipsis⟩ ⟨pattern⟩*.
⟨pattern⟩)
|#(
⟨pattern⟩*)
|#(
⟨pattern⟩* ⟨pattern⟩ ⟨ellipsis⟩ ⟨pattern⟩*)
| ⟨pattern datum⟩⟨pattern datum⟩ → ⟨string⟩ | ⟨character⟩ | ⟨boolean⟩ | ⟨number⟩ | ⟨bytevector⟩
⟨template⟩ → ⟨pattern identifier⟩ |
(
⟨template element⟩*)
|(
⟨template element⟩+.
⟨template⟩)
|#(
⟨template element⟩*)
| ⟨template datum⟩⟨template element⟩ → ⟨template⟩ | ⟨template⟩ ⟨ellipsis⟩
⟨template datum⟩ → ⟨pattern datum⟩
⟨pattern identifier⟩ → ⟨any identifier except
...
⟩⟨ellipsis⟩ → ⟨an identifier defaulting to
...
⟩⟨underscore⟩ → ⟨the identifier
_
⟩