The datum syntax describes the syntax of syntactic data in terms of a
sequence of lexemes, as defined in the lexical syntax.
The following grammar describes the syntax of syntactic data in terms of various kinds of lexemes defined in the grammar in section “Lexical Syntax”:
datum ::= defining-datum
| nondefining-datum
| defined-datum
defining-datum ::= #indexnum=nondefining-datum
defined-datum ::= #indexnum#
nondefining-datum ::= lexeme-datum
| compound-datum
indexnum ::= digit+
lexeme-datum ::= boolean | number
| character | string | symbol
symbol ::= identifier
compound-datum ::= list | vector | uniform-vector | xml-literal
list ::= (datum*)
| (datum+ . datum)
| abbreviation
vector ::= #(datum*)
uniform-vector ::= TODO
abbreviation ::= r6rs-abbreviation | kawa-abbreviation
r6rs-abbreviation ::= abbrev-prefix datum
abbrev-prefix ::= ’ | ‘ | , | ,@
| #’ | #‘
kawa-abbreviation ::= XXX
The following abbreviations are expanded at read-time:
’datum
means (quote datum).
‘datum
means (quasiquote datum).
,datum
means (unquote datum).
,@datum
means (unquote-splicing datum).
#’datum
means (syntax datum).
#‘datum
means (quasisyntax datum).
#,datum
means (unsyntax datum).
This abbreviation is currently only recognized when nested inside an explicit
#‘datum form,
because of a conflict with SRFI-10 named constructors.
#,@datum
means (unsyntax-splicing datum).
datum1:datum2
means ($lookup$ datum1 (quasiquote datum2)).
See Colon notation.
[expression ...]
means ($bracket-list$ expression ...).
operator[expression ...]
means ($bracket-apply$ operator expression ...).