Revised(5) Report on the Algorithmic Language Scheme - Quasiquotations

### 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, .... D keeps track of 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.