* 第三章 10_Summary_of_the_Grammar(从 Declarations 到 Generic Parameters and Arguments) * 10_Summary_of_the_Grammar(from Declarations -> Generic Parameters and Arguments)的翻译 (#911)
46 KiB
Executable File
语法总结(Summary of the Grammar)
语句
语句语法
语句 → 表达式 ; 可选
语句 → 声明 ; 可选
语句 → 循环语句 ; 可选
语句 → 分支语句 ; 可选
语句 → 控制转移语句 ; 可选
语句 → 延迟语句 ; 可选
语句 → 执行语句 ; 可选
多条语句(Statements) → 语句 多条语句(Statements) 可选
循环语句语法
循环语句 → for 语句
循环语句 → for-in 语句
循环语句 → [while 语句](./05_Statements.md#wheetatype 类型 ile_statement)
循环语句 → repeat-while 语句
For 循环语法
for 语句 → for for 初始条件 可选 ; 表达式 可选 ; 表达式 可选 代码块
For-In 循环语法
While 循环语法
条件子句 → 表达式
条件子句 → 表达式集
条件子句 → 可用条件(availability-condition) | 表达式集
条件 → 可用条件(availability-condition) | 个例条件(case-condition) | 可选绑定条件(optional-binding-condition)
个例条件(case-condition) → case 模式 构造器 where 从句可选
可选绑定条件(optional-binding-condition) → 可选绑定头(optional-binding-head) 可选绑定连续集(optional-binding-continuation-list) 可选 where 从句 可选
可选绑定头(optional-binding-head) → let 模式 构造器 | var 模式 构造器
可选绑定连续集(optional-binding-contiuation-list) → 可选绑定连续(optional-binding-contiuation) | 可选绑定连续(optional-binding-contiuation) , 可选绑定连续集(optional-binding-contiuation-list)
可选绑定连续(optional-binding-continuation) → 模式 构造器 | 可选绑定头(optional-binding-head)
Repeat-While 语句语法
repeat-while-statement → repeat 代码块 while 表达式
分支语句语法
分支语句 → if 语句
分支语句 → guard 语句
分支语句 → switch 语句
If 语句语法
if 语句 → if 条件子句 代码块 else 子句(Clause) 可选
Guard 语句语法
Switch 语句语法
switch 语句 → switch 表达式 { SwitchCase 可选 }
SwitchCase 集 → SwitchCase SwitchCase 集 可选
SwitchCase → case 标签 多条语句(Statements) | default 标签 多条语句(Statements)
SwitchCase → case 标签 ; | default 标签 ;
case 标签 → case case 项集 :
case 项集 → 模式 where-clause 可选 | 模式 where-clause 可选 , case 项集
default 标签 → default :
where 子句 → where where 表达式
where 表达式 → 表达式
标记语句语法
标记语句(Labeled Statement) → 语句标签 循环语句 | 语句标签 if 语句 | 语句标签 switch 语句
语句标签 → 标签名称 :
标签名称 → 标识符
控制传递语句(Control Transfer Statement)语法
控制传递语句 → break 语句
控制传递语句 → continue 语句
控制传递语句 → fallthrough 语句
控制传递语句 → return 语句
控制传递语句 → throw 语句
Break 语句语法
break 语句 → break 标签名称 可选
Continue 语句语法
continue 语句 → continue 标签名称 可选
Fallthrough 语句语法
fallthrough 语句 → fallthrough
Return 语句语法
return 语句 → return 表达式 可选
可用条件(Availability Condition)语法
可用条件(availability-condition) → #available ( 多可用参数(availability-arguments) )
多可用参数(availability- arguments) → 可用参数(availability-argument)|可用参数(availability-argument) , 多可用参数(availability-arguments)
可用参数(availability- argument) → 平台名(platform-name) 平台版本(platform-version)
可用参数(availability- argument) → *
平台名 → iOS | iOSApplicationExtension
平台名 → OSX | macOSApplicationExtension
平台名 → watchOS
平台名 → tvOS
平台版本 → 十进制数(decimal-digits)
平台版本 → 十进制数(decimal-digits) . 十进制数(decimal-digits)
平台版本 → 十进制数(decimal-digits) . 十进制数(decimal-digits) . 十进制数(decimal-digits))
抛出语句(Throw Statement)语法
抛出语句(throw-statement) → throw 表达式(expression)
延迟语句(defer-statement)语法
延迟语句(defer-statement) → defer 代码块
执行语句(do-statement)语法
执行语句(do-statement) → do 代码块 catch-clauses 可选
catch-clauses → catch-clause catch-clauses 可选
catch-clauses → catch 模式(pattern) 可选 where-clause 可选 代码块(code-block) 可选
泛型参数
泛型形参子句(Generic Parameter Clause)语法
泛形参数 → 类型名称
约束子句 → where 约束集
泛型实参子句语法
(泛型参数子句 Generic Argument Clause) → < 泛型参数集 >
泛型参数 → 类型
声明(Declarations)
声明语法
声明 → 导入声明
声明 → 常量声明
声明 → 变量声明
声明 → 类型别名声明
声明 → 函数声明
声明 → 枚举声明
声明 → 结构体声明
声明 → 类声明
声明 → 协议声明
声明 → 构造器声明
声明 → 析构器声明
声明 → 扩展声明
声明 → 下标声明
声明 → 运算符声明
声明 → 优先级组声明
声明(Declarations)集 → 声明 声明(Declarations)集 可选
顶级(Top Level)声明语法
顶级声明 → 多条语句(Statements) 可选
代码块语法
代码块 → { 多条语句(Statements) 可选 }
导入(Import)声明语法
导入声明 → 属性(Attributes)集 可选 import 导入类型 可选 导入路径
导入类型 → typealias | struct | class | enum | protocol | let | var | func
常数声明语法
常量声明 → 属性(Attributes)集 可选 声明修饰符(Modifiers)集 可选 let 模式构造器集
模式构造器集 → 模式构造器 | 模式构造器 , 模式构造器集
构造器 → = 表达式
变量声明语法
变量声明 → 变量声明头(Head) 模式构造器集
变量声明 → 变量声明头(Head) 变量名 类型注解 代码块
变量声明 → 变量声明头(Head) 变量名 类型注解 getter-setter 块
变量声明 → 变量声明头(Head) 变量名 类型注解 getter-setter 关键字(Keyword)块
变量声明 → 变量声明头(Head) 变量名 构造器 可选 willSet-didSet 代码块
变量声明 → 变量声明头(Head) 变量名 类型注解 构造器 可选 willSet-didSet 代码块
变量声明头(Head) → 属性(Attributes)集 可选 声明修饰符(Modifers)集 可选 var
变量名称 → 标识符
getter-setter 块 → 代码块
getter-setter 块 → { getter 子句 setter 子句 可选 }
getter-setter 块 → { setter 子句 getter 子句 }
getter 子句 → 属性(Attributes)集 可选 可变性修饰符(mutation-modifier) 可选 get 代码块
setter 子句 → 属性(Attributes)集 可选 可变性修饰符(mutation-modifier) 可选 set setter 名称 可选 代码块
setter 名称 → ( 标识符 )
getter-setter 关键字(Keyword)块 → { getter 关键字(Keyword)子句 setter 关键字(Keyword)子句 可选 }
getter-setter 关键字(Keyword)块 → { setter 关键字(Keyword)子句 getter 关键字(Keyword)子句 }
getter 关键字(Keyword)子句 → 属性(Attributes)集 可选 可变性修饰符(mutation-modifier) 可选 get
setter 关键字(Keyword)子句 → 属性(Attributes)集 可选 可变性修饰符(mutation-modifier) 可选 set
willSet-didSet 代码块 → { willSet 子句 didSet 子句 可选 }
willSet-didSet 代码块 → { didSet 子句 willSet 子句 可选 }
willSet 子句 → 属性(Attributes)集 可选 willSet setter 名称 可选 代码块
didSet 子句 → 属性(Attributes)集 可选
类型别名声明语法
类型别名声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) typealias 类型别名名称 泛型参数子句 可选 类型别名赋值
类型别名名称 → 标识符
类型别名赋值 → = 类型
函数声明语法
函数声明 → 函数头 函数名 泛型参数子句 可选 函数签名(Signature) 泛型 where 子句 可选 函数体 可选
函数头 → 属性(Attributes)集 可选 声明描述符(Specifiers)集 可选 func
函数签名(Signature) → 参数子句 rethrows 函数结果 可选
函数结果 → -> 属性(Attributes)集 可选 类型
函数体 → 代码块
参数子句 → ( ) | ( 参数集 )
参数 → 外部参数名 可选 本地参数名 类型注解 默认参数子句 可选
外部参数名 → 标识符
本地参数名 → 标识符
默认参数子句 → = 表达式
枚举声明语法
枚举声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) 可选 联合式枚举(union_style_enum)
枚举声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) 可选 原始值式枚举(raw-value-style-enum)
联合式枚举 → indirect 可选 enum 枚举名 泛型参数子句 可选 类型继承子句(type-inheritance-clause) 可选 泛型 where 子句(generic-where-clause) 可选 { 联合样式枚举成员 可选 }
联合式枚举成员集 → 联合式枚举成员 联合样式枚举成员集 可选
联合样式枚举成员 → 声明 | 联合式(Union Style)枚举 case 子句 | 编译控制语句
联合式(Union Style)枚举 case 子句 → 属性(Attributes)集 可选 indirect 可选 case 联合式(Union Style)枚举 case 集
联合式(Union Style)枚举 case 集 → 联合式(Union Style)枚举 case | 联合式(Union Style)枚举 case , 联合式(Union Style)枚举 case 集
联合式(Union Style)枚举 case → 枚举的 case 名 元组类型 可选
枚举名 → 标识符
枚举的 case 名 → 标识符
原始值式枚举 → enum 枚举名 泛型参数子句 可选 类型继承子句 泛型 where 子句 可选 { 原始值式枚举成员集 }
原始值式枚举成员集 → 原始值式枚举成员 原始值式枚举成员集 可选
原始值式枚举成员 → 声明 | 原始值式枚举 case 子句 | 编译控制语句
原始值式枚举 case 子句 → 属性(Attributes)集 可选 case 原始值式枚举 case 集
原始值式枚举 case 集 → 原始值式枚举 case | 原始值式枚举 case , 原始值式枚举 case 集
原始值式枚举 case → 枚举的 case 名 原始值赋值 可选
原始值赋值 → = 原始值字面量
结构体声明语法
结构体声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) 可选 struct 结构体名称 泛型参数子句 可选 类型继承子句 可选 泛型 where 子句 可选 结构体主体
结构体名称 → 标识符
结构体主体 → { 结构体成员集 可选 }
类声明语法
类声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) 可选 final 可选 class 类名 泛型参数子句 可选 类型继承子句 泛型 where 子句 可选 类主体
类声明 → 属性(Attributes)集 可选 final 访问级别修饰符(access-level-modifier) 可选 class 类名 泛型参数子句 可选 类型继承子句 泛型 where 子句 可选 类主体
类名 → 标识符
类主体 → { 类成员集 可选 }
协议(Protocol)声明语法
协议声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) 可选 protocol 协议名 类型继承子句 可选 泛型 where 子句 可选 协议主体
协议名 → 标识符
协议主体 → { 协议成员集 可选 }
协议成员声明 → 协议属性声明
协议成员声明 → 协议方法声明
协议成员声明 → 协议构造器声明
协议成员声明 → 协议下标声明
协议成员声明 → 协议关联类型声明
协议成员声明 → 类型别名声明
协议属性声明语法
协议属性声明 → 变量声明头(Head) 变量名 类型注解 getter-setter 关键字(Keyword)块
协议方法声明语法
协议方法声明 → 函数头 函数名 泛型参数子句 可选 函数签名(Signature) 泛型 where 子句 可选
协议构造器声明语法
协议构造器声明 → 构造器头(Head) 泛型参数子句 可选 参数子句 throws 可选 泛型 where 子句 可选
协议构造器声明 → 构造器头(Head) 泛型参数子句 可选 参数子句 rethrows 泛型 where 子句 可选
协议下标声明语法
协议下标声明 → 下标头(Head) 下标结果(Result) 泛型 where 子句 可选 getter-setter 关键字(Keyword)块
协议关联类型声明语法
协议关联类型声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) 可选 associatedtype 类型别名 类型继承子句 可选 类型别名赋值 可选 泛型 where 子句 可选
构造器声明语法
构造器声明 → 构造器头(Head) 泛型参数子句 可选 参数子句 throws 可选 泛型 where 子句 可选 构造器主体
构造器声明 → 构造器头(Head) 泛型参数子句 可选 参数子句 rethrows 泛型 where 子句 可选 构造器主体
构造器头(Head) → 属性(Attributes)集 可选 声明修饰符集(declaration-modifiers) 可选 init
构造器头(Head) → 属性(Attributes)集 可选 声明修饰符集(declaration-modifiers) 可选 init ?
构造器头(Head) → 属性(Attributes)集 可选 声明修饰符集(declaration-modifiers) 可选 init !
构造器主体 → 代码块
析构器声明语法
析构器声明 → 属性(Attributes)集 可选 deinit 代码块
扩展(Extension)声明语法
扩展声明 → 属性(Attributes)集 可选 访问级别修饰符(access-level-modifier) 可选 extension 类型标识 类型继承子句 可选 泛型 where 子句 可选 扩展主体
扩展主体 → { 扩展成员集 可选 }
下标声明语法
下标声明 → 下标头(Head) 下标结果(Result) 泛型 where 子句 可选 代码块
下标声明 → 下标头(Head) 下标结果(Result) 泛型 where 子句 可选 getter-setter 块
下标声明 → 下标头(Head) 下标结果(Result) 泛型 where 子句 可选 getter-setter 关键字(Keyword)块
下标头(Head) → 属性(Attributes)集 可选 声明修饰符集(declaration-modifiers) 可选 subscript 泛型参数子句 可选 参数子句
下标结果(Result) → -> 属性(Attributes)集 可选 类型
运算符声明语法
运算符声明 → 前置运算符声明 | 后置运算符声明 | 中置运算符声明
前置运算符声明 → prefix operator 运算符
后置运算符声明 → postfix operator 运算符
中置运算符声明 → infix operator 运算符 中置运算符属性集 可选
中置运算符属性集 → 优先级组名
优先级组声明语法
优先级组声明 → precedencegroup 优先级组名 { 优先级组属性集 可选 }
优先级组属性 → 优先级组关系
优先级组属性 → 优先级组赋值
优先级组属性 → 优先级组结合
优先级组关系 → higherThan : 优先级组名集
优先级组关系 → lowerThan : 优先级组名集
优先级组赋值 → assignment : 布尔字面量
优先级组结合 → associativity : left
优先级组结合 → associativity : right
优先级组结合 → associativity : none
优先级组名集 → 优先级组名 | 优先级组名 , 优先级组名集
优先级组名 → 标识符
声明修饰符语法
声明修饰符 → class | convenience | dynamic | final | infix | lazy | optional | override | postfix | prefix | required | static | unowned | unowned(safe) | unowned(unsafe) | weak
声明修饰符 → 访问级别修饰符(access-level-modifier)
声明修饰符 → 可变性修饰符(mutation-modifier)
声明修饰符集 → 声明修饰符(declaration-modifier) 声明修饰符集(declaration-modifiers) 可选
访问级别修饰符 → private | private(set)
访问级别修饰符 → fileprivate | fileprivate(set)
访问级别修饰符 → internal | internal(set)
访问级别修饰符 → public | public(set)
访问级别修饰符 → open | open(set)
可变性修饰符 → mutating | nonmutating
属性
属性语法
属性名 → 标识符
属性参数子句 → { 平衡令牌集 可选 }
属性(Attributes)集 → 属性 属性(Attributes)集 可选
平衡令牌 → ( 平衡令牌集 可选 )
平衡令牌 → [ 平衡令牌集 可选 ]
平衡令牌 → { 平衡令牌集 可选 }
平衡令牌 → 任意标识符、关键字、字面量或运算符
平衡令牌 → 除 ( 、)、[、]、{、} 外的任意标点符号
模式
模式(Patterns)语法
模式 → 标识符模式 [类型注解](./03_Types.md#type_annotati Value Bindingon ) 可选
模式 → 值绑定模式
模式 → 枚举 case 模式
模式 → 可选模式
模式 → 类型转换模式
模式 → 表达式模式
通配符模式语法
通配符模式 → _
标识符模式语法
标识符模式 → 标识符
值绑定(Value Binding)模式语法
元组模式语法
元组模式 → ( 元组模式元素集 可选 )
枚举 case 模式语法
可选模式语法
可选模式 → 标识符模式 ?
类型转换模式语法
类型转换模式(type-casting-pattern) → is 模式 | as 模式
is 模式 → is 类型
表达式模式语法
表达式模式 → 表达式
泛型参数
泛型形参子句(Generic Parameter Clause)语法
泛型参数子句 → < 泛型参数集 >
泛形参数 → 类型名称
泛型 where 子句 → where 约束集