01-输入格式

输入格式 — The Rust Reference

译文 · 基于 The Rust Reference

原文链接: https://doc.rust-lang.org/reference/input-format.html

r[input]

输入格式

r[input.syntax]

CHAR -> [U+0000-U+D7FF U+E000-U+10FFFF] // Unicode 标量值

ASCII -> [U+0000-U+007F]

NUL -> U+0000

EOF -> !CHAR  // 文件或输入结束

r[input.intro] 本章描述如何将源文件解释为 token 序列。

程序如何组织到文件中,见 Crate 与源文件。

r[input.encoding]

源编码

r[input.encoding.utf8] 每个源文件都被解释为以 UTF-8 编码的 Unicode 字符序列。

r[input.encoding.invalid] 若文件不是合法 UTF-8,则为错误。

r[input.byte-order-mark]

字节序标记的移除

若序列中的第一个字符是 U+FEFF(字节序标记),则将其移除。

r[input.crlf]

CRLF 规范化

每一对紧接着的 U+000D(CR)后跟 U+000A(LF)的字符,都替换为单个 U+000A(LF)。这只发生一次,不会反复进行,因此规范化之后,输入中仍可能存在紧跟着 U+000A(LF)的 U+000D(CR)(例如,若原始输入包含 “CR CR LF LF”)。

字符 U+000D(CR)的其他出现保持原位(它们被当作 空白 处理)。

r[input.shebang]

Shebang 的移除

r[input.shebang.removal] 若存在 shebang,则将其从输入序列中移除(因此会被忽略)。

r[input.tokenization]

词法分析

随后,得到的字符序列按本章其余部分所述转换为 token。

注意 标准库的 [include!] 宏对其读取的文件应用下列变换:

  • 字节序标记的移除。
  • CRLF 规范化。
  • 在项(item)上下文中调用时移除 shebang(与表达式或语句上下文相对)。

[include_str!] 和 [include_bytes!] 宏不应用这些变换。

最后修改 August 21, 2026: 更新 (76fc81a2e)