标识符
词法分析器
IDENTIFIER_OR_KEYWORD
XID_Start XID_Continue*
|_XID_Continue+RAW_IDENTIFIER :
r#IDENTIFIER_OR_KEYWORD 除crate,self,super,Self外NON_KEYWORD_IDENTIFIER : IDENTIFIER_OR_KEYWORD 除 严格或 保留关键字外
IDENTIFIER
NON_KEYWORD_IDENTIFIER | RAW_IDENTIFIERRESERVED_RAW_IDENTIFIER :
r#_
标识符遵循 Unicode 标准附件 #31 中关于 Unicode 16.0 版本的规范,并附加了以下描述的规则。以下是一些标识符示例:
foo_identifierr#trueМосква東京
使用的 UAX #31 规范是
- Start :=
XID_Start,加上下划线字符 (U+005F) - Continue :=
XID_Continue - Medial := empty
附加约束是单个下划线字符不是标识符。
注意
以下划线开头的标识符通常用于表示有意未使用的标识符,并且会抑制
rustc中的未使用警告。
标识符不能是 严格或 保留关键字,除非使用下面 原始标识符 中描述的 r# 前缀。
零宽度非连接符 (ZWNJ U+200C) 和零宽度连接符 (ZWJ U+200D) 字符不允许用于标识符中。
在以下情况下,标识符仅限于 XID_Start 和 XID_Continue 的 ASCII 子集
extern crate声明 (AsClause 标识符除外)- 在 路径 中引用的外部 crate 名称
- 从文件系统加载且不带
path属性 的 模块 名称 - 带有
no_mangle属性的项 - 外部块 中的项名称
规范化
标识符使用 Unicode 标准附件 #15 中定义的 标准化形式 C (NFC) 进行规范化。如果两个标识符的 NFC 形式相等,则它们相等。
原始标识符
原始标识符类似于普通标识符,但带有 r# 前缀。(请注意,r# 前缀不属于实际标识符的一部分。)
与普通标识符不同,原始标识符可以是任何严格或保留关键字,除了上面 RAW_IDENTIFIER 列出的关键字之外。
使用 RESERVED_RAW_IDENTIFIER 词法单元 r#_ 是错误的,以避免与 通配符模式 混淆。