diff --git a/src/chapter3/10_Summary_of_the_Grammar.md b/src/chapter3/10_Summary_of_the_Grammar.md index 7736c87..0606441 100644 --- a/src/chapter3/10_Summary_of_the_Grammar.md +++ b/src/chapter3/10_Summary_of_the_Grammar.md @@ -1,45 +1,49 @@ #语法总结 - ##语句 - ###语句语法 -语句→表达式;可选 +语句 → 表达式 ;可选 -语句→声明;可选 +语句 → 声明 ;可选 -语句→循环语句;可选 +语句 → 循环语句 ;可选 -语句→分支语句;可选 +语句 → 分支语句 ;可选 -语句→标记语句;可选 +语句 → 标记语句 -语句→控制转移语句;可选 +语句 → 控制转移语句 ;可选 -多条语句→语句 多条语句;可选 +多条语句 → 语句 多条语句 可选 ###循环语句语法 -循环语句 → for语句 +循环语句 → for 语句 + 循环语句 → for in 语句 + 循环语句 → while 语句 + 循环语句 → do-while 语句 ###for 语句语法 -for语句 → for 初始条件 可选; 表达式 可选 ;表达式 可选 代码块 +for语句 → **for** for-初始条件 可选; 表达式 可选 ;表达式 可选 代码块 -for语句 → for ( 初始条件 可选; 表达式 可选 ;表达式 可选 ) 代码块 +for语句 → **for** ( for-初始条件 可选; 表达式 可选 ;表达式 可选 ) 代码块 -for 初始条件 → 变量声明 | 表达式列表 +for-初始条件 → 变量声明 | 表达式列表 ###for-in 语句语法 for-in 语句 → for 模式 in 表达式代码块 + ###while 语句语法 -while语句 → while while条件代码块 +while语句 → **while** while-条件 代码块 -while条件 →表达式 | 声明 +while-条件 → 表达式 | 声明 ###do-while 语句语法 -do-while语句 → do 代码块 while while条件 +do-while语句 → **do** 代码块 **while** while-条件 + + ###分支语句语法 @@ -47,31 +51,33 @@ do-while语句 → do 代码块 while while条件 分支语句 → switch语句 + ###if 语句语法 -if语句 → if if条件 代码块 else 子句 可选 +if语句 → if if-条件 代码块 else 子句 可选 -if条件 → 表达式 | 什么 +if条件 → 表达式 | 申明 -else子句 → else 代码块 | else if语句 +else子句 → else 代码块 | else if-语句 ###switch语句语法 -switch语句 → switch 表达式 { switch-case列表 可选 } +switch语句 → **switch** 表达式 { switch-case列表 可选 } -switch-case列表 → switch-case 列表 可选 +switch-case列表 → switch-case switch-case列表 可选 switch-case → case标签 多条语句 | default标签 多条语句 switch-case → case标签 ; | default标签 ; -case标签 → case case项列表 : +case标签 → **case** case项列表 : + +case项列表 → 模式 监护子句 可选 | 模式 监护子句 可选 , case项列表 -case项列表 → 模式 guard-clause 可选 | 模式 guard-clause 可选 , case项列表 +default标签 → **default** : -default标签 → default : +监护字句 → **where** 监护表达式 -guard-clause → where guard-expression +监护表达式 → 表达式 -guard-expression → 表达式 ###标记语句语法 标记语句 → 语句标签 循环语句 | 语句标签 switch语句 @@ -81,28 +87,37 @@ guard-expression → 表达式 标签名称 → 标识符 ###控制传递语句语法 -控制传递语句 → break语句 +控制传递语句 → break-语句 -控制传递语句 → continue语句 +控制传递语句 → continue-语句 -控制传递语句 → fallthrough语句 +控制传递语句 → fallthrough-语句 -控制传递语句 → return语句 +控制传递语句 → return-语句 -####break 语句语法 -break语句 → break 标签名称 可选 -####continue 语句语法 -continue语句 → continue 标签名称 可选 +###break 语句语法 +break语句 → **break** 标签名称 可选 -####fallthrough 语句语法 -fallthrough语句 → fallthrough + + +###continue 语句语法 +continue语句 → **continue** 标签名称 可选 + + +###fallthrough 语句语法 +fallthrough-语句 → **fallthrough** ####return 语句语法 -return语句 → return 表达式 可选 +return语句 → **return** 表达式 可选 + -###泛型参数 -泛型形参子句语法 泛型参数子句 → < 泛型参数列表 约束子句 可选 > +##泛型和参数 + + +###泛型形参子句语法 + +泛型参数子句 → < 泛型参数列表 约束子句 可选 > 泛型参数列表 → 泛形参数 | 泛形参数 , 泛型参数列表 @@ -112,7 +127,7 @@ return语句 → return 表达式 可选 泛形参数 → 类型名称 : 协议合成类型 -约束子句 → where 约束列表 +约束子句 → **where** 约束列表 约束列表 → 约束 | 约束 , 约束列表 @@ -124,6 +139,7 @@ return语句 → return 表达式 可选 同类型约束 → 类型标识 == 类型标识 + ###泛型参数子句语法 泛型参数子句 → < 泛型参数列表 > @@ -131,8 +147,10 @@ return语句 → return 表达式 可选 泛型参数 → 类型 -###声明 -声明语法 +##声明 + + +###声明语法 声明 → 导入声明 @@ -166,25 +184,30 @@ return语句 → return 表达式 可选 声明描述符列表 → 声明描述符 声明描述符列表 可选 -声明描述符 → class | mutating | nonmutating | override | static | unowned | unowned(safe) | unowned(unsafe) | weak +声明描述符 → **class** | **mutating** | **nonmutating** | **override** | **static** | **unowned** | **unowned(safe) **| **unowned(unsafe)** | **weak** + -####顶级声明语法 +###顶级声明语法 顶级声明 → 多条语句 可选 + ###代码块语法 代码块 → { 多条语句 可选 } + + ###导入声明语法 -导入声明 → 属性列表 可选 import 导入类型 可选 导入路径 +导入声明 → 属性列表 可选 **import** 导入类型 可选 导入路径 -导入类型 → typealias | struct | class | enum | protocol | var | func +导入类型 → **typealias** | **struct** | **class** | **enum** | **protocol** | **var** | **func** 导入路径 → 导入路径标识符 | 导入路径标识符 . 导入路径 导入路径标识符 → 标识符 | 运算符 + ###常数声明语法 -常量声明 → 属性列表 可选 声明描述符(Specifiers)列表 可选 let 模式构造器列表 +常量声明 → 属性列表 可选 声明描述符列表 可选 **let** 模式构造器列表 模式构造器列表 → 模式构造器 | 模式构造器 , 模式构造器列表 @@ -192,6 +215,7 @@ return语句 → return 表达式 可选 构造器 → = 表达式 + ###变量声明语法 变量声明 → 变量声明头 模式构造器列表 @@ -199,11 +223,11 @@ return语句 → return 表达式 可选 变量声明 → 变量声明头 变量名 类型注解 getter-setter块 -变量声明 → 变量声明头 变量名 类型注解 getter-setter关键字(Keyword)块 +变量声明 → 变量声明头 变量名 类型注解 getter-setter关键字块 变量声明 → 变量声明头 变量名 类型注解 构造器 可选 willSet-didSet代码块 -变量声明头 → 属性列表 可选 声明描述符列表 可选 var +变量声明头 → 属性列表 可选 声明描述符列表 可选 **var** 变量名称 → 标识符 @@ -211,60 +235,65 @@ getter-setter块 → { getter子句 setter子句 可选 } getter-setter块 → { setter子句 getter子句 } -getter子句 → 属性列表 可选 get 代码块 +getter子句 → 属性列表 可选 **get** 代码块 + +setter子句 → 属性列表 可选 **set** setter名称 可选 代码块 + +setter名称 → **(** 标识符 **)** -setter子句 → 属性列表 可选 set setter名称 可选 代码块 +getter-setter关键字块 → **{** getter关键字子句 setter关键字子句 可选 **}** -setter名称 → ( 标识符 ) +getter-setter关键字块 → **{ **setter关键字子句 getter关键字子句 **}** -getter-setter关键字块 → { getter关键字子句 setter关键字子句 可选 } +getter关键字子句 → 属性列表 可选 **get** -getter-setter关键字块 → { setter关键字子句 getter关键字子句 } +setter关键字子句 → 属性列表 可选 **set** -getter关键字子句 → 属性列表 可选 get +willSet-didSet代码块 → **{** willSet子句 didSet子句 可选**}** -setter关键字子句 → 属性列表 可选 set +willSet-didSet代码块 → **{** didSet子句 willSet子句 **}** -willSet-didSet代码块 → { willSet子句 didSet子句 可选 } +willSet子句 → 属性列表 可选 **willSet** setter名称 可选 代码块 -willSet-didSet代码块 → { didSet子句 willSet子句 } +didSet子句 → 属性列表 可选 **didSet** setter名称 可选 代码块 -willSet子句 → 属性列表 可选 willSet setter名称 可选 代码块 -didSet子句 → 属性列表 可选 didSet setter名称 可选 代码块 -####类型别名声明语法 +###类型别名声明语法 类型别名声明 → 类型别名头 类型别名赋值 -类型别名头 → typealias 类型别名名称 +类型别名头 → **typealias** 类型别名名称 类型别名名称 → 标识符 类型别名赋值 → = 类型 -####函数声明语法 + + + +###函数声明语法 函数声明 → 函数头 函数名 泛型参数子句 可选 函数签名 函数体 -函数头 → 属性列表 可选 声明描述符列表 可选 func +函数头 → 属性列表 可选 声明描述符列表 可选 **func** 函数名 → 标识符 | 运算符 -函数签名 → parameter-clauses 函数结果 可选 +函数签名 → 参数子句列表 函数结果 可选 函数结果 → → 属性列表 可选 类型 函数体 → 代码块 -parameter-clauses → 参数子句 parameter-clauses 可选 +参数子句列表 → 参数子句 参数子句列表 可选 -参数子句 → ( ) | ( 参数列表 ... 可选 ) +参数子句 → **( ) **| ( 参数列表 ... 可选 ) 参数列表 → 参数 | 参数 , 参数列表 -参数 → inout 可选 let 可选 # 可选 参数名 局部参数名 可选 类型注解 默认参数子句 可选 +参数 → **inout** 可选 **let** 可选 **#** 可选 参数名 局部参数名 可选 类型注解 默认参数子句 可选 -参数 → inout 可选 var # 可选 参数名 局部参数名 可选 类型注解 默认参数子句 可选 +参数 → **inout** 可选 **var** **#** 可选 参数名 局部参数名 可选 类型注解 默认参数子句 可选 参数 → 属性列表 可选 类型 @@ -274,6 +303,9 @@ parameter-clauses → 参数子句 parameter-clauses 可选 默认参数子句 → = 表达式 + + + ###枚举声明语法 枚举声明 → 属性列表 可选 联合式枚举 | 属性列表 可选 原始值式枚举 @@ -281,13 +313,13 @@ parameter-clauses → 参数子句 parameter-clauses 可选 union-style-enum-members → union-style-enum-member union-style-enum-members 可选 -union-style-enum-member → 声明 | 联合式(Union Style)的枚举case子句 +union-style-enum-member → 声明 | 联合式的枚举case子句 -联合式(Union Style)的枚举case子句 → 属性列表 可选 case 联合式(Union Style)的枚举case列表 +联合式的枚举case子句 → 属性列表 可选 **case** 联合式的枚举case列表 -联合式(Union Style)的枚举case列表 → 联合式(Union Style)的case | 联合式(Union Style)的case , 联合式(Union Style)的枚举case列表 +联合式的枚举case列表 → 联合式的case | 联合式的case , 联合式的枚举case列表 -联合式(Union Style)的case → 枚举的case名 元组类型 可选 +联合式的case → 枚举的case名 元组类型 可选 枚举名 → 标识符 @@ -299,7 +331,7 @@ union-style-enum-member → 声明 | 联合式(Union Style)的枚举case子句 原始值式枚举成员 → 声明 | 原始值式枚举case子句 -原始值式枚举case子句 → 属性列表 可选 case 原始值式枚举case列表 +原始值式枚举case子句 → 属性列表 可选 **case** 原始值式枚举case列表 原始值式枚举case列表 → 原始值式枚举case | 原始值式枚举case , 原始值式枚举case列表 @@ -307,22 +339,26 @@ union-style-enum-member → 声明 | 联合式(Union Style)的枚举case子句 原始值赋值 → = 字面量 -####结构体声明语法 -结构体声明 → 属性列表 可选 struct 结构体名称 泛型参数子句 可选 类型继承子句 可选 结构体主体 + +###结构体声明语法 +结构体声明 → 属性列表 可选 **struct** 结构体名称 泛型参数子句 可选 类型继承子句 可选 结构体主体 结构体名称 → 标识符 结构体主体 → { 声明列表 可选 } -####类声明语法 + +###类声明语法 类声明 → 属性列表 可选 class 类名 泛型参数子句 可选 类型继承子句 可选 类主体 类名 → 标识符 类主体 → { 声明列表 可选 } -####协议声明语法 -协议声明 → 属性列表 可选 protocol 协议名 类型继承子句 可选 协议主体 + + +###协议声明语法 +协议声明 → 属性列表 可选 **protocol** 协议名 类型继承子句 可选 协议主体 协议名 → 标识符 @@ -338,72 +374,94 @@ union-style-enum-member → 声明 | 联合式(Union Style)的枚举case子句 协议成员声明 → 协议关联类型声明 -协议成员声明列表 → 协议成员声明 协议成员声明(Declarations)列表 可选 +协议成员声明列表 → 协议成员声明 协议成员声明列表 可选 + + + +###协议属性声明语法 +协议属性声明 → 变量声明头 变量名 类型注解 getter-setter关键字块 + -####协议属性声明语法 -协议属性声明 → 变量声明头 变量名 类型注解 getter-setter关键字(Keyword)块 -####协议方法声明语法 -协议方法声明 → 函数头 函数名 泛型参数子句 可选 函数签名(Signature) +###协议方法声明语法 +协议方法声明 → 函数头 函数名 泛型参数子句 可选 函数签名 -####协议构造器声明语法 + + + +###协议构造器声明语法 协议构造器声明 → 构造器头 泛型参数子句 可选 参数子句 -####协议下标脚本声明语法 -协议下标脚本声明 → 下标脚本头 下标脚本结果(Result) getter-setter关键字(Keyword)块 -####协议关联类型声明语法 + +###协议下标脚本声明语法 +协议下标脚本声明 → 下标脚本头 下标脚本结果 getter-setter关键字块 + + + +###协议关联类型声明语法 协议关联类型声明 → 类型别名头 类型继承子句 可选 类型别名赋值 可选 -####构造器声明语法 + + +###构造器声明语法 构造器声明 → 构造器头 泛型参数子句 可选 参数子句 构造器主体 -构造器头 → 属性列表 可选 convenience 可选 init +构造器头 → 属性列表 可选 **convenience** 可选 **init** 构造器主体 → 代码块 -####析构器声明语法 -析构器声明 → 属性列表 可选 deinit 代码块 -####扩展声明语法 -扩展声明 → extension 类型标识 类型继承子句 可选 extension-主体 +###析构器声明语法 + +析构器声明 → 属性列表 可选 **deinit** 代码块 + + +###扩展声明语法 +扩展声明 → **extension** 类型标识 类型继承子句 可选 extension-主体 extension-主体 → { 声明列表 可选 } -####下标脚本声明语法 + +###下标脚本声明语法 下标脚本声明 → 下标脚本头 下标脚本结果 代码块 下标脚本声明 → 下标脚本头 下标脚本结果 getter-setter块 下标脚本声明 → 下标脚本头 下标脚本结果 getter-setter关键字块 -下标脚本头 → 属性列表 可选 subscript 参数子句 +下标脚本头 → 属性列表 可选 下表脚本参数子句 下标脚本结果 → → 属性列表 可选 类型 -####运算符声明语法 + +###运算符声明语法 运算符声明 → 前置运算符声明 | 后置运算符声明 | 中置运算符声明 -前置运算符声明 → 运算符 prefix 运算符 { } +前置运算符声明 → **operator prefix** 运算符 { } -后置运算符声明 → 运算符 postfix 运算符 { } +后置运算符声明 → **operator postfix** 运算符 { } -中置运算符声明 → 运算符 infix 运算符 { 中置运算符属性 可选 } +中置运算符声明 → **operator infix** 运算符 { 中置运算符属性 可选 } 中置运算符属性 → 优先级子句 可选 结和性子句 可选 -优先级子句 → precedence 优先级水平 +优先级子句 → **precedence** 优先级水平 优先级水平 → 数值 0 到 255 -结和性子句 → associativity 结和性 +结和性子句 → **associativity** 结和性 -结和性 → left | right | none +结和性 → **left** | **right** | **none** -###模式 -模式语法 + +##模式 + + + +###模式语法 模式 → 通配符模式 类型注解 可选 @@ -419,40 +477,55 @@ extension-主体 → { 声明列表 可选 } 模式 → 表达式模式 -####通配符模式语法 -通配符模式 → _ +###通配符模式语法 + +通配符模式 → **_** + + ###标识符模式语法 标识符模式 → 标识符 -####值绑定模式语法 -值绑定模式 → var 模式 | let 模式 -####元组模式语法 +###值绑定模式语法 + +值绑定模式 → **var** 模式 | **let** 模式 + + +###元组模式语法 元组模式 → ( 元组模式元素列表 可选 ) 元组模式元素列表 → 元组模式元素 | 元组模式元素 , 元组模式元素列表 元组模式元素 → 模式 -####枚举用例模式语法 + + +###枚举用例模式语法 枚举用例模式 → 类型标识 可选 . 枚举的case名 元组模式 可选 -####类型转换模式语法 + + +###类型转换模式语法 类型转换模式 → is模式 | as模式 -is模式 → is 类型 +is模式 → **is** 类型 -as模式 → 模式 as 类型 +as模式 → 模式 **as** 类型 -####表达式模式语法 + + +###表达式模式语法 表达式模式 → 表达式 -###属性 -####特性语法 + +##属性 + + +####属性语法 属性 → @ 属性名 属性参数子句 可选 属性名 → 标识符 @@ -463,30 +536,36 @@ as模式 → 模式 as 类型 平衡令牌列表 → 平衡令牌 平衡令牌列表 可选 -平衡令牌 → ( 平衡令牌列表 可选 ) +平衡令牌 → **(** 平衡令牌列表 可选 **)** -平衡令牌 → [ 平衡令牌列表 可选 ] +平衡令牌 → **[** 平衡令牌列表 可选 **]** -平衡令牌 → { 平衡令牌列表 可选 } +平衡令牌 → **{** 平衡令牌列表 可选 **}** 平衡令牌 → 任意标识符, 关键字, 字面量或运算符 -平衡令牌 → 任意标点除了(, ), [, ], {, 或 } +平衡令牌 → 任意标点除了**(, ), [, ], {,** 或 **}** + + +##表达式 -###表达式 -####表达式语法 + +###表达式语法 表达式 → 前置表达式 二元表达式列表 可选 -表达式列表 → 表达式 | 表达式 , 表达式列表 +表达式列表 → 表达式 | 表达式 **,** 表达式列表 + -####前置表达式语法 +###前置表达式语法 前置表达式 → 前置运算符 可选 后置表达式 前置表达式 → 写入写出表达式 -写入写出表达式 → & 标识符 +写入写出表达式 → **&** 标识符 -####二元表达式语法 + + +###二元表达式语法 二元表达式 → 二元运算符 前置表达式 二元表达式 → 赋值运算符 前置表达式 @@ -497,16 +576,24 @@ as模式 → 模式 as 类型 二元表达式列表 → 二元表达式 二元表达式列表 可选 -####赋值运算符语法 -赋值运算符 → = -####三元条件运算符语法 -三元条件运算符 → ? 表达式 : +###赋值运算符语法 +赋值运算符 → **=** + + + +###三元条件运算符语法 +三元条件运算符 → **?** 表达式 **:** -####类型转换运算符语法 -类型转换运算符 → is 类型 | as ? 可选 类型 -####主表达式语法 + +###类型转换运算符语法 +类型转换运算符 → **is** 类型 | **as ?** 可选 类型 + + + + +###主表达式语法 主表达式 → 标识符 泛型参数子句 可选 主表达式 → 字面量表达式 @@ -523,7 +610,8 @@ as模式 → 模式 as 类型 主表达式 → 通配符表达式 -####字面量表达式语法 + +###字面量表达式语法 字面量表达式 → 字面量 字面量表达式 → 数组字面量 | 字典字面量 @@ -542,57 +630,67 @@ as模式 → 模式 as 类型 字典字面量项 → 表达式 : 表达式 -####Self 表达式语法 -self表达式 → self -self表达式 → self . 标识符 -self表达式 → self [ 表达式 ] +###Self 表达式语法 +self表达式 → **self** + +self表达式 → **self** **.** 标识符 + +self表达式 → **self** [ 表达式 ] + +self表达式 → **self . init** -self表达式 → self . init -####超类表达式语法 +###超类表达式语法 超类表达式 → 超类方法表达式 | 超类下标表达式 | 超类构造器表达式 -超类方法表达式 → super . 标识符 +超类方法表达式 → **super . **标识符 -超类下标表达式 → super [ 表达式 ] +超类下标表达式 → **super [** 表达式 **]** -超类构造器表达式 → super . init +超类构造器表达式 → **super . init** -####闭包表达式语法 -闭包表达式 → { 闭包签名 可选 多条语句 } +###闭包表达式语法 -闭包签名 → 参数子句 函数结果 可选 in +闭包表达式 → **{** 闭包签名 可选 多条语句 **}** -闭包签名 → 标识符列表 函数结果 可选 in +闭包签名 → 参数子句 函数结果 可选 **in** -闭包签名 → 捕获列表 参数子句 函数结果 可选 in +闭包签名 → 标识符列表 函数结果 可选 **in** -闭包签名 → 捕获列表 标识符列表 函数结果 可选 in +闭包签名 → 捕获列表 参数子句 函数结果 可选 **in** -闭包签名 → 捕获列表 in +闭包签名 → 捕获列表 标识符列表 函数结果 可选 **in** -捕获列表 → [ 捕获说明符 表达式 ] +闭包签名 → 捕获列表 **in** -捕获说明符 → weak | unowned | unowned(safe) | unowned(unsafe) +捕获列表 → **[** 捕获说明符 表达式 **]** -####隐式成员表达式语法 -隐式成员表达式 → . 标识符 +捕获说明符 → **weak** |**unowned** | **unowned(safe)** | **unowned(unsafe)** -圆括号表达式语法 -圆括号表达式 → ( 表达式元素列表 可选 ) +###隐式成员表达式语法 +隐式成员表达式 → **.** 标识符 + + + +###圆括号表达式语法 + +圆括号表达式 → **(**表达式元素列表 可选 **)** 表达式元素列表 → 表达式元素 | 表达式元素 , 表达式元素列表 -表达式元素 → 表达式 | 标识符 : 表达式 +表达式元素 → 表达式 | 标识符 **:** 表达式 + -####通配符表达式语法 +###通配符表达式语法 通配符表达式 → _ -后置表达式语法 + + +###后置表达式语法 后置表达式 → 主表达式 @@ -612,41 +710,57 @@ self表达式 → self . init 后置表达式 → 强制取值表达式 -后置表达式 → 可选链表达式 +后置表达式 → 可选表达式 -####函数调用表达式语法 + +###函数调用表达式语法 函数调用表达式 → 后置表达式 圆括号表达式 函数调用表达式 → 后置表达式 圆括号表达式 可选 后置闭包 后置闭包 → 闭包表达式 -####构造器表达式语法 -构造器表达式 → 后置表达式 . init -####显式成员表达式语法 +###构造器表达式语法 +构造器表达式 → 后置表达式 **. init** + + + +###显式成员表达式语法 显示成员表达式 → 后置表达式 . 十进制数字 显示成员表达式 → 后置表达式 . 标识符 泛型参数子句 可选 -####后置Self 表达式语法 -后置self表达式 → 后置表达式 . self -####动态类型表达式语法 -动态类型表达式 → 后置表达式 . dynamicType +###后置Self 表达式语法 +后置self表达式 → 后置表达式 **. self** + + + +###动态类型表达式语法 + +动态类型表达式 → 后置表达式 **. dynamicType** + + + +###附属脚本表达式语法 +附属脚本表达式 → 后置表达式 **[** 表达式列表 **]** -####附属脚本表达式语法 -附属脚本表达式 → 后置表达式 [ 表达式列表 ] -强制取值语法 +###强制取值语法 -强制取值表达式 → 后置表达式 ! +强制取值表达式 → 后置表达式 **!** -###可选链表达式语法 -可选链表达式 → 后置表达式 ? -####词法结构 -标识符语法 +##可选表达式语法 +可选表达式 → 后置表达式 **?** + + +##词法结构 + + + +###标识符语法 标识符 → 标识符头 标识符字符列表 可选 @@ -656,50 +770,55 @@ self表达式 → self . init 标识符列表 → 标识符 | 标识符 , 标识符列表 -标识符头 → Upper- or lowercase letter A through Z +标识符头 → 大写或者 小写的字母 A 到 Z -标识符头 → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, or U+00B7–U+00BA +标识符头 → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, 或者 U+00B7–U+00BA -标识符头 → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, or U+00F8–U+00FF +标识符头 → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, 或者 U+00F8–U+00FF -标识符头 → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, or U+180F–U+1DBF +标识符头 → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, 或者 U+180F–U+1DBF 标识符头 → U+1E00–U+1FFF -标识符头 → U+200B–U+200D, U+202A–U+202E, U+203F–U+2040, U+2054, or U+2060–U+206F +标识符头 → U+200B–U+200D, U+202A–U+202E, U+203F–U+2040, U+2054, 或者 U+2060–U+206F -标识符头 → U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, or U+2776–U+2793 +标识符头 → U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, 或者 U+2776–U+2793 -标识符头 → U+2C00–U+2DFF or U+2E80–U+2FFF +标识符头 → U+2C00–U+2DFF 或者 U+2E80–U+2FFF -标识符头 → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, or U+3040–U+D7FF +标识符头 → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, 或者 U+3040–U+D7FF -标识符头 → U+F900–U+FD3D, U+FD40–U+FDCF, U+FDF0–U+FE1F, or U+FE30–U+FE44 +标识符头 → U+F900–U+FD3D, U+FD40–U+FDCF, U+FDF0–U+FE1F, 或者 U+FE30–U+FE44 标识符头 → U+FE47–U+FFFD -标识符头 → U+10000–U+1FFFD, U+20000–U+2FFFD, U+30000–U+3FFFD, or U+40000–U+4FFFD +标识符头 → U+10000–U+1FFFD, U+20000–U+2FFFD, U+30000–U+3FFFD, 或者 U+40000–U+4FFFD -标识符头 → U+50000–U+5FFFD, U+60000–U+6FFFD, U+70000–U+7FFFD, or U+80000–U+8FFFD +标识符头 → U+50000–U+5FFFD, U+60000–U+6FFFD, U+70000–U+7FFFD, 或者 U+80000–U+8FFFD -标识符头 → U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, or U+C0000–U+CFFFD +标识符头 → U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, 或者 U+C0000–U+CFFFD -标识符头 → U+D0000–U+DFFFD or U+E0000–U+EFFFD +标识符头 → U+D0000–U+DFFFD 或者 U+E0000–U+EFFFD -标识符字符 → 数值 0 到 9 +标识符字符 → 数字 0 到 9 -标识符字符 → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, or U+FE20–U+FE2F +标识符字符 → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, 或者 U+FE20–U+FE2F 标识符字符 → 标识符头 标识符字符列表 → 标识符字符 标识符字符列表 可选 -隐式参数名 → $ 十进制数字列表 +隐式参数名 → **$** 十进制数字列表 -####字面量语法 + + + +###字面量语法 字面量 → 整型字面量 | 浮点数字面量 | 字符串字面量 -####整型字面量语法 + + +###整型字面量语法 整型字面量 → 二进制字面量 整型字面量 → 八进制字面量 @@ -708,17 +827,17 @@ self表达式 → self . init 整型字面量 → 十六进制字面量 -二进制字面量 → 0b 二进制数字 二进制字面量字符列表 可选 +二进制字面量 → **0b** 二进制数字 二进制字面量字符列表 可选 -二进制数字 → 数值 0 到 1 +二进制数字 → 数字 0 到 1 二进制字面量字符 → 二进制数字 | _ 二进制字面量字符列表 → 二进制字面量字符 二进制字面量字符列表 可选 -八进制字面量 → 0o 八进字数字 八进制字符列表 可选 +八进制字面量 →** 0o** 八进字数字 八进制字符列表 可选 -八进字数字 → 数值 0 到 7 +八进字数字 → 数字 0 到 7 八进制字符 → 八进字数字 | _ @@ -726,7 +845,7 @@ self表达式 → self . init 十进制字面量 → 十进制数字 十进制字符列表 可选 -十进制数字 → 数值 0 到 9 +十进制数字 → 数字 0 到 9 十进制数字列表 → 十进制数字 十进制数字列表 可选 @@ -734,15 +853,17 @@ self表达式 → self . init 十进制字符列表 → 十进制字符 十进制字符列表 可选 -十六进制字面量 → 0x 十六进制数字 十六进制字面量字符列表 可选 +十六进制字面量 → **0x **十六进制数字 十六进制字面量字符列表 可选 -十六进制数字 → 数值 0 到 9, a through f, or A through F +十六进制数字 → 数字 0 到 9, a 到 f, or A 到 F 十六进制字符 → 十六进制数字 | _ 十六进制字面量字符列表 → 十六进制字符 十六进制字面量字符列表 可选 -####浮点型字面量语法 + + +###浮点型字面量语法 浮点数字面量 → 十进制字面量 十进制分数 可选 十进制指数 可选 浮点数字面量 → 十六进制字面量 十六进制分数 可选 十六进制指数 @@ -755,36 +876,40 @@ self表达式 → self . init 十六进制指数 → 浮点数p 正负号 可选 十六进制字面量 -浮点数e → e | E +浮点数e → **e** | **E** + +浮点数p → **p** | **P** -浮点数p → p | P +正负号 → **+** |** -** -正负号 → + | - -####字符型字面量语法 -字符串字面量 → " 引用文本 " + +###字符型字面量语法 +字符串字面量 → **"** 引用文本** "** 引用文本 → 引用文本条目 引用文本 可选 引用文本条目 → 转义字符 -引用文本条目 → ( 表达式 ) +引用文本条目 → **\(** 表达式 **)** + +引用文本条目 → 除了"­, \­, U+000A, 或者 U+000D外的所有Unicode的字符 -引用文本条目 → 除了"­, \­, U+000A, or U+000D的所有Unicode的字符 +转义字符 → **\0**| **\\** | **\t** | **\n** | **\r** | **\"** | **\'** -转义字符 → \0 | \ | \t | \n | \r | \" | \' +转义字符 → **\x** 十六进制数字 十六进制数字 -转义字符 → \x 十六进制数字 十六进制数字 +转义字符 → **\u** 十六进制数字 十六进制数字 十六进制数字 十六进制数字 -转义字符 → \u 十六进制数字 十六进制数字 十六进制数字 十六进制数字 +转义字符 → **\U** 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 -转义字符 → \U 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 十六进制数字 -####运算符语法语法 + +###运算符语法语法 运算符 → 运算符字符 运算符 可选 -运算符字符 → / | = | - | + | ! | * | % | < | > | & | | | ^ | ~ | . +运算符字符 → **/** | **=** | **-** | **+** | **!** | ***** | **%** | **<** | **>** | **&** | **|** | **^** | **~** | **.** 二元运算符 → 运算符 @@ -792,52 +917,74 @@ self表达式 → self . init 后置运算符 → 运算符 -###类型 -####类型语法 + +##类型 + + + +###类型语法 类型 → 数组类型 | 函数类型 | 类型标识 | 元组类型 | 可选类型 | 隐式解析可选类型 | 协议合成类型 | 元型类型 -####类型注解语法 + + +###类型注解语法 类型注解 → : 属性列表 可选 类型 -####类型标识语法 + +###类型标识语法 类型标识 → 类型名称 泛型参数子句 可选 | 类型名称 泛型参数子句 可选 . 类型标识 类名 → 标识符 -####元组类型语法 + + +###元组类型语法 元组类型 → ( 元组类型主体 可选 ) 元组类型主体 → 元组类型的元素列表 ... 可选 元组类型的元素列表 → 元组类型的元素 | 元组类型的元素 , 元组类型的元素列表 -元组类型的元素 → 属性列表 可选 inout 可选 类型 | inout 可选 元素名 类型注解 +元组类型的元素 → 属性列表 可选 **inout** 可选 类型 | **inout** 可选 元素名 类型注解 元素名 → 标识符 -####函数类型语法 + + +###函数类型语法 函数类型 → 类型 → 类型 -####数组类型语法 -数组类型 → 类型 [ ] | 数组类型 [ ] -####可选类型语法 -可选类型 → 类型 ? -隐式解析可选类型(Implicitly Unwrapped Optional Type)语法 + +###数组类型语法 +数组类型 → 类型** [ ]** 数组类型 **[ ]** + + + +###可选类型语法 +可选类型 → 类型 **?** + +! + +###隐式解析可选类型语法 隐式解析可选类型 → 类型 ! -####协议合成类型语法 -协议合成类型 → protocol < 协议标识符列表 可选 > + +###协议合成类型语法 +协议合成类型 → **protocol** < 协议标识符列表 可选 > 协议标识符列表 → 协议标识符 | 协议标识符 , 协议标识符列表 协议标识符 → 类型标识 -####元类型语法 -元类型 → 类型 . Type | 类型 . Protocol -####类型继承子句语法 +###元类型语法 +元类型 → 类型 **.** **Type** | 类型 **.** **Protocol** + + + +###类型继承子句语法 类型继承子句 → : 类型继承列表 类型继承列表 → 类型标识 | 类型标识 , 类型继承列表