语法总结
最后更新于:2022-04-01 05:05:09
> 1.0 翻译:[stanzhai](https://github.com/stanzhai) 校对:[xielingwang](https://github.com/xielingwang)
>
> 2.0 翻译+校对:[miaosiqi](https://github.com/miaosiqi)
本页包含内容:
[TOC=2]
## 语句
### 语句语法
> 语句 → _表达式_ ; 可选
> 语句 → _声明_ ; 可选
> 语句 → _循环语句_ ; 可选
> 语句 → _分支语句_ ; 可选
> 语句 → _标记语句(Labeled Statement)_
> 语句 → _控制转移语句_ ; 可选
> 语句 → _延迟语句_ ; _可选_
> _语句_ → _执行语句_ ; _可选_
> _多条语句(Statements)_ → _语句_ _多条语句(Statements)_ _可选_
### 循环语句语法
> 循环语句 → _for语句_
> 循环语句 → _for-in语句_
> 循环语句 → _while语句_
> 循环语句 → _repeat-while语句_
### For 循环语法
> for语句 → for _for初始条件_ 可选 ; _表达式_ 可选 ; _表达式_ 可选 _代码块_
> for语句 → for ( _for初始条件_ 可选 ; _表达式_ 可选 ; _表达式_ 可选 ) _代码块_
> for初始条件 → _变量声明_ | _表达式集_
### For-In 循环语法
> for-in语句 → for case 可选 _模式_ in _表达式_ _代码块_ _where从句_ _可选_
### While 循环语法
> while语句 → 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)_ _可选_
> _else从句(Clause)_ → else _代码块_ | else _if语句_
### Guard 语句语法
> guard语句 → guard _条件从句_ else _代码块_
### 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 | OSXApplicationExtension
> _平台名_ → watchOS
> _平台版本_ → _十进制数(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 | var | func
> 导入路径 → _导入路径标识符_ | _导入路径标识符_ . _导入路径_
> 导入路径标识符 → _标识符_ | _运算符_
### 常数声明语法
> 常量声明 → _属性(Attributes)集_ 可选 _声明修改符(Modifiers)集_ 可选 let _模式构造器集_
> 模式构造器集 → _模式构造器_ | _模式构造器_ , _模式构造器集_
> 模式构造器 → _模式_ _构造器_ 可选
> 构造器 → = _表达式_
### 变量声明语法
> 变量声明 → _变量声明头(Head)_ _模式构造器集_
> 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _代码块_
> 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _getter-setter块_
> 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _getter-setter关键字(Keyword)块_
> 变量声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _构造器_ 可选 _willSet-didSet代码块_
> 变量声明头(Head) → _属性(Attributes)集_ 可选 _声明修改符(Modifers)集_ 可选 var
> 变量名称 → _标识符_
> getter-setter块 → { _getter从句_ _setter从句_ 可选 }
> getter-setter块 → { _setter从句_ _getter从句_ }
> getter从句 → _属性(Attributes)集_ 可选 get _代码块_
> setter从句 → _属性(Attributes)集_ 可选 set _setter名称_ 可选 _代码块_
> setter名称 → ( _标识符_ )
> getter-setter关键字(Keyword)块 → { _getter关键字(Keyword)从句_ _setter关键字(Keyword)从句_ 可选 }
> getter-setter关键字(Keyword)块 → { _setter关键字(Keyword)从句_ _getter关键字(Keyword)从句_ }
> getter关键字(Keyword)从句 → _属性(Attributes)集_ 可选 get
> setter关键字(Keyword)从句 → _属性(Attributes)集_ 可选 set
> willSet-didSet代码块 → { _willSet从句_ _didSet从句_ 可选 }
> willSet-didSet代码块 → { _didSet从句_ _willSet从句_ }
> willSet从句 → _属性(Attributes)集_ 可选 willSet _setter名称_ 可选 _代码块_
> didSet从句 → _属性(Attributes)集_ 可选 didSet _setter名称_ 可选 _代码块_
### 类型别名声明语法
> 类型别名声明 → _类型别名头(Head)_ _类型别名赋值_
> 类型别名头(Head) → _属性_ 可选 _访问级别修改符(access-level-modifier)_ typealias _类型别名名称_
> 类型别名名称 → _标识符_
> 类型别名赋值 → = _类型_
### 函数声明语法
> 函数声明 → _函数头_ _函数名_ _泛型参数从句_ 可选 _函数签名(Signature)_ _函数体_
> 函数头 → _属性(Attributes)集_ 可选 _声明描述符(Specifiers)集_ 可选 func
> 函数名 → _标识符_ | _运算符_
> 函数签名(Signature) → _parameter-clauses_ throws 可选 _函数结果_ _可选_
> _函数签名(Signature)_ → _parameter-clauses_ rethrows _函数结果_ 可选
> 函数结果 → -> _属性(Attributes)集_ 可选 _类型_
> 函数体 → _代码块_
> 参数从句 → _参数从句_ _parameter-clauses_ 可选
> 参数从句 → ( ) | ( _参数集_ ... 可选 )
> 参数集 → _参数_ | _参数_ , _参数集_
> 参数 → inout 可选 let 可选 _外部参数名_ 可选 _本地参数名_ 可选 _类型注解_ _默认参数从句_ 可选
> 参数 → inout 可选 var _外部参数名_ _本地参数名_ 可选 _类型注解_ _默认参数从句_ 可选
> 参数 → _属性(Attributes)集_ 可选 _类型_
> 外部参数名 → _标识符_ | _
> 本地参数名 → _标识符_ | _
> 默认参数从句 → = _表达式_
### 枚举声明语法
> 枚举声明 → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ 可选 _联合式枚举_
> _枚举声明_ → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ 可选 _原始值式枚举(raw-value-style-enum)_
> _联合式枚举_ → enum _枚举名_ _泛型参数从句_ 可选 _类型继承从句(type-inheritance-clause)_ 可选 { _联合样式枚举成员_ 可选 }
> _联合样式枚举成员_ → _union-style-enum-member_ _联合样式枚举成员_ _可选_
> _联合样式枚举成员_ → _声明_ | _联合式(Union Style)的枚举case从句_
> _联合式(Union Style)的枚举case从句_ → _属性(Attributes)集_ 可选 case _联合式(Union Style)的枚举case集_
> 联合式(Union Style)的枚举case集 → _联合式(Union Style)的case_ | _联合式(Union Style)的case_ , _联合式(Union Style)的枚举case集_
> 联合式(Union Style)的枚举case → _枚举的case名_ _元组类型_ 可选
> 枚举名 → _标识符_
> 枚举的case名 → _标识符_
> 原始值式枚举 → enum _枚举名_ _泛型参数从句_ 可选 : _类型标识_ { _原始值式枚举成员集_ 可选 }
> 原始值式枚举成员集 → _原始值式枚举成员_ _原始值式枚举成员集_ 可选
> 原始值式枚举成员 → _声明_ | _原始值式枚举case从句_
> 原始值式枚举case从句 → _属性(Attributes)集_ 可选 case _原始值式枚举case集_
> 原始值式枚举case集 → _原始值式枚举case_ | _原始值式枚举case_ , _原始值式枚举case集_
> 原始值式枚举case → _枚举的case名_ _原始值赋值_ 可选
> 原始值赋值 → = _字面量_ 原始值字面量(raw-value-literal) → _数值字面量_ | _字符串字面量_ | _布尔字面量_
### 结构体声明语法
> 结构体声明 → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ 可选 struct _结构体名称_ _泛型参数从句_ 可选 _类型继承从句_ 可选 _结构体主体_
> 结构体名称 → _标识符_
> 结构体主体 → { _声明(Declarations)集_ 可选 }
### 类声明语法
> 类声明 → _属性(Attributes)集_ 可选 _访问级别修改器(access-level-modifier)_ class _类名_ _泛型参数从句_ 可选 _类型继承从句_ 可选 _类主体_
> 类名 → _标识符_
> 类主体 → { _声明(Declarations)集_ 可选 }
### 协议(Protocol)声明语法
> 协议声明 → _属性(Attributes)集_ 可选__访问级别修改器(access-level-modifier)_ protocol _协议名_ _类型继承从句__可选 _协议主体_
> 协议名 → _标识符_
> 协议主体 → { _协议成员声明(Declarations)集_ 可选 }
> 协议成员声明 → _协议属性声明_
> 协议成员声明 → _协议方法声明_
> 协议成员声明 → _协议构造器声明_
> 协议成员声明 → _协议下标脚本声明_
> 协议成员声明 → _协议关联类型声明_
> 协议成员声明(Declarations)集 → _协议成员声明_ _协议成员声明(Declarations)集_ _可选_
### 协议属性声明语法
> 协议属性声明 → _变量声明头(Head)_ _变量名_ _类型注解_ _getter-setter关键字(Keyword)块_
### 协议方法声明语法
> 协议方法声明 → _函数头_ _函数名_ _泛型参数从句_ 可选 _函数签名(Signature)_
### 协议构造器声明语法
> 协议构造器声明 → _构造器头(Head)_ _泛型参数从句_ 可选 _参数从句_
### 协议下标脚本声明语法
> 协议下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _getter-setter关键字(Keyword)块_
### 协议关联类型声明语法
> 协议关联类型声明 → _类型别名头(Head)_ _类型继承从句_ 可选 _类型别名赋值_ _可选_
### 构造器声明语法
> 构造器声明 → _构造器头(Head)_ _泛型参数从句_ 可选 _参数从句_ _构造器主体_
> 构造器头(Head) → _属性(Attributes)集_ 可选 _声明修改器集(declaration-modifiers)_ 可选 init
> 构造器头(Head) → _属性(Attributes)集_ 可选 _声明修改器集(declaration-modifiers)_ 可选 init ?
> _构造器头(Head)_ → _属性(Attributes)集_ 可选 _声明修改器集(declaration-modifiers)_ 可选 init !
> _构造器主体_ → _代码块_
### 析构器声明语法
> 析构器声明 → _属性(Attributes)集_ 可选 deinit _代码块_
### 扩展(Extension)声明语法
> 扩展声明 → _访问级别修改器_ 可选 extension _类型标识_ _类型继承从句_ 可选 _extension-body_
> extension-body → { _声明(Declarations)集_ 可选 }
### 下标脚本声明语法
> 下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _代码块_
> 下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _getter-setter块_
> 下标脚本声明 → _下标脚本头(Head)_ _下标脚本结果(Result)_ _getter-setter关键字(Keyword)块_
> 下标脚本头(Head) → _属性(Attributes)集_ 可选 _声明修改器(declaration-modifiers)_ 可选 subscript _参数从句_
> 下标脚本结果(Result) → -> _属性(Attributes)集_ 可选 _类型_
### 运算符声明语法
> 运算符声明 → _前置运算符声明_ | _后置运算符声明_ | _中置运算符声明_
> 前置运算符声明 → prefix 运算符 _运算符_ { }
> 后置运算符声明 → postfix 运算符 _运算符_ { }
> 中置运算符声明 → infix 运算符 _运算符_ { _中置运算符属性集_ 可选 }
> 中置运算符属性集 → _优先级从句_ 可选 _结和性从句_ 可选
> 优先级从句 → precedence _优先级水平_
> 优先级水平 → 数值 0 到 255,首末项包括在内 结和性从句 → associativity _结和性_
> 结和性 → left | right | none
### 声明修改器语法
> _声明修改器_ → 类 | 便捷(convenience) | 动态(dynamic) | final | 中置(infix) | lazy | 可变(mutating) | 不可变(nonmutating) | 可选(optional) | 改写(override) | 后置 | 前置 | required |static | unowned | unowned(safe) | unowned(unsafe) | 弱(weak)
> _声明修改器_ → _访问级别声明器(access-level-modifier)_
> _声明修改集_ → _声明修改器_ _声明修改器集_ _可选_
> _访问级别修改器_ → 内部的 | 内部的(set)
> _访问级别修改器_ → 私有的 | 私有的(set)
> _访问级别修改器_ → 公共的 | 公共的(set)
> _访问级别修改器集_ →_访问级别修改器_ _访问级别修改器集_ _可选_
## 模式
### 模式(Patterns) 语法
> 模式 → _通配符模式_ _类型注解_ 可选
> 模式 → _标识符模式_ _类型注解_ 可选
> 模式 → _值绑定模式_
> 模式 → _元组模式_ _类型注解_ _可选_
> _模式_ → _枚举个例模式_
> 模式 → _可选模式_ 模式 → _类型转换模式_
> 模式 → _表达式模式_
### 通配符模式语法
> 通配符模式 → _
### 标识符模式语法
> 标识符模式 → _标识符_
### 值绑定(Value Binding)模式语法
> 值绑定模式 → var _模式_ | let _模式_
### 元组模式语法
> 元组模式 → ( _元组模式元素集_ 可选 )
> 元组模式元素集 → _元组模式元素_ | _元组模式元素_ , _元组模式元素集_
> 元组模式元素 → _模式_
### 枚举用例模式语法
> enum-case-pattern → _类型标识_ 可选 . _枚举的case名_ _元组模式_ _可选_
> 可选模式语法 可选模式 → _识别符模式_ ?
### 类型转换模式语法
> 类型转换模式(type-casting-pattern) → _is模式_ | _as模式_
> is模式 → is _类型_
> as模式 → _模式_ as _类型_
### 表达式模式语法
> 表达式模式 → _表达式_
## 属性
### 属性语法
> 属性 → @ _属性名_ _属性参数从句_ 可选
> 属性名 → _标识符_
> 属性参数从句 → ( _平衡令牌集_ 可选 )
> 属性(Attributes)集 → _属性_ _属性(Attributes)集_ 可选
> 平衡令牌集 → _平衡令牌_ _平衡令牌集_ 可选
> 平衡令牌 → ( _平衡令牌集_ 可选 )
> 平衡令牌 → [ _平衡令牌集_ 可选 ]
> 平衡令牌 → { _平衡令牌集_ 可选 }
> 平衡令牌 → 任意标识符, 关键字, 字面量或运算符
> 平衡令牌 → 任意标点除了(, ), [, ], {, 或 }
## 表达式
### 表达式语法
> 表达式 → _try-operator_ 可选 _前置表达式_ _二元表达式集_ 可选
> 表达式集 → _表达式_ | _表达式_ , _表达式集_
### 前置表达式语法
> 前置表达式 → _前置运算符_ 可选 _后置表达式_
> 前置表达式 → _写入写出(in-out)表达式_
> 写入写出(in-out)表达式 → & _标识符_
> try表达式语法 try-operator → try | try !
### 二元表达式语法
> 二元表达式 → _二元运算符_ _前置表达式_
> 二元表达式 → _赋值运算符_ _try运算符_ 可选 _前置表达式_
> 二元表达式 → _条件运算符_ _try运算符_ 可选 _前置表达式_
> 二元表达式 → _类型转换运算符_
> 二元表达式集 → _二元表达式_ _二元表达式集_ _可选_
### 赋值运算符语法
> 赋值运算符 → =
> 三元条件运算符语法
> 三元条件运算符 → ? _表达式_ :
### 类型转换运算符语法
> 类型转换运算符 → is _类型_
> _类型转换运算符_ → as _类型_
> _类型转换运算符_ → as ? _类型_
> _类型转换运算符_ → as ! _类型_
### 主表达式语法
> 主表达式 → _标识符_ _泛型参数从句_ 可选
> 主表达式 → _字面量表达式_
> 主表达式 → _self表达式_
> 主表达式 → _超类表达式_
> 主表达式 → _闭包表达式_
> 主表达式 → _圆括号表达式_
> 主表达式 → _隐式成员表达式_
> 主表达式 → _通配符表达式_
### 字面量表达式语法
> 字面量表达式 → _字面量_
> 字面量表达式 → _数组字面量_ | _字典字面量_
> 字面量表达式 → FILE | LINE | COLUMN | FUNCTION
> 数组字面量 → [ _数组字面量项集_ 可选 ]
> 数组字面量项集 → _数组字面量项_ , 可选 | _数组字面量项_ , _数组字面量项集_
> 数组字面量项 → _表达式_
> 字典字面量 → [ _字典字面量项集_ ] | [ : ]
> 字典字面量项集 → _字典字面量项_ , 可选 | _字典字面量项_ , _字典字面量项集_
> 字典字面量项 → _表达式_ : _表达式_
### Self 表达式语法
> self表达式 → self
> self表达式 → self . _标识符_
> self表达式 → self [ _表达式_ ]
> self表达式 → self . init
### 超类表达式语法
> 超类表达式 → _超类方法表达式_ | _超类下标表达式_ | _超类构造器表达式_
> 超类方法表达式 → super . _标识符_
> 超类下标表达式 → super [ _表达式_ ]
> 超类构造器表达式 → super . init
### 闭包表达式语法
> 闭包表达式 → { _闭包签名(Signational)_ 可选 _多条语句(Statements)_ }
> 闭包签名(Signational) → _参数从句_ _函数结果_ 可选 in
> 闭包签名(Signational) → _标识符集_ _函数结果_ 可选 in
> 闭包签名(Signational) → _捕获(Capature)集_ _参数从句_ _函数结果_ 可选 in
> 闭包签名(Signational) → _捕获(Capature)集_ _标识符集_ _函数结果_ 可选 in
> 闭包签名(Signational) → _捕获(Capature)集_ in
> 捕获(Capature)集 → [ _捕获(Capature)说明符_ _表达式_ ]
> 捕获(Capature)说明符 → weak | unowned | unowned(safe) | unowned(unsafe)
### 隐式成员表达式语法
> 隐式成员表达式 → . _标识符_
> 圆括号表达式(Parenthesized Expression)语法
> 圆括号表达式 → ( _表达式元素集_ 可选 )
> 表达式元素集 → _表达式元素_ | _表达式元素_ , _表达式元素集_
> 表达式元素 → _表达式_ | _标识符_ : _表达式_
### 通配符表达式语法
> 通配符表达式 → _
> 后置表达式语法
> 后置表达式 → _主表达式_
> 后置表达式 → _后置表达式_ _后置运算符_
> 后置表达式 → _函数调用表达式_
> 后置表达式 → _构造器表达式_
> 后置表达式 → _显示成员表达式_
> 后置表达式 → _后置self表达式_
> 后置表达式 → _动态类型表达式_
> 后置表达式 → _下标表达式_
> 后置表达式 → _强制取值(Forced Value)表达式_
> 后置表达式 → _可选链(Optional Chaining)表达式_
### 函数调用表达式语法
> 函数调用表达式 → _后置表达式_ _圆括号表达式_
> 函数调用表达式 → _后置表达式_ _圆括号表达式_ 可选 _后置闭包(Trailing Closure)_
> 后置闭包(Trailing Closure) → _闭包表达式_
### 构造器表达式语法
> 构造器表达式 → _后置表达式_ . init
### 显式成员表达式语法
> 显示成员表达式 → _后置表达式_ . _十进制数字_
> 显示成员表达式 → _后置表达式_ . _标识符_ _泛型参数从句_ _可选_
### 后置Self 表达式语法
> 后置self表达式 → _后置表达式_ . self
### 动态类型表达式语法
> 动态类型表达式 → _后置表达式_ . dynamicType
### 附属脚本表达式语法
> 附属脚本表达式 → _后置表达式_ [ _表达式集_ ]
### 强制取值(Forced Value)语法
> 强制取值(Forced Value)表达式 → _后置表达式_ !
### 可选链表达式语法
> 可选链表达式 → _后置表达式_ ?
## 词法结构
### 标识符语法
> 标识符 → _标识符头(Head)_ _标识符字符集_ 可选
> 标识符 → _标识符头(Head)_ _标识符字符集_ 可选
> 标识符 → _隐式参数名_
> 标识符集 → _标识符_ | _标识符_ , _标识符集_
> 标识符头(Head) → Upper- or lowercase letter A through Z
> _标识符头(Head)_ → _
> _标识符头(Head)_ → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, or U+00B7–U+00BA
> 标识符头(Head) → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, or U+00F8–U+00FF
> 标识符头(Head) → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, or U+180F–U+1DBF
> 标识符头(Head) → U+1E00–U+1FFF
> 标识符头(Head) → U+200B–U+200D, U+202A–U+202E, U+203F–U+2040, U+2054, or U+2060–U+206F
> 标识符头(Head) → U+2070–U+20CF, U+2100–U+218F, U+2460–U+24FF, or U+2776–U+2793
> 标识符头(Head) → U+2C00–U+2DFF or U+2E80–U+2FFF
> 标识符头(Head) → U+3004–U+3007, U+3021–U+302F, U+3031–U+303F, or U+3040–U+D7FF
> 标识符头(Head) → U+F900–U+FD3D, U+FD40–U+FDCF, U+FDF0–U+FE1F, or U+FE30–U+FE44
> 标识符头(Head) → U+FE47–U+FFFD
> 标识符头(Head) → U+10000–U+1FFFD, U+20000–U+2FFFD, U+30000–U+3FFFD, or U+40000–U+4FFFD
> 标识符头(Head) → U+50000–U+5FFFD, U+60000–U+6FFFD, U+70000–U+7FFFD, or U+80000–U+8FFFD
> 标识符头(Head) → U+90000–U+9FFFD, U+A0000–U+AFFFD, U+B0000–U+BFFFD, or U+C0000–U+CFFFD
> 标识符头(Head) → U+D0000–U+DFFFD or U+E0000–U+EFFFD
> 标识符字符 → 数值 0 到 9
> 标识符字符 → U+0300–U+036F, U+1DC0–U+1DFF, U+20D0–U+20FF, or U+FE20–U+FE2F
> 标识符字符 → _标识符头(Head)_
> 标识符字符集 → _标识符字符_ _标识符字符集_ 可选
> 隐式参数名 → $ _十进制数字集_
### 字面量语法
> 字面量 → _数值型字面量_ | _字符串字面量_ | _布尔字面量_ | _空字面量_
> _数值型字面量_ → - 可选 _整形字面量_ | - 可选 _浮点型字面量_
> _布尔字面量_ → true | false
> _空字面量_ → nil
### 整型字面量语法
> 整型字面量 → _二进制字面量_
> 整型字面量 → _八进制字面量_
> 整型字面量 → _十进制字面量_
> 整型字面量 → _十六进制字面量_
> 二进制字面量 → 0b _二进制数字_ _二进制字面量字符集_ 可选
> 二进制数字 → 数值 0 到 1
> 二进制字面量字符 → _二进制数字_ | _
> 二进制字面量字符集 → _二进制字面量字符_ _二进制字面量字符集_ 可选
> 八进制字面量 → 0o _八进制数字_ _八进制字符集_ 可选
> 八进字数字 → 数值 0 到 7
> 八进制字符 → _八进制数字_ | _
> 八进制字符集 → _八进制字符_ _八进制字符集_ 可选
> 十进制字面量 → _十进制数字_ _十进制字符集_ 可选
> 十进制数字 → 数值 0 到 9
> 十进制数字集 → _十进制数字_ _十进制数字集_ 可选
> 十进制字面量字符 → _十进制数字_ | _
> 十进制字面量字符集 → _十进制字面量字符_ _十进制字面量字符集_ 可选
> 十六进制字面量 → 0x _十六进制数字_ _十六进制字面量字符集_ 可选
> 十六进制数字 → 数值 0 到 9, a through f, or A through F
> 十六进制字符 → _十六进制数字_ | _
> 十六进制字面量字符集 → _十六进制字符_ _十六进制字面量字符集_ _可选_
### 浮点型字面量语法
> 浮点数字面量 → _十进制字面量_ _十进制分数_ 可选 _十进制指数_ 可选
> 浮点数字面量 → _十六进制字面量_ _十六进制分数_ 可选 _十六进制指数_
> 十进制分数 → . _十进制字面量_
> 十进制指数 → _浮点数e_ _正负号_ 可选 _十进制字面量_
> 十六进制分数 → . _十六进制数_
> _十六进制字面量字符集__可选_
> 十六进制指数 → _浮点数p_ _正负号_ 可选 _十六进制字面量_
> 浮点数e → e | E
> 浮点数p → p | P
> 正负号 → + | -
### 字符串型字面量语法
> 字符串字面量 → " _引用文本_ "
> 引用文本 → _引用文本条目_ _引用文本_ 可选
> 引用文本条目 → _转义字符_
> 引用文本条目 → ( _表达式_ )
> 引用文本条目 → 除了", \, U+000A, or U+000D的所有Unicode的字符
> 转义字符 → /0 | \ | \t | \n | \r | \" | \'
> 转义字符 → \u { _十六进制标量数字集_ }
> unicode标量数字集 → Between one and eight hexadecimal digits
### 运算符语法语法
> 运算符 → _运算符头_ _运算符字符集_ 可选 运算符 → _点运算符头_ _点运算符字符集_ 可选
> 运算符字符 → / | = | - | + | ! | * | % | | > | & | | | ^ | ~ | ?
> 运算符头 → U+00A1–U+00A7
> _运算符头_ → U+00A9 or U+00AB
> _运算符头_ → U+00AC or U+00AE
> _运算符头_ → U+00B0–U+00B1, U+00B6, U+00BB, U+00BF, U+00D7, or U+00F7
> _运算符头_ → U+2016–U+2017 or U+2020–U+2027
> _运算符头_ → U+2030–U+203E
> _运算符头_ → U+2041–U+2053
> _运算符头_ → U+2055–U+205E
> _运算符头_ → U+2190–U+23FF
> _运算符头_ → U+2500–U+2775
> _运算符头_ → U+2794–U+2BFF
> _运算符头_ → U+2E00–U+2E7F
> _运算符头_ → U+3001–U+3003
> _运算符头_ → U+3008–U+3030
> _运算符字符_ → _运算符头_
> _运算符字符_ → U+0300–U+036F
> _运算符字符_ → U+1DC0–U+1DFF
> _运算符字符_ → U+20D0–U+20FF
> _运算符字符_ → U+FE00–U+FE0F
> _运算符字符_ → U+FE20–U+FE2F
> _运算符字符_ → U+E0100–U+E01EF
> _运算符字符集_ → _运算符字符_ _运算符字符集__可选_
> _点运算符头_ → ..
> _点运算符字符_ → . | _运算符字符_
> _点运算符字符集_ → _点运算符字符_ _点运算符字符集_ _可选_
> _二元运算符_ → _运算符_
> 前置运算符 → _运算符_
> 后置运算符 → _运算符_
## 类型
### 类型语法
> 类型 → _数组类型_ | _字典类型_ | _函数类型_ | _类型标识符_ | _元组类型_ | _可选类型_ | _隐式解析可选类型_ | _协议合成类型_ | _元型类型_
### 类型注解语法
> 类型注解 → : _属性(Attributes)集_ 可选 _类型_
### 类型标识语法
> 类型标识 → _类型名称_ _泛型参数从句_ 可选 | _类型名称_ _泛型参数从句_ 可选 . _类型标识符_
> 类型名 → _标识符_
### 元组类型语法
> 元组类型 → ( _元组类型主体_ 可选 )
> 元组类型主体 → _元组类型的元素集_ ... 可选
> 元组类型的元素集 → _元组类型的元素_ | _元组类型的元素_ , _元组类型的元素集_
> 元组类型的元素 → _属性(Attributes)集_ 可选 inout 可选 _类型_ | inout 可选 _元素名_ _类型注解_
> 元素名 → _标识符_
### 函数类型语法
> 函数类型 → _类型_ throws 可选 -> _类型_
> 函数类型 → _类型_ rethrows -> _类型_
### 数组类型语法
> 数组类型 → [ _类型_ ]
### 字典类型语法
> 字典类型 → [ _类型 : 类型_ ]
### 可选类型语法
> 可选类型 → _类型_ ?
> 隐式解析可选类型(Implicitly Unwrapped Optional Type)语法
> 隐式解析可选类型 → _类型_ !
### 协议合成类型语法
> 协议合成类型 → protocol _协议标识符集_ 可选 >
> 协议标识符集 → _协议标识符_ | _协议标识符_ , _协议标识符集_
> 协议标识符 → _类型标识符_
### 元(Metatype)类型语法
> 元类型 → _类型_ . Type | _类型_ . Protocol
### 类型继承从句语法
> _类型继承从句_ → : _类条件(class-requirement))_ , _类型继承集_
> _类型继承从句_ → : _类条件(class-requirement))_
> _类型继承从句_ → : _类型继承集_
> _类型继承集_ → _类型标识符_ | _类型标识符_ , _类型继承集_
> _类条件_ → class