Next: Transformers, Previous: Expressions, Up: Formal syntax [Index]
The following grammar for quasiquote expressions is not context-free. It is presented as a recipe for generating an infinite number of production rules. Imagine a copy of the following rules for D = 1, 2, 3, …, where D is the nesting depth.
⟨quasiquotation⟩ → ⟨quasiquotation 1⟩
⟨qq template 0⟩ → ⟨expression⟩
⟨quasiquotation D⟩ →
`
⟨qq template D⟩ |(quasiquote
⟨qq template D⟩)
⟨qq template D⟩ → ⟨simple datum⟩ | ⟨list qq template D⟩ | ⟨vector qq template D⟩ | ⟨unquotation D⟩
⟨list qq template D⟩ →
(
⟨qq template or splice D⟩*)
|(
⟨qq template or splice D⟩+.
⟨qq template D⟩)
|'
⟨qq template D⟩ | ⟨quasiquotation D+1⟩⟨vector qq template D⟩ →
#(
⟨qq template or splice D⟩*)
⟨unquotation D⟩ →
,
⟨qq template D-1⟩ |(unquote
⟨qq template D-1⟩)
⟨qq template or splice D⟩ → ⟨qq template D⟩ | ⟨splicing unquotation D⟩
⟨splicing unquotation D⟩ →
,@
⟨qq template D-1⟩ |(unquote-splicing
⟨qq template D-1⟩)
In ⟨quasiquotation⟩s, a ⟨list qq template D⟩ can sometimes be confused with either an ⟨unquotation D⟩ or a ⟨splicing unquotation D⟩.
The interpretation as an ⟨unquotation⟩ or ⟨splicing unquotation D⟩ takes precedence.