词法结构
空白语法
空白项 → 断行符
空白项 → 注释
空白项 → 多行注释
空白项 →U+0000, U+0009, U+000B, U+000C, 或者 U+0020
断行符 → U+000D
断行符 → U+000D 接着是 U+000A
多行注释 →
/*
多行注释内容*/
注释内容项 → 任何 Unicode 标量值, 除了 U+000A 或者 U+000D
多行注释内容项 → 多行注释
多行注释内容项 → 注释内容项
多行注释内容项 → 任何 Unicode 标量值, 除了
/*
或者*/
标识符语法
标识符 → 隐式参数名
头部标识符 →
_
头部标识符 →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, 或者 U+00F8--U+00FF
头部标识符 →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, 或者 U+2060--U+206F
头部标识符 →U+2070--U+20CF, U+2100--U+218F, U+2460--U+24FF, 或者 U+2776--U+2793
头部标识符 →U+2C00--U+2DFF 或者 U+2E80--U+2FFF
头部标识符 →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, 或者 U+FE30--U+FE44
头部标识符 →U+FE47--U+FFFD
头部标识符 →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, 或者 U+80000--U+8FFFD
头部标识符 →U+90000--U+9FFFD, U+A0000--U+AFFFD, U+B0000--U+BFFFD, 或者 U+C0000--U+CFFFD
头部标识符 →U+D0000--U+DFFFD 或者 U+E0000--U+EFFFD
标识符字符组 → U+0300--U+036F, U+1DC0--U+1DFF, U+20D0--U+20FF, 或者 U+FE20--U+FE2F
标识符字符组 → 头部标识符
隐式参数名 →
$
十进制数字列表
字面量语法
字面量 → 数值字面量 | 字符串字面量 | 布尔值字面量 | nil字面量
整数字面量语法
整数字面量 → 二进制字面量
整数字面量 → 八进制字面量
整数字面量 → 十进制字面量
整数字面量 → 十六进制字面量
二进制字面量 →
0b
二进制数字 二进制字面量字符组 opt二进制字面量字符组 → 二进制数字 |
_
二进制字面量字符组 → 二进制字面量字符组 二进制字面量字符组 opt
八进制字面量 →
0o
八进制数字 八进制字面量字符组 opt八进制字面量字符组 → 八进制数字 |
_
八进制字面量字符组 → 八进制字面量字符组 八进制字面量字符组 opt
十进制字面量字符组 → 十进制数字 |
_
十进制字面量字符组 → 十进制字面量字符组 十进制字面量字符组 opt
十六进制字面量 →
0x
十六进制数字 十六进制字面量字符组 opt十六进制数字 →数值 0 到 9, 字母 a 到 f, 或 A 到 F
十六进制字面量字符组 → 十六进制数字 |
_
十六进制字面量字符组 → 十六进制字面量字符组 十六进制字面量字符组 opt
浮点数字面量语法
浮点数字面量 → 十进制字面量 十进制分数 opt 十进制指数 opt
浮点数字面量 → 十六进制字面量 十六进制分数 opt 十六进制指数
十进制分数 →
.
十进制字面量十六进制分数 →
.
十六进制数字 十六进制字面量字符组 opt
字符串字面量语法
静态字符串字面量 →
"
引用文本 opt"
静态字符串字面量 →
"""
多行引用文本 opt"""
引用文本项 → 转义字符
引用文本项 →除了以外的所有 Unicode 字符
"
,\
, U+000A, 或者 U+000D多行引用文本项 → 转义字符
多行引用文本项 → 除了以外的所有 Unicode 字符
\
多行引用文本项 → 转义字符
插值字符串字面量 →
"
插值文本 opt"
插值字符串字面量 →
"""
多行引用文本 opt"""
转义字符 →
\0
|\\
|\t
|\n
|\r
|\"
|\'
转义字符 →
\u
{
Unicode 标量数字}
运算符语法
头部运算符 →
/
|=
|-
|+
|!
|*
|%
|<
|>
|&
||
|^
|~
|?
头部运算符 →U+00A1--U+00A7
头部运算符 →U+00A9 或者 U+00AB
头部运算符 →U+00AC 或者 U+00AE
头部运算符 →U+00B0--U+00B1, U+00B6, U+00BB, U+00BF, U+00D7, 或者 U+00F7
头部运算符 →U+2016--U+2017 或者 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
点运算符字符组 →
.
| 运算符字符组二元运算符 → 运算符
前缀运算符 → 运算符
前缀运算符 → 运算符
类型
类型语法
类型 → 数组类型
类型 → 字典类型
类型 → 函数类型
类型 → 类型标识
类型 → 元组类型
类型 → 可选类型
类型 → 隐式解析可选类型
类型 → 协议合成类型
类型 → 元型类型
类型 →
任意类型
类型 →
自身类型
类型 →
(
类型)
类型注解语法
类型标识符语法
类型标识符 → 类型名称 泛型参数子句 opt | 类型名称 泛型参数子句 opt
.
类型标识符类型名称 → 标识符
元组类型语法
元组类型 →
(
)
|(
元组类型语法,
元组类型元素列表)
元组类型元素列表 → 元组类型元素 | 元组类型元素
,
元组类型元素列表元素名称 → 标识符
函数类型语法
函数类型 → 特性列表 opt 函数类型参数子句
throws
opt->
类型函数类型 → 特性列表 opt 函数类型参数子句
rethrows
->
类型函数类型参数子句 →
(
函数类型参数列表...
opt)
函数类型参数列表 → 函数类型参数 | 函数类型参数
,
函数类型参数列表函数类型参数 → 特性列表 opt
inout
opt 类型 | 参数标签 类型注解参数标签 → 标识符
数组类型语法
数组类型 →
[
类型]
字典类型语法
可选类型语法
可选类型 → 类型
?
隐式解析可选类型语法
隐式解析可选类型 → 类型
!
协议合成类型语法
元类型语法
类型继承子句语法
类型继承子句 →
:
类型继承列表
表达式
表达式语法
前缀表达式语法
前缀表达式 → 输入输出表达式
输入输出表达式 →
&
标识符
try 表达式语法
二元表达式语法
二元表达式 → 赋值运算符 try 运算符 opt 前缀表达式
二元表达式 → 条件运算符 try 表达式 opt 前缀表达式
二元表达式 → 类型转换表达式
赋值表达式语法
条件运算符语法
条件运算符 →
?
表达式:
类型转换运算符语法
类型转换运算符 →
is
类型类型转换运算符 →
as
类型类型转换运算符 →
as
?
类型类型转换运算符 →
as
!
类型
基本表达式语法
基本表达式 → 字面量表达式
基本表达式 → self 表达式
基本表达式 → 超类表达式
基本表达式 → 闭包表达式
基本表达式 → 圆括号表达式
基本表达式 → 元组表达式
基本表达式 → 隐式成员表达式
基本表达式 → 通配符表达式
基本表达式 → key-path表达式
基本表达式 → 选择器表达式
基本表达式 → key-path字符串表达式
字面量表达式语法
字面量表达式 → 字面量
字面量表达式 → 数组字面量 | 字典字面量 | 练习场字面量
字面量表达式 →
#file
|#line
|#column
|#function
数组字面量 →
[
数组字面量项 opt]
数组字面量项 → 数组字面量项
,
opt | 数组字面量项,
数组字面量项数组字面量项 → 表达式
字典字面量 →
[
字典字面量项]
|[
:
]
字典字面量项 → 字典字面量项
,
opt | 字典字面量项,
字典字面量项练习场字面量 →
#colorLiteral
(
red
:
表达式,
green
:
表达式,
blue
:
表达式,
alpha
:
表达式)
练习场字面量 →
#fileLiteral
(
resourceName
:
表达式)
练习场字面量 →
#imageLiteral
(
resourceName
:
表达式)
self 表达式语法
self 表达式 →
self
| self 方法表达式 | self 下标表达式 | self 构造器表达式self 方法表达式 →
self
.
标识符self 下标表达式 →
self
[
函数调用参数列表]
父类表达式语法
超类表达式 → 超类方法表达式 | 超类下标表达式 | 超类初始化表达式
超类方法表达式 →
super
.
标识符超类下标表达式 →
super
[
函数调用参数列表]
闭包表达式语法
闭包签名 → 闭包列表 opt 闭包参数子句
throws
opt函数结果 optin
闭包签名 → 闭包列表
in
闭包参数子句 →
(
)
|(
闭包参数)
| 标识符列表闭包参数名称 → 标识符
闭包列表 →
[
闭包列表项]
捕获说明符 →
weak
|unowned
|unowned(safe)
|unowned(unsafe)
隐式成员表达式语法
隐式成员表达式 →
.
标识符
圆括号表达式语法
圆括号表达式 →
(
表达式)
元组表达式语法
通配符表达式语法
key-path 表达式语法
key-path 表达式 →
\
类型 opt.
key-path 组件key-path 组件 → key-path 组件 | key-path 组件
.
key-path 组件key-path 组件 → 标识符 key-path 后缀 opt | key-path 后缀
key-path 后缀 → key-path 后缀 key-path 后缀 opt
key-path 后缀 →
?
|!
|[
函数调用参数列表]
选择器表达式语法
选择器表达式 →
#selector
(
表达式)
选择器表达式 →
#selector
(
getter:
表达式)
选择器表达式 →
#selector
(
setter:
表达式)
key-path 字符串表达式语法
key-path 字符串表达式 →
#keyPath
(
表达式)
后缀表达式语法
后缀表达式 → 基本表达式
后缀表达式 → 函数调用表达式
后缀表达式 → 初始化表达式
后缀表达式 → 显式成员表达式
后缀表达式 → 后缀 self 表达式
后缀表达式 → 下标表达式
后缀表达式 → 强制取值表达式
后缀表达式 → 可选链表达式
函数调用表达式语法
函数调用表达式 → 后缀表达式 函数调用参数子句 opt 尾随闭包
函数调用参数子句 →
(
)
|(
函数调用参数列表)
函数调用参数列表 → 函数调用参数 | 函数调用参数
,
函数调用参数列表尾随闭包 → 闭包表达式
初始化表达式语法
初始化表达式 → 后缀表达式
.
init
显式成员表达式语法
显式成员表达式 → 后缀表达式
.
标识符 泛型参数子句 opt显式成员表达式 → 后缀表达式
.
标识符(
参数名称)
参数名称 → 标识符
:
后缀 self 表达式语法
后缀 self 表达式 → 后缀表达式
.
self
下标表达式语法
强制取值表达式语法
强制取值表达式 → 后缀表达式
!
可选链表达式语法
可选链表达式 → 后缀表达式
?
语句语句语法
语句 → 表达式
;
opt语句 → 语句
;
opt语句 → 循环语句
;
opt语句 → 分支语句
;
opt语句 → 标签语句
;
opt语句 → 控制转移语句
;
opt语句 → defer 语句
;
opt语句 → do 语句
;
opt语句 → 编译器控制语句
循环语句语法
循环语句 → for-in 语句
循环语句 → while 语句
循环语句 → repeat-while 语句
for-in 语句语法
while 语句语法
repeat-while 语句语法
分支语句语法
分支语句 → if 语句
分支语句 → guard 语句
分支语句 → switch 语句
if 语句语法
guard 语句语法
switch 语句语法
switch 语法 →
switch
表达式{
switch 子句 opt}
switch 子句 → switch 子句 switch 子句 opt
switch 子句 → case 标签语句 | default 标签 语句
case 标签 →
case
case 项列表:
case 项列表 → 模式 where 子句 opt | 模式 where 子句 opt
,
case 项列表where 子句 →
where
where 表达式where 表达式 → 表达式
标签语句语法
语句标签 → 标签名称
:
标签名称 → 标识符
控制转移语句语法
控制转移语句 → break 语句
控制转移语句 → continue 语句
控制转移语句 → fallthrough 语句
控制转移语句 → return 语句
控制转移语句 → throw 语句
break 语句语法
break 语句 →
break
标签名称 opt
continue 语句语法
continue 语句 →
continue
标签名称 opt
fallthrough 语句语法
return 语句语法
return 语句 →
return
表达式 opt
throw 语句语法
throw 语句 →
throw
表达式
defer 语句语法
defer 语句 →
defer
code 块
do 语句语法
do 语句 →
do
code 块 catch 子句 opt
编译控制语句语法
编译控制语句 → 条件编译块
编译控制语句 → 线路控制语句
编译控制语句 → 诊断语句
条件编译块语法
条件编译块 → if 指令子句 elseif 指令子句 opt else 指令子句 opt endif 指令子句
elseif 指令子句 → elseif 指令子句 elseif 指令子句 opt
elseif 指令子句 → elseif 指令 编译条件 声明 opt
编译条件 → 平台条件
编译条件 → 标识符
编译条件 → boolean 字面量
编译条件 →
(
编译条件)
编译条件 →
!
编译条件平台条件 →
os
(
操作系统)
平台条件 →
arch
(
结构)
平台条件 →
swift
(
>=
swift 版本)
平台条件 →
canImport
(
模块名称)
平台条件 →
targetEnvironment
(
运行环境)
操作系统 →
macOS
|iOS
|watchOS
|tvOS
运行环境 →
i386
|x86_64
|arm
|arm64
swift 版本 → 十进制数字 swift 拓展版本 opt
swift 拓展版本 →
.
十进制数字 swift 拓展版本 opt模块名称 → 标识符
线路控制声明语法
线路控制声明 →
#sourceLocation
(
file:
file-name,
line:
行号)
线路控制声明 →
#sourceLocation
(
)
行号 → A decimal integer greater than zero
文件名 → 静态字符串字面量
编译时诊断声明语法
编译时诊断声明 →
#error
(
诊断信息)
诊断声明 →
#warning
(
诊断信息)
诊断信息 → 静态字符串字面量
可用性条件语法
可用性条件 →
#available
(
可用性参数)
可用性参数 →
*
平台名称 →
iOS
|iOSApplicationExtension
平台名称 →
macOS
|macOSApplicationExtension
平台名称 →
watchOS
平台名称 →
tvOS
平台版本 → 十进制数字
声明声明语法
声明 → 导入声明
声明 → 常量声明
声明 → 变量声明
声明 → 类型别名声明
声明 → 函数声明
声明 → 枚举声明
声明 → 结构体声明
声明 → 类声明
声明 → 协议声明
声明 → 初始化器声明
声明 → 去初始化器声明
声明 → 扩展声明
声明 → 下标声明
声明 → 运算符声明
声明 → 优先组声明
顶级声明语法
顶级声明 → 声明 opt
code 块语法
code 块 →
{
声明 opt}
导入声明语法
导入声明 → 特性列表 opt
import
导入类型 opt 导入路径导入类型 →
typealias
|struct
|class
|enum
|protocol
|let
|var
|func
常量声明语法
常量声明 → 特性列表 opt 声明修饰符列表 opt
let
模式构造器列表模式构造器列表 → 模式初始化 | 模式初始化
,
模式初始化列表初始化 →
=
表达式
变量声明语法
变量声明 → 变量声明头 变量名称 类型标注 getter-setter 代码块
变量声明 → 变量声明头 变量名称 类型标注 getter-setter-keyword 代码块
变量声明 → 变量声明头 变量名称 构造器 willSet-didSet 代码块
变量声明 → 变量声明头 变量名称 类型标注 构造器 opt willSet-didSet 代码块
变量声明头 → 特性列表 opt 声明修饰符列表 opt
var
变量名称 → 标识符
getter-setter 代码块 → 代码块
getter-setter 代码块 →
{
getter 子句 setter 子句 opt}
getter-setter 代码块 →
{
setter 子句 getter 子句}
getter 子句 → 特性列表 opt 声明修饰符列表 opt
get
代码块setter 子句 → 特性列表 opt 声明修饰符列表 opt
set
setter 名称 opt 代码块setter 名称 →
(
标识符)
getter-setter-keyword 代码块 →
{
getter-keyword 子句 setter-keyword 子句 opt}
getter-setter-keyword 代码块 →
{
setter-keyword 子句 getter-keyword 子句}
getter-keyword 子句 → 特性列表 opt 声明修饰符列表 opt
get
setter-keyword 子句 → 特性列表 opt 声明修饰符列表 opt
set
willSet-didSet 代码块 →
{
willSet 子句 didSet 子句 opt}
willSet-didSet 代码块 →
{
didSet 子句 willSet 子句 opt}
类型别名声明语法
类型别名声明 → 特性列表 opt 访问级别修饰符 opt
typealias
类型别名名称 泛型形参子句 opt 类型别名名称类型别名名称 → 标识符
类型别名赋值 →
=
类型
函数声明语法
函数声明 → 函数头 函数名 泛型形参子句 opt函数签名 泛型 where 子句 opt 函数体 opt
函数头 → 特性列表 opt 声明修饰符列表 opt
func
函数签名 → 参数子句
throws
opt 函数结果 opt函数体 → 代码块
参数子句 →
(
)
|(
参数列表)
参数 → 外部参数名 opt 内部参数名 类型标注默认参数子句 opt
外部参数名 → 标识符
内部参数名 → 标识符
默认参数子句 →
=
表达式
枚举声明语法
枚举声明 → 特性列表 opt 访问级别修饰符 opt 联合风格枚举
枚举声明 → 特性列表 opt 访问级别修饰符 opt 原始值风格枚举
联合风格枚举 →
indirect
optenum
枚举名称 泛型形参子句 opt 类型继承子句 opt 泛型 where 子句 opt{
联合风格枚举成员 opt}
联合风格枚举成员 → 联合风格枚举成员 联合风格枚举成员 opt
联合风格枚举成员 → 声明 | 联合风格枚举用例子句 | 编译控制语法
联合风格枚举用例子句 → 特性列表 opt
indirect
optcase
联合风格枚举用例列表联合风格枚举用例列表 → 联合风格枚举用例 | 联合风格枚举用例
,
联合风格枚举用例列表枚举名称 → 标识符
枚举用例名称 → 标识符
原始值风格枚举 →
enum
枚举名称 泛型形参子句 opt类型继承子句 泛型 where 子句 opt{
原始值风格枚举成员}
原始值风格枚举成员 → 原始值风格枚举成员 原始值风格枚举成员 opt
原始值风格枚举成员 → 声明 | 原始值风格枚举用例子句 | 编译控制语法
原始值风格枚举用例子句 → 特性列表 opt
case
原始值风格枚举用例列表原始值风格枚举用例列表 → 原始值风格枚举用例 | 原始值风格枚举用例
,
原始值风格枚举用例列表原始值赋值 →
=
原始值字面量
结构体声明语法
结构体声明 → 特性列表 opt 访问级别修饰符 opt
struct
结构体名称 泛型形参子句 opt 类型继承子句 opt 泛型 where 子句 opt 结构体主体结构体名称 → 标识符
结构体主体 →
{
结构体成员 opt}
类声明语法
类声明 → 特性列表 opt 访问级别修饰符 opt
final
optclass
类名 泛型形参子句 opt 类型继承子句 opt 泛型 where 子句 opt 类主体类声明 → 特性列表 opt
final
访问级别修饰符 optclass
类名 泛型形参子句 opt 类型继承子句 opt 泛型 where 子句 opt 类主体类名 → 标识符
类主体 →
{
类成员 opt}
协议声明语法
协议声明 → 特性列表 opt 访问级别修饰符 opt
protocol
协议名称 类型继承子句 opt 泛型 where 子句 opt 协议主体协议名称 → 标识符
协议主体 →
{
协议成员 opt}
协议成员声明 → 协议属性声明
协议成员声明 → 协议方法声明
协议成员声明 → 协议构造器声明
协议成员声明 → 协议下标声明
协议成员声明 → 协议关联类型声明
协议成员声明 → 类型别名声明
协议属性声明语法
协议属性声明 → 变量声明头 变量名称 类型标注 getter-setter-keyword 代码块
协议方法声明语法
协议方法声明 → 函数头 函数名 泛型形参子句 opt 函数签名 泛型 where 子句 opt
协议构造器声明语法
协议构造器声明 → 构造器头 泛型形参子句 opt 参数子句
throws
opt 泛型 where 子句 opt协议构造器声明 → 构造器头 泛型形参子句 opt 参数子句
rethrows
泛型 where 子句 opt
协议下标声明语法
协议下标声明 → 下标头 下标结果 泛型 where 子句 opt getter-setter-keyword 代码块
协议关联类型声明语法
协议关联类型声明 → 特性列表 opt 访问级别修饰符 opt
associatedtype
类型别名名称 类型继承子句 opt类型别名赋值 opt 泛型 where 子句 opt构造器声明语法
构造器声明 → 构造器头 泛型形参子句 opt 参数子句
throws
opt 泛型 where 子句 opt构造器主体构造器声明 → 构造器头 泛型形参子句 opt 参数子句
rethrows
泛型 where 子句 opt 构造器主体构造器头 → 特性列表 opt 声明修饰符 opt
init
构造器头 → 特性列表 opt 声明修饰符 opt
init
?
构造器头 → 特性列表 opt 声明修饰符 opt
init
!
构造器主体 → 代码块
析构器声明语法
扩展声明语法
扩展声明 → 特性列表 opt 访问级别修饰符 opt
extension
类型标识符 类型继承子句 opt 泛型 where 子句 opt 扩展主体扩展主体 →
{
扩展成员 opt}
下标声明语法
下标声明 → 下标头 下标结果 泛型 where 子句 opt代码块
下标声明 → 下标头 下标结果 泛型 where 子句 opt getter-setter 代码块
下标声明 → 下标头 下标结果 泛型 where 子句 opt getter-setter-keyword 代码块
运算符声明语法
运算符声明 → 前缀运算符声明 | 前缀运算符声明 | 后缀运算符声明
前缀运算符声明 →
prefix
operator
运算符前缀运算符声明 →
postfix
operator
运算符后缀运算符声明 →
infix
operator
运算符 后缀运算符组 opt后缀运算符组 →
:
优先级组名称
优先级组声明语法
优先级组声明 →
precedencegroup
优先级组名称{
优先级组属性 opt}
优先级组属性 → 优先级组关系
优先级组属性 → 优先级组赋值性
precedence-group-attribute → 优先级组相关性
优先级组关系 →
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
声明修饰符 → 访问级别修饰符
声明修饰符 → 转义修饰符
访问级别修饰符 →
private
|private ( set )
访问级别修饰符 →
fileprivate
|fileprivate ( set )
访问级别修饰符 →
internal
|internal ( set )
访问级别修饰符 →
public
|public ( set )
访问级别修饰符 →
open
|open ( set )
特性特性语法
特性名 → 标识符
特性参数子句 →
(
平衡令牌 opt)
平衡令牌 →
(
平衡令牌 opt)
平衡令牌 →
[
平衡令牌 opt]
平衡令牌 →
{
平衡令牌 opt}
平衡令牌 → 任何标识符、关键字、文字或运算符
模式语法
模式 → 值绑定模式
模式 → 枚举用例模式
模式 → 可选模式
模式 → 类型转换模式
模式 → 表达式模式
通配符模式语法
标识符模式语法
标识符模式 → identifier
值绑定模式语法
元组模式语法
元组模式 →
(
元组模式元素列表 opt)
枚举用例模式语法
可选模式语法
可选模式 → 标识符模式
?
类型转换模式语法
is 模式 →
is
类型
表达式模式语法
表达式模式 → 表达式
泛型参数泛型形参子句语法
泛型形参子句 →
<
泛型形参列表>
泛型形参 → 类名
泛型 where 子句 →
where
约束列表
泛型实参子句语法
泛型实参子句 →
<
泛型实参列表>
泛型实参 → 类型