-
Notifications
You must be signed in to change notification settings - Fork 21
/
04.01 标记法
30 lines (19 loc) · 1.71 KB
/
04.01 标记法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
4.1 标记法
这一章(和其余的文档)使用了一个稍微不同的标记法,而不是基于字符的《Racket语言概要》章节语法。使用语法表something的语法如下所示:
(something [id ...+] an-expr ...)
斜体的元变量在本规范中,如id和an-expr,使用Racket标识符的语法,所以an-expr是一元变量。命名约定隐式定义了许多元变量的含义:
1、以id结尾的元变量表示标识符,如X或my-favorite-martian。
2、一元标识符以keyword结束代表一个关键字,如#:tag。
3、一元标识符以expr结束表达代表任何子表,它将被解析为一个表达式。
4、一元标识符以body结束代表任何子表;它将被解析为局部定义或表达式。只有在没有任何表达式之前,一个body才能解析为一个定义,而最后一个body必须是一个表达式;参见《内部定义》(Internal Definitions)部分。
在语法的方括号表示形式的括号序列,其中方括号通常用于(约定)。也就是说,方括号并不意味着是句法表的可选部分。
…表示前一个表的零个或多个重复,…+表示前面数据的一个或多个重复。否则,非斜体标识代表自己。
根据上面的语法,这里有一些something的合乎逻辑的用法:
(something [x])
(something [x] (+ 1 2))
(something [x my-favorite-martian x] (+ 1 2) #f)
一些语法表规范指的是不隐式定义而不是预先定义的元变量。这样的元变量在主表定义后面使用BNF-like格式提供选择:
(something-else [thing ...+] an-expr ...)
thing = thing-id
| thing-keyword
上面的例子表明,在其它的表中,一个thing要么是标识符要么是关键字。