4.1 记法

本章(以及本文档的剩余部分)中使用的文法与Racket 精要 一章中基于字符的语法稍微有些不同。使用语法形式 something 的文法如下:

(something [id ...+] an-expr ...)

在此规范中,斜体的是元变量,使用 Racket 标识符的语法,如 idan-expr。因此 an-expr 是一个元变量。 命名约定隐式地定义了各种元变量的含义:

文法中的方括号表示带括号的形式序列,按照约定,形式序列通常使用方括号来表示。 换句话说,方括号并不表示语法形式中可选的部分。

... 表示之前形式的零或多次重复,而 ...+ 表示之前数据的一到多次重复。其它情况下,非斜体的标识符表示其自身。

下面是一些遵守以上文法的示例:

(something [x])
(something [x] (+ 1 2))
(something [x my-favorite-martian x] (+ 1 2) #f)

有些语法形式规范指代了未隐式定义且之前未定义的元变量。这些元变量在主形式之后定义, 使用类 BNF 的格式:

(something-else [thing ...+] an-expr ...)
 
thing = thing-id
  | thing-keyword

上面的示例表示,在形式 something-else 中,thing 为标识符或关键字二者其一。