7.1.3 Expressions
<expression> –> <variable>
| <literal>
| <procedure call>
| <lambda expression>
| <conditional>
| <assignment>
| <derived expression>
| <macro use>
| <macro block>
<literal> –> <quotation> | <self-evaluating>
<self-evaluating> –> <boolean> | <number>
| <character> | <string>
<quotation> –> '<datum> | (quote <datum>)
<procedure call> –> (<operator> <operand>*)
<operator> –> <expression>
<operand> –> <expression>
<lambda expression> –> (lambda <formals> <body>)
<formals> –> (<variable>*) | <variable>
| (<variable>+ . <variable>)
<body> –> <definition>* <sequence>
<sequence> –> <command>* <expression>
<command> –> <expression>
<conditional> –> (if <test> <consequent> <alternate>)
<test> –> <expression>
<consequent> –> <expression>
<alternate> –> <expression> | <empty>
<assignment> –> (set! <variable> <expression>)
<derived expression> –>
(cond <cond clause>+)
| (cond <cond clause>* (else <sequence>))
| (case <expression>
<case clause>+)
| (case <expression>
<case clause>*
(else <sequence>))
| (and <test>*)
| (or <test>*)
| (let (<binding spec>*) <body>)
| (let <variable> (<binding spec>*) <body>)
| (let* (<binding spec>*) <body>)
| (letrec (<binding spec>*) <body>)
| (begin <sequence>)
| (do (<iteration spec>*)
(<test> <do result>)
<command>*)
| (delay <expression>)
| <quasiquotation>
<cond clause> –> (<test> <sequence>)
| (<test>)
| (<test> => <recipient>)
<recipient> –> <expression>
<case clause> –> ((<datum>*) <sequence>)
<binding spec> –> (<variable> <expression>)
<iteration spec> –> (<variable> <init> <step>)
| (<variable> <init>)
<init> –> <expression>
<step> –> <expression>
<do result> –> <sequence> | <empty>
<macro use> –> (<keyword> <datum>*)
<keyword> –> <identifier>
<macro block> –>
(let-syntax (<syntax spec>*) <body>)
| (letrec-syntax (<syntax spec>*) <body>)
<syntax spec> –> (<keyword> <transformer spec>)