标识符

词法分析器:

IDENTIFIER_OR_KEYWORD

      XID_Start XID_Continue*

   | _ XID_Continue+

RAW_IDENTIFIER : r# IDENTIFIER_OR_KEYWORD 除了 crateselfsuperSelf

NON_KEYWORD_IDENTIFIER : IDENTIFIER_OR_KEYWORD 除了 严格保留 关键字

IDENTIFIER

NON_KEYWORD_IDENTIFIER | RAW_IDENTIFIER

标识符遵循 Unicode 标准附件 #31 中针对 Unicode 版本 15.0 的规范,并进行了以下补充说明。以下是一些标识符示例:

  • foo
  • _identifier
  • r#true
  • Москва
  • 東京

UAX #31 中使用的配置文件是:

并附加限制条件:单个下划线字符不是标识符。

**注意**:以下划线开头的标识符通常用于指示有意未使用的标识符,并且会抑制 rustc 中的未使用警告。

如果没有 原始标识符 中描述的 r# 前缀,则标识符不能是 严格保留 关键字。

标识符中不允许使用零宽度非连接符 (ZWNJ U+200C) 和零宽度连接符 (ZWJ U+200D) 字符。

在以下情况下,标识符仅限于 XID_StartXID_Continue 的 ASCII 子集:

规范化

标识符使用 Unicode 标准附件 #15 中定义的规范化形式 C (NFC) 进行规范化。如果两个标识符的 NFC 形式相等,则它们相等。

过程声明 宏在其输入中接收规范化的标识符。

原始标识符

原始标识符类似于普通标识符,但以 r# 为前缀。(请注意,r# 前缀不作为实际标识符的一部分包含在内。)与普通标识符不同,原始标识符可以是任何严格或保留关键字,但 RAW_IDENTIFIER 上面列出的关键字除外。