Next: , Previous: , Up: Formal syntax   [Index]


7.1.4 Quasiquotations

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.