[120] expression = primitive-expression
| derived-expression
[121] primitive-expression = variable-reference
| literal
| procedure-call
| conditional
[122] variable-reference = variable
[123] variable = identifier
[124] literal = quotation | self-evaluating
[125] quotation = 'datum
| (quote datum)
[126] datum = simple-datum
| list
[127] simple-datum = boolean
| number
| character
| string
| symbol
| keyword
| glyph-identifier
[128] list = (datum*)
| 'datum
[129] self-evaluating = boolean
| number
| character
| string
| keyword
| glyph-identifier
[130] procedure-call = (operator operand*)
[131] operator = expression
[132] operand = expression
[133] conditional = (if
test
consequent
alternate)
[134] test = expression
[135] consequent = expression
[136] alternate = expression
[137] derived-expression = cond-expression
| case-expression
| and-expression
| or-expression
[138] cond-expression = (cond
cond-clause+)
| (cond
cond-clause*
(else expression))
[139] cond-clause = (test expression)
[140] case-expression = (case
key
case-clause+)
| (case
key
case-clause*
(else expression))
[141] key = expression
[142] case-clause = ((datum*) expression)
[143] and-expression = (and test*)
[144] or-expression = (or test*)
[145] definition = (define variable expression)