`C++`巴范语法规则
词分器.字符集
四16进制:
16进制数 16进制数 16进制数 16进制数
通用字符名:
\u 四16进制
\U 四16进制 四16进制
词分器.预令牌
预处理令牌:
头名
标识符
预数字
符字面
用户定义符字面 C++0x
串字面
用户定义串字面 C++0x
预处理操作或运算
非空白字符不能为以上.
词分器.令牌
令牌:
标识符
关键字
字面
符号令牌见C++标准核心语言问题n.189
运算子见C++标准核心语言问题n.189
词分器.头
头名:
<h符序列>
"q符序列"
h符序列:
h符
h符序列 h符
h符:
除了"新行|>"的其他符
q符序列:
q符
q符序列 q符
q符:
除了"新行|""的
词分器.预数字
预数字:
数字
.数字
预数字 数字
预数字 非数字标识符
预数字 e 正负号
预数字 E 正负号
预数字 .
词分器.名
标识符:
非数字标识符 C++0x
标识符 非数字标识符 C++0x
标识符 数字
非数字标识符:
非数字 C++0x
通用字符名 C++0x
其他实现定义字符C++0x
非数字:
C++0x移除通用字符名
a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _(下划线)
数字:
0 1 2 3 4 5 6 7 8 9
词分器.键
关键字:
16符型 32符型 常式 推导 无异 空针 静断 线本 对齐为 的对齐 C++0x
//上面都是C++0x
导出 C++0x-保留未来用
类 常 常转 下 默认 删 干 双精 动转 异 枚 显 外 假 浮 对 友 至 如 内联 整 长 可变 名字空间 新 符号 私 保护 公 注册 重转 中 短 整 的大小 静 静转 构 开关 元 本 抛 真 试 又 具型 型名 联 正 用 虚 空 易失 宽符型 当 汇编 动 极 断 若 抓 符
词分器.操作符
符号令牌:
在C++标准核心语言问题n.189下见预处理操作或运算
运算子:
在C++标准核心语言问题n.189下见预处理操作或运算
预处理操作或运算:
{ } [ ] # ## () <: :> <% %> %: %:%: ; : ... 新 删:: . .* + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> <<= >>= == != <= >= && || ++ -- , ->* -> 和 与等 位与 位或 补 不 不等 或 或等 异或 异或等
词分器.字面.种类
字面:
整字面 符字面 浮字面 串字面 布尔字面
指针字面 用户定义字面 C++0x
词分器.图标
整字面:
十进制字面 整后缀 可选
八进制字面 整后缀 可选
16进制字面 整后缀 可选
十进制字面:
非零数字
十进制字面 数字
八进制字面:
0
八进制字面 八进制数字
16进制字面:
0x 16进制数
0X 16进制数
16进制字面 16进制数
非零数字:
1 2 3 4 5 6 7 8 9
八进制数字:
0 1 2 3 4 5 6 7
16进制数:
0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
整后缀:
正后缀 长后缀 可选
正后缀 长长后缀 可选 C++0x
长后缀 正后缀 可选
长长后缀 正后缀 可选 C++0x
正后缀:
u U
长后缀:
l L
长长后缀:
ll LL C++0x
词分器.符常
符字面:
'c符序列'
u'c符序列' C++0x
U'c符序列' C++0x
L'c符序列'
c符序列:
c符
c符序列 c符
c符:
除了"\'|\\|\n"符
转义序列
通用字符名
转义序列:
简单转义序列
八进制转义序列
16进制转义序列
简单转义序列:
"\'"
"""
\
\\
\a
\b
\f
\n
\r
\t
\v
八进制转义序列:
\八进制数字
\八进制数字 八进制数字
\八进制数字 八进制数字 八进制数字
16进制转义序列:
\x 16进制数
16进制转义序列 16进制数
词分器.浮常
浮字面:
分数常数 指数部分 可选 浮动后缀 可选
数字序列 指数部分 浮动后缀 可选
分数常数:
数字序列 可选 . 数字序列
数字序列 .
指数部分:
e 正负号 可选 数字序列
E 正负号 可选 数字序列
正负号:
+
-
数字序列:
数字
数字序列 数字
浮动后缀:
f l F L
词分器.串
串字面:
编码前缀 可选 " s符序列 可选 " C++0x
编码前缀 可选 R 原始串 C++0x
编码前缀:
u8 u U L C++0x
s符序列:
s符
s符序列 s符
s符:
除了""|\\|\n"符
转义序列
通用字符名
原始串:
"d符序列 可选 (r符序列 可选) d符序列 可选"C++0x
r符序列:
r符 C++0x
r符序列 r符 C++0x
r符:
除了")"序 初始d符序列 可选 """
d符序列:
d符 C++0x
d符序列 d符 C++0x
d符:
除了"空格|()|\\|水平控制符|\t|\p|\n"等
词分器.极
布尔字面:
假
真
词分器.空针
指针字面:
空针 C++0x
词分器.扩展
用户定义字面:
用户定义整字面 C++0x
用户定义浮字面 C++0x
用户定义串字面 C++0x
用户定义符字面 C++0x
用户定义整字面:
十进制字面 用定后缀 C++0x
八进制字面 用定后缀 C++0x
16进制字面 用定后缀 C++0x
用户定义浮字面:
分数常数 指数部分 可选 用定后缀 C++0x
数字序列 指数部分 用定后缀 C++0x
用户定义串字面:
串字面 用定后缀 C++0x
用户定义符字面:
符字面 用定后缀 C++0x
用定后缀:
标识符 C++0x
基本.链接
翻译单元:
声明序列 可选
式.主要.一般
主要式:
字面
本
(式)
标识式
λ式 C++0x
标识式:
不合格标识
合格标识
不合格标识:
标识符
符号函数标识
转换函数标识
字面符号标识 C++0x
~类名
~推导型限定器 C++0x
模板标识
合格标识:
:: 可选 嵌套名限定器 元 可选 不合格标识
::标识符
::符号函数标识
::字面符号标识 C++0x
::模板标识
嵌套名限定器:
型名::
名间名::
推导型限定器::C++0x
嵌套名限定器 标识符::
嵌套名限定器 元 可选 简单模板标识::
式.主要.λ
λ式:
λ引入者 λ声明器 可选 组合句 C++0x
λ引入者:
[捕捉λ 可选] C++0x
捕捉λ:
默认取 C++0x
捕捉列表 C++0x
默认取 , 捕捉列表 C++0x
默认取:
& C++0x
= C++0x
捕捉列表:
捕捉... 可选 C++0x
捕捉列表 , 捕捉... 可选 C++0x
捕捉:
标识符 C++0x
& 标识符 C++0x
本 C++0x
λ声明器:
( 形参声明语句 )可变 可选 异常规范 可选 属性限定器序列 可选 尾中类型 可选 C++0x
式.提交
后缀式:
主要式
后缀式[式]
后缀式[括号初化列表 可选]C++0x
后缀式(式列表 可选)
简单类型限定器(式列表 可选)
型名限定器(式列表 可选)
简单类型限定器 括号初化列表 C++0x
型名限定器 括号初化列表 C++0x
后缀式.元 可选 标识式
后缀式->元 可选 标识式
后缀式.伪析构器名
后缀式->伪析构器名
后缀式++
后缀式--
动转<型标>(式)
静转<型标>(式)
重转<型标>(式)
常转<型标>(式)
具型(式)
具型(型标)
式列表:
初化器列表
伪析构器名:
:: 可选 嵌套名限定器 可选 型名::~型名
:: 可选 嵌套名限定器 元 简单模板标识::~型名 C++0x
:: 可选 嵌套名限定器 可选~型名
~推导型限定器 C++0x
式.一元
一元式:
后缀式
++强转式
--强转式
一元符号 强转式
的大小 一元式
的大小(型标)
的大小...(标识符)C++0x
的对齐(型标)C++0x
无异式 C++0x
新式
删式
一元符号:
* & + - ! ~
式.新
新式:
:: 可选 新 新放置 可选 新型标 新初化器 可选
:: 可选 新 新放置 可选(型标)新初化器 可选
新放置:
(式列表)
新型标:
类型限定器序列 新声明器 可选
新声明器:
针符号 新声明器 可选
无针新声明器 C++0x
无针新声明器:
[式]属性限定器序列 可选 C++0x
无针新声明器[常数式]属性限定器序列 可选 C++0x
新初化器:
(式列表 可选)
括号初化列表 C++0x
式.删
删式:
:: 可选 删 强转式
:: 可选 删[]强转式
式.一元.无异
无异式:
无异(式)C++0x
式.转换
强转式:
一元式
(型标)强转式
式.成针.操作
成针式:
强转式
成针式.*强转式
成针式->*强转式
式.乘
乘法式:
成针式
乘法式*成针式
乘法式/成针式
乘法式%成针式
式.加
加式:
乘法式
加式+乘法式
加式-乘法式
式.转移
转移式:
加式
转移式<<加式
转移式>>加式
式.相对
关系式:
转移式
关系式<转移式
关系式>转移式
关系式<=转移式
关系式>=转移式
式.等
等式:
关系式
等式==关系式
等式!=关系式
式.位.和
与式:
等式
与式&等式
式.异或
异或式:
与式
异或式 ^ 与式
式.或
包含或式:
异或式
包含或式|异或式
式.日志.和
逻辑与式:
包含或式
逻辑与式 && 包含或式
式.日志.或
逻辑或式:
逻辑与式
逻辑或式||逻辑与式
式.条件
条件式:
逻辑或式
逻辑或式 式:赋值式
式.赋值
赋值式:
条件式
逻辑或式 赋值符 初化器语句 C++0x
抛式
赋值符:
= *= /= %= += -= >>= <<= &= ^= |=
式.逗号
式:
赋值式
式,赋值式
式.常
常数式:
条件式
语句.语句
语句:
标签语句
属性限定器序列 可选 式句 C++0x
属性限定器序列 可选 组合句 C++0x
属性限定器序列 可选 选择语句 C++0x
属性限定器序列 可选 步语句 C++0x
属性限定器序列 可选 跳语句 C++0x
声明句
属性限定器序列 可选 试块
语句.标签
标签语句:
属性限定器序列 可选 标识符:语句
属性限定器序列 可选 若 常数式:语句
属性限定器序列 可选 默认:语句
语句.式
式句:
式 可选;
语句.块
组合句:
{语句序列 可选}
语句序列:
语句
语句序列 语句
语句.选择
选择语句:
如(条件)语句
如(条件)语句 异 语句
开关(条件)语句
条件:
式
属性限定器序列 可选 声明限定器序列 声明器=初化器语句 C++0x
属性限定器序列 可选 声明限定器序列 声明器 括号初化列表 C++0x
语句.步
步语句:
当(条件)语句
干 语句 当(式);
对(对初化语句 条件 可选;式 可选)语句
对(对区间声明:对区间初化器)语句 C++0x
对初化语句:
式句
简单声明
对区间声明:
属性限定器序列 可选 类型限定器序列 声明器 C++0x
对区间初化器:
式
括号初化列表
语句.跳
跳语句:
断;
下;
中 式 可选;
中 括号初化列表 可选;C++0x
至 标识符;
语句.声明
声明句:
声明块
声明.声明
声明序列:
声明
声明序列 声明
声明:
声明块
定义函数
模板声明
显实例
显特化
链接规范
定义名间
声明空 C++0x
声明属性 C++0x
声明块:
简单声明
定义汇编
定义名间别名
用声明
用指令
静断声明 C++0x
别名声明 C++0x
暗色枚声明 C++0x
别名声明:
用 标识符=型标;C++0x
简单声明:
属性限定器序列 可选 声明限定器序列 可选 初化声明器列表 可选;C++0x
静断声明:
静断(常数式,串字面);C++0x
声明空:
;C++0x
声明属性:
属性限定器序列;C++0x
声明.特殊
声明限定器:
存储类限定器
类型限定器
函数限定器
友
又
常式 C++0x
声明限定器序列:
声明限定器 属性限定器序列 可选 C++0x
声明限定器 声明限定器序列 C++0x
声明.存储类
存储类限定器:
//动 移除 C++0x
线本 C++0x
注册 静 外 可变
声明.函数型.特殊
函数限定器:
内联
虚
显
声明.又
又名:
标识符
声明.类型
类型限定器:
尾型限定器
类限定器
枚限定器
尾型限定器:
简单类型限定器
详述型限定器
型名限定器
常易限定器
类型限定器序列:
类型限定器 属性限定器序列 可选 C++0x
类型限定器 类型限定器序列
尾型限定器序列:
尾型限定器 属性限定器序列 可选 C++0x
尾型限定器 尾型限定器序列 C++0x
字典.类型.简单
简单类型限定器:
:: 可选 嵌套名限定器 可选 型名
:: 可选 嵌套名限定器 元 简单模板标识
16符型 C++0x
32符型 C++0x
符 宽符型 极 短 整 长 整 正 浮 双精 空
动 C++0x
推导型限定器 C++0x
型名:
类名
枚名
又名
简单模板标识 C++0x
推导型限定器:
推导(式)C++0x
声明.类型.详
详述型限定器:
类键 属性限定器序列 可选:: 可选 嵌套名限定器 可选 标识符
类键:: 可选 嵌套名限定器 可选 元 可选 简单模板标识
枚:: 可选 嵌套名限定器 可选 标识符
声明.枚
枚名:
标识符
枚限定器:
枚头{枚举器列表 可选}C++0x
枚头{枚举器列表,}C++0x
枚头:
枚键 属性限定器序列 可选 标识符 可选 枚基 可选 C++0x
枚键 属性限定器序列 可选 嵌套名限定器 标识符 枚基 可选 C++0x
暗色枚声明:
枚键 属性限定器序列 可选 标识符 枚基 可选;C++0x
枚键:
枚 C++0x
枚 类 C++0x
枚 构 C++0x
枚基:
:类型限定器序列 C++0x
枚举器列表:
定义枚举器 C++0x
枚举器列表,定义枚举器 C++0x
定义枚举器:
枚举器
枚举器=常数式
枚举器:
标识符
名字空间.定义
名间名:
原名间名
别名名间
原名间名:
标识符
定义名间:
定义命名名间
定义未命名名间
定义命名名间:
定义原名间
扩展定义名间
定义原名间:
内联 可选 名字空间 标识符{名间体}C++0x
扩展定义名间:
内联 可选 名字空间 原名间名{名间体}C++0x
定义未命名名间:
内联 可选 名字空间{名间体}
名间体:
声明序列 可选
名字空间.别名
别名名间:
标识符
定义名间别名:
名字空间 标识符=合格名间限定器;
合格名间限定器:
:: 可选 嵌套名限定器 可选 名间名
名字空间.用声明
用声明:
用 型名 可选:: 可选 嵌套名限定器 不合格标识;
用::不合格标识;
名字空间.用指令
用指令:
属性限定器序列 可选 用 名字空间:: 可选 嵌套名限定器 可选 名间名;
声明.汇编
定义汇编:
汇编(串字面);
声明.链接
链接规范:
外 串字面{声明序列 可选}
外 串字面 声明
声明.属性.语法
属性限定器序列:
属性限定器 C++0x
属性限定器序列 属性限定器 C++0x
属性限定器:
[[属性列表]]C++0x
对齐限定器 C++0x
对齐限定器:
对齐为(型标... 可选)C++0x
对齐为(赋值式... 可选)C++0x
属性列表:
特性 可选 C++0x
属性列表,特性 可选 C++0x
特性...C++0x
属性列表,特性...C++0x
特性:
属性令牌 属性实参语句 可选 C++0x
属性令牌:
标识符 C++0x
属性域令牌 C++0x
属性域令牌:
属性名间::标识符 C++0x
属性名间:
标识符 C++0x
属性实参语句:
(平衡令牌序列)C++0x
平衡令牌序列:
平衡令牌 C++0x
平衡令牌序列 平衡令牌 C++0x
平衡令牌:
(平衡令牌序列)C++0x
[平衡令牌序列]C++0x
{平衡令牌序列}C++0x
除了"()[]{}"的令牌 C++0x
声明.声明
初化声明器列表:
初化声明器
初化声明器列表,初化声明器
初化声明器:
声明器 初化器 可选
声明器:
针声明器 C++0x
无针声明器 形参和限定器 尾中类型 C++0x
针声明器:
无针声明器 C++0x
针符号 针声明器 C++0x
无针声明器:
声明器标识 属性限定器序列 可选 C++0x
无针声明器 形参和限定器 C++0x
无针声明器[常数式 可选]属性限定器序列 可选 C++0x
(针声明器)C++0x
形参和限定器:
(形参声明语句)属性限定器序列 可选 常易限定器序列 可选 引用限定器 可选 异常规范 可选 C++0x
尾中类型:
->尾型限定器序列 抽象声明符 可选 C++0x
针符号:
*属性限定器序列 可选 常易限定器序列 可选 C++0x
&属性限定器序列 可选 C++0x
&&属性限定器序列 可选 C++0x
:: 可选 嵌套名限定器*属性限定器序列 可选 常易限定器序列 可选 C++0x
常易限定器序列:
常易限定器
常易限定器 常易限定器序列
常易限定器:
常
易失
引用限定器:
&C++0x
&&C++0x
声明器标识:
... 可选 标识式 C++0x
:: 可选 嵌套名限定器 可选 类名 C++0x
声明.名
型标:
类型限定器序列 抽象声明器 可选
抽象声明符:
针抽象声明器 C++0x
无针抽象声明器 可选 形参和限定器 尾中类型 C++0x
... C++0x
针抽象声明器:
无针抽象声明器 C++0x
针符号 针抽象声明器 可选 C++0x
无针抽象声明器:
无针抽象声明器 可选 形参和限定器 C++0x
无针抽象声明器 可选[常数式]属性限定器序列 可选 C++0x
(针抽象声明器)C++0x
声明.函数型
形参声明语句:
形参声明列表 可选... 可选
形参声明列表,...
形参声明列表:
形参声明
形参声明列表,形参声明
形参声明:
属性限定器序列 可选 声明限定器序列 声明器 C++0x
属性限定器序列 可选 声明限定器序列 声明器=初化器语句 C++0x
属性限定器序列 可选 声明限定器序列 抽象声明符 可选 C++0x
属性限定器序列 可选 声明限定器序列 抽象声明符 可选=初化器语句 C++0x
声明.函数型.定义.一般
定义函数:
属性限定器序列 可选 声明限定器序列 可选 声明器 函数体 C++0x
属性限定器序列 可选 声明限定器序列 可选 声明器=默认;C++0x
属性限定器序列 可选 声明限定器序列 可选 声明器=删;C++0x
函数体:
构造器初化器 可选 组合句 C++0x
函数试块 C++0x
声明.初化
初化器:
括等号初化器 C++0x
(式列表)C++0x
括等号初化器:
=初化器语句 C++0x
括号初化列表 C++0x
初化器语句:
赋值式 C++0x
括号初化列表 C++0x
初化器列表:
初化器语句... 可选 C++0x
初化器列表,初化器语句... 可选 C++0x
括号初化列表:
{初化器列表, 可选}C++0x
{}C++0x
类
类名:
标识符
简单模板标识 C++0x
类限定器:
类头{成员规范 可选}
类头:
类键 属性限定器序列 可选 类头名 虚类限定器序列 可选 基句 可选 C++0x
类键 属性限定器序列 可选 基句 可选 C++0x
类头名:
嵌套名限定器 可选 类名 C++0x
虚类限定器序列:
虚类限定器 C++0x
虚类限定器序列 虚类限定器 C++0x
虚类限定器:
止 C++0x
类键:
类
构
联
类.内存
成员规范:
成员声明 成员规范 可选
访问限定器:成员规范 可选
成员声明:
属性限定器序列 可选 声明限定器序列 可选 成员声明器列表 可选;C++0x
定义函数; 可选
用声明
静断声明 C++0x
模板声明
别名声明 C++0x
成员声明器列表:
成员声明器
成员声明器列表,成员声明器
成员声明器:
声明器 虚限定器序列 可选 纯限定寄 可选
声明器 虚限定器序列 可选 括等号初化器 可选 C++0x
标识符 可选 属性限定器序列 可选 虚限定器序列 可选:常数式
虚限定器序列:
虚限定器
虚限定器序列 虚限定器
虚限定器:
盖
止
新
纯限定器:
=0
类.继承
基句:
:基限定器列表
基限定器列表:
基限定器... 可选 C++0x
基限定器列表,基限定器... 可选 C++0x
基限定器:
属性限定器序列 可选 基类型限定器 C++0x
属性限定器序列 可选 虚 访问限定器 可选 基类型限定器 C++0x
属性限定器序列 可选 访问限定器 虚 可选 基类型限定器 C++0x
类或推导:
:: 可选 嵌套名限定器 可选 类名 C++0x
推导型限定器 C++0x
基类型限定器:
类或推导 C++0x
访问限定器:
私
保护
公
类.转换.函数型
转换函数标识:
符号 转换型标识
转换型标识:
类型限定器序列 转换声明器 可选
转换声明器:
针符号 转换声明器 可选
类.基.初化
构造器初化器:
:内存初化器列表
内存初化器列表:
内存初化器... 可选 C++0x
内存初化器,内存初化器列表... 可选 C++0x
内存初化器:
内存初化器标识(式列表 可选)
内存初化器标识 括号初化列表 C++0x
内存初化器标识:
类或推导
标识符
重载.操作
符号函数标识: 见C++标准核心语言问题n.189
符号 可重载符号
符号 可重载符号<模板实参列表 可选>
可重载符号: 见C++标准核心语言问题n.189
新 删 新[] 删[] + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= && || ++ -- , ->* -> () []
重载.字面
字面符号标识:
符号""标识符 C++0x
模板
模板声明:
元<模板形参列表>声明 C++0x-保留导出关键字,未来用
模板形参列表:
模板形参
模板形参列表,模板形参
模板.参数
模板形参:
类型形参
形参声明
类型形参:
类... 可选 标识符 可选 C++0x
类 标识符 可选=型标
型名... 可选 标识符 可选 C++0x
型名 标识符 可选=型标
元<模板形参列表>类... 可选 标识符 可选 C++0x
元<模板形参列表>类 标识符 可选=标识式
模板.名
简单模板标识:
模板名<模板实参列表 可选>C++0x
模板标识:
简单模板标识 C++0x
符号函数标识<模板实参列表 可选>C++0x
字面符号标识<模板实参列表 可选>C++0x
模板名:
标识符
模板实参列表:
模板实参... 可选 C++0x
模板实参列表,模板实参... 可选 C++0x
模板实参:
常数式 C++0x
型标 C++0x
标识式 C++0x
模板.资源
型名限定器:
型名:: 可选 嵌套名限定器 标识符 C++0x
型名:: 可选 嵌套名限定器 元 可选 简单模板标识 C++0x
模板.显
显实例:
外 可选 元 声明 C++0x
模板.解释.特殊
显特化:
元<>声明
异常
试块:
试 组合句 处理器序列
函数试块:
试 构造器初化器 可选 组合句 处理器序列 C++0x
处理器序列:
处理器
处理器 处理器序列
处理器:
抓(声明异常)组合句
声明异常:
属性限定器序列 可选 类型限定器序列 声明器 C++0x
属性限定器序列 可选 类型限定器序列 抽象声明符 可选 C++0x
... C++0x
抛式:
抛 赋值式选项
异常.特殊
异常规范:
动态异常规范 C++0x
无异规范 C++0x
动态异常规范:
抛(型标列表 可选)C++0x
型标列表:
型标... 可选 C++0x
型标列表,型标... 可选 C++0x
无异规范:
无异(常数式)C++0x
无异 C++0x
c++
预处理文件:
组 可选
组:
组部分
组 组部分
组部分:
如节
控制行
文本行 C++0x
#非指令 C++0x
如节:
如组 异如组 可选 异组 可选 结束如果行
如组:
#如 常数式 新行 组 可选
#如定义 标识符 新行 组 可选
#如未定义 标识符 新行 组 可选
异如组:
异如组
异如组 异如组
异如组:
#异如 常数式 新行 组 可选
异组:
#异 新行 组 可选
结束如果行:
#结束如果 新行
控制行:
#包含 预令牌 新行
#定义 标识符 替代列表 新行
#定义 标识符 左括号 标识符列表 可选)替代列表 新行 C++0x
#定义 标识符 左括号 标识符列表,...)替代列表 新行 C++0x
#未定义 标识符 新行
#行 预令牌 新行
#错误 预令牌 可选 新行
#指示 预令牌 可选 新行
#新行
文本行:
预令牌 可选 新行 C++0x
非指令:
预令牌 新行 C++0x
左括号:
前无空格的(
标识符列表:
标识符
标识符列表,标识符
替代列表:
预令牌 可选
预令牌:
预处理令牌
预令牌 预处理令牌
新行:
新行符
|