Next: Transformers, Previous: Expression, Up: Formal syntax [Contents][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, …. 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.