Swift学习之每日一tip (2)词法结构

语言参考:

“箭头(→)用来标记语法产式,可以被理解为“可以包含”。”
“选择性的语法产式由竖线(|)分隔。当可选用的语法产式太多时,为了阅读方便,它们将被拆分为多行语法产式规则。”

注释:

“注释(comments)被编译器当作空白处理。单行注释由 // 开始直到该行结束。多行注释由 /* 开始,以 */ 结束。可以嵌套注释,但注意注释标记必须匹配。

标识符:

标识符(identifiers)可以由以下的字符开始:大写或小写的字母 A 到 Z、下划线 _、基本多语言面(Basic Multilingual Plane)中的 Unicode 非组合字符以及基本多语言面以外的非专用区(Private Use Area)字符。首字符之后,标识符允许使用数字和 Unicode 字符组合。

使用保留字(reserved word)作为标识符,需要在其前后增加反引号 `。例如,class 不是合法的标识符,但可以使用 `class`。反引号不属于标识符的一部分,`x` 和 x 表示同一标识符。

闭包(closure)中如果没有明确指定参数名称,参数将被隐式命名为 $0、$1、$2...这些命名在闭包作用域内是合法的标识符。

关键字:

“被保留的关键字(keywords)不允许用作标识符,除非被反引号转义,参见 标识符。”

用作声明的关键字: class、deinit、enum、extension、func、import、init、let、protocol、static、struct、subscript、typealias、var

用作语句的关键字: break、case、continue、default、do、else、fallthrough、if、in、for、return、switch、where、while

用作表达和类型的关键字: as、dynamicType、is、new、super、self、Self、Type、COLUMNFILEFUNCTIONLINE

特定上下文中被保留的关键字: associativity、didSet、get、infix、inout、left、mutating、none、nonmutating、operator、override、postfix、 precedence、prefix、right、set、unowned、unowned(safe)、unowned(unsafe)、weak、willSet,[…]

整型字面量:

“整型字面量默认用十进制表示,可以加前缀来指定其他的进制,二进制字面量加0b八进制字面量加 0o十六进制字面量加 0x。”
允许使用下划线 _ 来增加数字的可读性,下划线不会影响字面量的值。整型字面量也可以在数字前加 0,同样不会影响字面量的值。

1000_000     // 等于 1000000
005          // 等于 5

浮点字面值:

指数部分由大写或小写字母 p 后跟十进制数字串组成,这串数字表示 p 之前的数量乘以 2 的几次方。

例如:0xFp2 表示 15 ⨉ 2^2,也就是 60;同样,0xFp-2 表示 15 ⨉ 2^-2,也就是 3.75。”

“负的浮点型字面量由一元运算符减号 - 和浮点型字面量组成,例如 -42.0。这代表一个表达式,而不是一个浮点整型字面量。”

文本型字面值:

文本型字面量中不能包含未转义的双引号 “、未转义的反斜线\、回车符(carriage return)或换行符(line feed)。

可以在文本型字面量中使用的转义特殊符号如下:

空字符(Null Character)\0
反斜线(Backslash)\
水平 Tab (Horizontal Tab)\t
换行符(Line Feed)\n
回车符(Carriage Return)\r
双引号(Double Quote)\”
单引号(Single Quote)\’
字符也可以用以下方式表示:

\x 后跟两位十六进制数字
\u 后跟四位十六进制数字
\U 后跟八位十六进制数字
后跟的数字表示一个 Unicode 码点。

文本型字面量允许在反斜线小括号 \() 中插入表达式的值。插入表达式(interpolated expression)不能包含未[…]

运算符:

“运算符由一个或多个以下字符组成: /、=、-、+、!、、%、<、>、&、|、^、~、.。也就是说,标记 =, ->、//、/、*/、. 以及一元前缀运算符 & 属于保留字,这些标记不能被重写或用于自定义运算符。”
运算符前的字符 (、[ 和 { ;运算符后的字符 )、] 和 } 以及字符 ,、; 和 : 都将用于空白检测。

以上规则需注意一点,如果运算符 ! 或 ? 左侧没有空白,则不管右侧是否有空白都将被看作后缀运算符。如果将 ? 用作可选类型(optional type)修饰,左侧必须无空白。如果用于条件运算符 ? :,必须两侧都有空白

在特定构成中 ,以 < 或 > 开头的运算符会被分离成两个或多个标记,剩余部分以同样的方式会被再次分离。因此,在 Dictionary<String, Array<Int>> 中没有必要添加空白来消除闭合字符 > 的歧义。在这个例子中, 闭合字符 > 被看作单字符标记,而不会被误解为移位运算符 >>。

posted @ 2015-05-08 17:59  SarielTang  阅读(143)  评论(0编辑  收藏  举报