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.